簡體   English   中英

在SWT小部件表中動態填充大量數據

[英]Populate huge data dynamically in SWT widget table

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

另請參閱Table小部件的Javadoc,它也包含一個示例 (我重點介紹):

VIRTUAL樣式用於創建一個表,該表的TableItems將由客戶端按需而不是預先填充 對於很大的表或TableItem填充量很大的表(例如,從外部源檢索值),這可以顯着提高性能。

這是一個使用樣式為VIRTUAL的表的示例:

...

我通過實現它來實現它

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM