Я использую Outline
из netbeans для отображения некоторых структурированных данных.Доступ к дереву объектов в netbeans outline
Как сопоставить выбранную строку с объектом в дереве?
Я использую Outline
из netbeans для отображения некоторых структурированных данных.Доступ к дереву объектов в netbeans outline
Как сопоставить выбранную строку с объектом в дереве?
Вы можете посмотреть на пример в Announcing the new Swing Tree Table today. Похоже, что автор Creating a Data Model, поэтому Responding to Node Selection должен быть полезен. Я считаю, класс org.netbeans.swing.outline.Outline
в NetBeans 6.8:
NetBeans/platform11/modules/org-netbeans-swing-outline.jar
Addenda:
Обратите внимание, что Outline
спускается с JTable
, так How to Use Tables: User Selections может быть полезным. Основываясь на приведенном выше примере, вот слушатель, который показывает очевидное изменение номера строки, как узлы раскрываться и сворачиваться, и выбор остается неизменным:
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);
}
}
});
provisional Хотя, вы можете посмотреть на OutlineModel
и DefaultOutlineModel
. Первый реализует как TreeModel
, так и TableModel
и предлагает TreePathSupport
; последний упоминает «несоответствие импеданса между TableModelEvent и TreeModelEvent».
Как JTable
, выбранный индекс строки в представлении может не совпадать с соответствующей строки в модели, возможно из-за сортировки и т.д. Метод getValueAt()
кажется удобный способ вызова convertRowIndexToModel()
. Это характерно для разделяемой модели модели Swing, которая «сворачивает элементы представления и контроллера каждого компонента в единый объект пользовательского интерфейса». См. A Swing Architecture Overview.
Контур обеспечивает только метод getSelectedRow(). Но индекс строки зависит от расширенного/свернутого состояния узлов выше. Я не вижу способа сопоставить индекс выбранной строки с объектом в TreeModel. – p4553d
См. Выше. Я не уверен, что вы пытаетесь сделать, но похоже, что вы можете пересечь свои «RowModel» или «TreeModel» по мере необходимости. – trashgod
Это какое-то уродливое решение, чтобы отслеживать представление, чтобы получить информацию для модели, которую я пытался избежать. Но это единственный способ на данный момент. Спасибо за помощь! – p4553d