2010-05-15 3 views

ответ

6

Вы можете посмотреть на пример в 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.

+0

Контур обеспечивает только метод getSelectedRow(). Но индекс строки зависит от расширенного/свернутого состояния узлов выше. Я не вижу способа сопоставить индекс выбранной строки с объектом в TreeModel. – p4553d

+0

См. Выше. Я не уверен, что вы пытаетесь сделать, но похоже, что вы можете пересечь свои «RowModel» или «TreeModel» по мере необходимости. – trashgod

+0

Это какое-то уродливое решение, чтобы отслеживать представление, чтобы получить информацию для модели, которую я пытался избежать. Но это единственный способ на данный момент. Спасибо за помощь! – p4553d

Смежные вопросы