我想在SWT表中填充大量数据。搜索互联网后,我发现了以下代码。但是此代码将填充硬代码数据。
public static void main( String[] args ) {
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new FillLayout() );
final Table table = new Table( shell, SWT.VIRTUAL );
table.setItemCount( 10000 );
table.addListener( SWT.SetData, new Listener() {
public void handleEvent( Event event ) {
TableItem item = (TableItem)event.item;
item.setText("Item" + table.indexOf( item ) ); // should be replaced
// by below for loop
}
} );
shell.setSize( 300, 500 );
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
display.dispose();
}
我想在table.addListener句柄事件内填充如下内容。请帮助我。预先感谢!
for (int i = 0; i < informationList.size(); i++) {
TableItem item = new TableItem(informationTable, SWT.CENTER);
item.setText(1, informationList.get(i).getName());
item.setText(2, "");
item.setText(3, "");
item.setText(4, ""+informationList.get(i).getId());
}
答案 0 :(得分:1)
虚拟表通过侦听器询问当前可见行的内容。这就是虚拟表的全部内容:“不要打给我们,我们会打给您!”
table.addListener(SWT.SetData, new Listener() {
public void handleEvent( Event event ) {
TableItem item = (TableItem)event.item;
int index = table.indexOf(item);
item.setText(1, informationList.get(index).getName());
item.setText(2, "");
item.setText(3, "");
item.setText(4, "" + informationList.get(index).getId());
}
});
另请参阅Javadoc of the Table
widget which also contains an example(由我突出显示):
样式
VIRTUAL
用于创建一个表,其TableItems将 客户按需填充,而不是预先填充。 这可以显着提高表的性能, 很大或TableItem人口昂贵(对于 例如,从外部来源检索值。以下是使用样式为
VIRTUAL
的表格的示例:...
答案 1 :(得分:0)
我通过像
一样实现了它 final String [] names = new String [informationList.size()];
final int [] ids = new int [informationList.size()];
table.setItemCount(informationList);
for (int i = 0; i < informationList.size(); i++) {
names [i] = informationList.get(i).getName();
}
for (int i = 0; i < informationList.size(); i++) {
ids [i] = informationList.get(i).getId();
}
table.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
TableItem item = (TableItem)event.item;
int index = event.index;
item.setText(1, names [index]);
item.setText(2, "");
item.setText(3, "");
item.setText(4, ""+ids [index]);
}
});