Java 在SWT小部件表中动态填充大量数据

Java 在SWT小部件表中动态填充大量数据,java,swt,eclipse-rcp,Java,Swt,Eclipse Rcp,我想在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

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

 }

虚拟表通过侦听器请求当前可见行的内容。这就是虚拟桌子的全部内容:不要打电话给我们,我们会打电话给你

另请参见我的重点介绍:

“虚拟样式”用于创建要创建其TableItems的表 由客户按需填充,而不是预先填充。 这可以为以下表提供显著的性能改进: 非常大,或者TableItem的数量非常昂贵 例如,从外部源检索值

以下是使用具有虚拟样式的表的示例:


我通过像这样实现它来实现它

    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]);
        }
    });

使用虚拟表将非常有用。我认为他已经尝试了虚拟表,正如您看到的,他使用SWT.Virtual。问题是什么?您不确定如何填充数据,或者数据填充速度太慢?@Milengriov仅指定SWT.VIRTUAL不足以使其成为正确的虚拟表,您必须按照链接中的说明侦听SWT.SetData事件。
    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]);
        }
    });