Визуализация набора‹T› с помощью JTable в Java Swing

Я хотел бы визуализировать набор потоков, что-то вроде: Set<ThreadInfo>. Я выбираю Set, так как каждый поток в JVM уникален. При выборе отображения с помощью компонента JTable в Java Swing у меня возникают некоторые проблемы.

Мне нужно реализовать TableModel. TableModel использует getValueAt(int row, int col) или setValueAt(Object o, int row, int col) для распространения измененных значений.

Но как реализовать эти методы, используя Set в качестве модели данных? Со списком я бы сказал, что строка = индекс списка, но с набором я не могу делать предположения о порядке элементов.


person Konrad Reiche    schedule 07.04.2011    source источник


Ответы (4)


Я бы придерживался списка, поскольку надежный порядок очень важен для поддержки таблицы. В противном случае вы можете использовать отсортированный набор, такой как TreeSet< /а>.

person Jim    schedule 07.04.2011

Определите, как вы хотите упорядочить потоки, и создайте копию набора в правильно упорядоченном списке. Используйте этот список для модели. Когда набор изменится, обновите список новыми упорядоченными данными.

person jzd    schedule 07.04.2011
comment
Но какая функция вызывается в JTable для обновления всей модели? SetValueAt использует только определенный элемент данных, а также fireTableCellUpdated(row, col);. - person Konrad Reiche; 07.04.2011
comment
@Platz, вы бы обновили свою модель и вызвали model.fireTableDataChanged(); или вы просто создадите новую модель и вызовете setModel() в JTable. - person jzd; 07.04.2011

Set не предоставляет метод для получения объекта через индекс.

Вы должны использовать список, чтобы делать то, что вы хотите.

Или повторяйте элементы до тех пор, пока индекс не будет передан параметром в «int row» (избегайте этого решения).

person Marcos Vasconcelos    schedule 07.04.2011

Таблица по своей сути отображает список, базовая модель данных обычно представляет собой вектор векторов или массив объектов [][]. Итак, в этом случае вам нужно преобразовать свой набор в список (поэтому вам нужны две структуры данных, которые остаются синхронизированными), и вам нужен разумный произвольный доступ — небольшой набор может быть удобен для перебора и поиска вещей, но что-нибудь из значительный размер будет проблемой, так как JTable будет часто спрашивать при определенных обстоятельствах.

person Yishai    schedule 07.04.2011