Доступ к объекту дерева в схеме NetBeans - PullRequest
3 голосов
/ 15 мая 2010

Я использую Outline из netbeans для отображения некоторых структурированных данных.

Как мне сопоставить выбранную строку с объектом в дереве?

1 Ответ

6 голосов
/ 16 мая 2010

Вы можете посмотреть пример в Объявление новой таблицы 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 .

...