0
下面是一个来自eclipse站点的修改片段,用于展示我正在谈论的内容。有2个性能问题。在ScrolledComposite中有很多复合材料的SWT性能
1)最初,它需要几秒钟才能显示。如果我将循环增加到10000,则需要很长时间(可能是线性的)。
2)当你点击一个按钮时,它会将一个小部件添加到面板中,然后必须再次将所有小部件放置在滚动条中。这需要数秒(太长)。
有没有办法完成这些事情我试图做得更快?
我试图想出一种方式来显示“列表”类型的视图中的任意项目。我的理解是,标准列表小部件只显示字符串,所以我假设我必须像这样设置我自己的。有没有其他的方法?
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class Snippet188 {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
sc.setLayout(new FillLayout());
final Composite c = new Composite(sc, SWT.NONE);
RowLayout rl = new RowLayout(SWT.VERTICAL);
rl.wrap = false;
c.setLayout(rl);
System.out.println(System.currentTimeMillis());
for (int i = 0; i < 1000; i++) {
final Composite item = new Composite(c, SWT.NONE);
item.setLayout(new RowLayout(SWT.VERTICAL));
Label l = new Label(item, SWT.NONE);
l.setText("Label " + i);
Button b = new Button(item, SWT.PUSH);
b.setText("Button " + i);
final int value = i;
b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.out.println("clicked: " + value);
Label newL = new Label(item, SWT.NONE);
newL.setText("new Label " + value);
item.pack();
c.pack();
}
});
}
System.out.println(System.currentTimeMillis());
sc.setContent(c);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.setShowFocusedControl(true);
shell.setSize(300, 500);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
谢谢,但我拿了那个片段,并增加了从40到1000的行数,它甚至不会显示。所以......似乎这种方法不会奏效。 – mentics
如果元素/行的数量超过4-500,则使用虚拟表格......这比常规表格快得多。表格的缓慢互动是由于大多数平台的限制,所有要显示的文本和图像必须事先找到。 –