Заполнение огромной таблицы в приложении RCP SWT/JFace

  • static_cast удрученный на виртуальном базовом классе

Едва ли... Теперь о моем неправильном представлении: Я думал, что A в следующем был виртуальный базовый класс, когда на самом деле это не; это, согласно 10.3.1, полиморфный класс . Используя static_cast здесь, кажется, прекрасен.

struct B { virtual ~B() {} };

struct D : B { };

, Таким образом, да, это - опасная ловушка.

11
задан Brian Tompsett - 汤莱恩 18 January 2017 в 20:20
поделиться

3 ответа

SWT может сделать это за вас. Когда вы используете флаг стиля SWT.VIRTUAL, элементы создаются только при прокрутке до представления. Вот как это сделать:

  1. Создайте таблицу со стилем SWT.VIRTUAL
  2. Установите количество строк с помощью Table # setItemCount ()
  3. Добавьте прослушиватель SWT.SetData, который заполняет элементы таблицы по запросу.

Вот фрагмент кода:

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 ) );
        }
    } );
    shell.setSize( 300, 500 );
    shell.open();
    while( !shell.isDisposed() ) {
        if( !display.readAndDispatch() ) {
            display.sleep();
        }
    }
    display.dispose();
}
19
ответ дан 3 December 2019 в 04:52
поделиться

Вы хотите выполнить отложенную загрузку на дисплее таблицы. По сути, вы храните все эти объекты в памяти за пределами экрана, а затем создаете лишь несколько фактических строк таблицы GUI. Когда пользователь прокручивает, вы повторно визуализируете эти строки с объектами в этом месте прокрутки.

См. эту статью ( РЕДАКТИРОВАТЬ: ой, я имел в виду эту статью ) для Пример JFace.

2
ответ дан 3 December 2019 в 04:52
поделиться

1 - use the setText(String[]) instead of setText(int, String) one call instead of several.

2 - use myTable.setRedraw(false) before and myTable.setRedraw(true) after the process to stop all redrawing opérations during loading data.

it's simpler and can improve performance !!

good luck.

on my side using this I load 2500 lines of 20 column in less than 300ms..... on a standard today PC.

2
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: