Во-первых, избегайте Hashtable
, идите прямо к Map
. В этом случае вам могут потребоваться две потенциальные стандартные реализации: LinkedHashMap
может сохранить порядок добавления записей; TreeMap
, SortedMap
/ NavigableMap
, будет сортировать результаты (порядок которых может быть определен с помощью Comparator
. В качестве альтернативы вам может потребоваться форма Map
, которая запускает события или также предоставляет TableModel
.
Если вам нужно одноразовое преобразование из Map
в таблицу, то это довольно просто.
public static TableModel toTableModel(Map<?,?> map) {
DefaultTableModel model = new DefaultTableModel(
new Object[] { "Key", "Value" }, 0
);
for (Map.Entry<?,?> entry : map) {
model.addRow(new Object[] { entry.getKey(), entry.getValue() });
}
return model;
}
Затем просто создайте JTable
с этой предварительно заполненной моделью.
(Отказ от ответственности: я не тестировал или столько компилировал этот код.)
Для синхронизации Map
и TableModel
требуется больше кода. Обычно лучше избегать дублирования состояния везде, где это возможно. Напишите класс, который выставляет себя как Map
и TableModel
. Вы могли бы стать более непересекающимися, имея Map
, который запускает события, и TableModel
, который адаптирует Map
(хотя обратите внимание, что Map
не имеет произвольного доступа на основе индекса, поэтому вам нужно быть умнее, как умнее) или медленно для больших карт).
Если пойти по другому пути, более простой подход - добавить данные прямо к DefaultTableModel
и вообще не использовать Map
.