2010-05-15 71 views

回答

6

你可以看看Announcing the new Swing Tree Table today中的例子。它看起來像作者Creating a Data Model,所以Responding to Node Selection應該是有幫助的。我覺得在NetBeans 6.8類org.netbeans.swing.outline.Outline

NetBeans/platform11/modules/org-netbeans-swing-outline.jar

附錄:

注意OutlineJTable下降,所以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,你可能看OutlineModelDefaultOutlineModel。前者實施TreeModelTableModel並提供TreePathSupport;後者提到了「TableModelEvent和TreeModelEvent之間的阻抗不匹配」。

JTable,在視圖中選擇的行指數可以不對應的行中的模型相匹配,這可能是由於分選等。getValueAt()方法似乎是一個方便的方法來調用convertRowIndexToModel()。這在Swing的可分離模型體系結構中很常見,它將每個組件的視圖和控制器部分摺疊爲單個UI(用戶界面)對象。「見A Swing Architecture Overview

+0

Outline只提供getSelectedRow()方法。但是行的索引取決於上面節點的展開/摺疊狀態。 我看不出將所選行的索引映射到TreeModel中的對象。 – p4553d 2010-05-16 12:58:36

+0

見上文。我不確定你在做什麼,但是你可以根據需要遍歷你的'RowModel'或'TreeModel'。 – trashgod 2010-05-16 19:44:30

+0

這是一種醜陋的解決方案,跟蹤視圖來獲取模型的信息,我試圖避免。但它似乎是目前唯一的方法。謝謝您的幫助! – p4553d 2010-05-22 12:11:24