Вы можете посмотреть пример в Объявление новой таблицы Swing Tree сегодня . Похоже, что автор создает модель данных , поэтому Ответ на выбор узла должен быть полезным. Я нахожу класс org.netbeans.swing.outline.Outline
в NetBeans 6.8:
NetBeans/platform11/modules/org-netbeans-swing-outline.jar
Addenda:
Обратите внимание, что Outline
происходит от JTable
, поэтому Как использовать таблицы: выбор пользователя может быть полезным. Основываясь на приведенном выше примере, вот слушатель, который показывает очевидное изменение номера строки, когда узлы расширяются и сворачиваются, а выбор остается постоянным:
outline.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int row = outline.getSelectedRow();
File f = (File) outline.getValueAt(row, 0);
if (!e.getValueIsAdjusting()) {
System.out.println(row + ": " + f);
}
}
});
Хотя приблизительно , вы можете посмотреть на OutlineModel
и DefaultOutlineModel
. Первый реализует TreeModel
и TableModel
и предлагает TreePathSupport
; последний упоминает «несоответствие импеданса между TableModelEvent и TreeModelEvent».
Как и JTable
, выбранный индекс строки в представлении может не соответствовать соответствующей строке в модели, возможно, из-за сортировки и т. Д. Метод getValueAt()
кажется удобным способом вызова convertRowIndexToModel()
. Это распространено в разделяемой архитектуре модели Swing, которая «объединяет части представления и контроллера каждого компонента в один объект пользовательского интерфейса (пользовательского интерфейса)». См. Обзор архитектуры Swing .