Доступ к объекту дерева в схеме NetBeans
Я использую Outline
из NetBeans для отображения некоторых структурированных данных.
Как я могу сопоставить выбранную строку с объектом в дереве?
1 ответ
Вы можете посмотреть пример в разделе "Объявление новой таблицы Swing Tree" сегодня. Похоже, что автор создает модель данных, поэтому ответ на выбор узла должен быть полезным. Я нахожу класс org.netbeans.swing.outline.Outline
в NetBeans 6.8:
NetBeans/platform11/modules/org-netbeans-swing-outline.jar
Дополнения:
Обратите внимание, что 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.