Динамическое заполнение огромных данных в таблице виджетов SWT - PullRequest
0 голосов
/ 03 января 2019

Я хочу заполнить огромные данные в таблице 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());

 }

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Я достиг этого, реализовав его как

    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]);
        }
    });
0 голосов
/ 03 января 2019

Виртуальная таблица запрашивает у слушателя содержимое видимых в данный момент строк.Вот что такое виртуальная таблица: «Не звоните нам, мы вам позвоним!»

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 виджета Tableкоторый также содержит пример (выделение мной):

Стиль VIRTUAL используется для создания таблицы, чьи TableItems должны быть заполнены клиентом на по требованию на основе вместо первоначального.Это может обеспечить значительное улучшение производительности для таблиц, которые очень велики или для которых заполнение TableItem является дорогостоящим (например, получение значений из внешнего источника).

Вот пример использования таблицы со стилем VIRTUAL:

...

...