2009-10-28 11 views
2

Есть несколько «продвинутых» виджетов SWT таблицы/таблиц (Nattable, Nebula Grid), но ни один из них не поддерживает действительно большие наборы данных. Nattable - это тот, который подходит ближе всего, но он все еще имеет ограничения в используемых им типах данных, что приводит к тому, что количество строк в таблице становится очень ограниченным.Продвинутые виджеты таблицы SWT

Я должен быть в состоянии представить не менее 2^32 строки, предпочтительно 2^64.

+1

какой пользователь в здравом уме хочет видеть 2^32? Я предлагаю вам пересмотреть свои требования. – andyczerwonka

+2

Никто не говорит о ** видении ** 2^32 ряда. Все дело в ** обращении **. Модель у меня - это 32-битное пространство памяти. Если я не могу установить количество строк в 2^32, мне придется реализовать мою собственную схему подкачки, которую я надеялся избежать. – JesperE

ответ

3

Что не так с SWT.VIRTUAL с таблицей регулятора? Затем вы можете использовать LazyContentProvider,, который дает вам обратный вызов для загрузки того, что необходимо в представлении.

Что-то вроде этого ...

TableViewertableViewer = new TableViewer(parent, SWT.VIRTUAL|SWT.BORDER|SWT.V_SCROLL); 
// skipping the noise 
tableViewer.setItemCount(100000); 
tableViewer.setContentProvider(new LazyContentProvider()); 
tableViewer.setLabelProvider(new TableLabelProvider()); 
tableViewer.setUseHashlookup(true); 
tableViewer.setInput(null); 
+1

Попробуйте setItemCount (Integer.MAX_VALUE). Виджет таблицы SWT имеет вспомогательный массив для всех элементов. Единственное «виртуальное» об этом заключается в том, что фактическое ** значение ** не извлекается до тех пор, пока оно не понадобится. Это хорошо работает, если поиск дорог, но не масштабируется за пару миллионов строк. – JesperE

+0

Если вам нужно ровно 2^32 строки, используйте таблицу с типом SWT.VIRTUAL с элементами Integer.MAX_VALUE, и когда вам нужно будет отобразить пример 500 (из 2^31), вы напечатаете номер позиции. 1000 (от 2 до 32). –

+1

К сожалению, setItemCount (Integer.MAX_VALUE) вызывает ошибку OutOfMemory, предположительно, потому что элемент управления Table пытается создать массив такого размера. – JesperE

6

SWT Matrix разбивает ПРЕГРАД емкости позволяет любое количество BigInteger строк или столбцов. Это закрытый источник, но бесплатный для частного и некоммерческого использования. Раннее альфа-релиз, хотя на данный момент.

+0

SWT Matrix на самом деле кажется многообещающим. Спасибо, я попробую. – JesperE

+0

Буду рад узнать ваши впечатления после попытки. Какие-либо важные функции отсутствуют или не раскрыты в документации? –

+0

сделаю. Я просто должен найти некоторое свободное время, чтобы сделать это. :) – JesperE

Смежные вопросы