我想在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());

 }

最佳答案

一个虚拟表通过侦听器询问当前可见行的内容。这就是虚拟表的全部意义:“不要打电话给我们,我们会打电话给您!”

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的表的示例:
  
  ...

10-07 19:16
查看更多