2012-01-30 89 views
5

我正在使用Eclipse,我有一個關於JXTreeTables的問題。當一個節點被雙擊時,我想要一個窗口,顯示有關該節點的一些信息,以便彈出。現在,是否有可能獲得JXTreeTable的雙擊節點,或者如果點擊不是直接在節點上,則爲null?如何獲取雙擊的TreeTableNode?

回答

4

我收到了關於線索kleopatra提到的答案,它的工作原理非常好,而且更簡單。下面是代碼:

treeTable.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(final MouseEvent e) { 
     if (e.getClickCount() != 2) { 
      return; 
     } 

     final int rowIndex = treeTable.rowAtPoint(e.getPoint()); 

     if (rowIndex < 0) { 
      return; 
     } 

     final TreeTableNode selectedNode = (TreeTableNode)treeTable.getPathForRow(rowIndex).getLastPathComponent(); 
    } 
}); 
+0

高興你有一個解決方案:-)只是要注意:這種方式聽衆將火在其中包含節點的表單元格雙擊_anywhere_,不只是當_directly_在節點(又名:其文字)。 – kleopatra 2012-02-04 11:32:12

+0

這是我的意圖,但很多謝謝你的答案無論如何:)! – user107043 2012-02-06 22:42:27

2

假設你的意思tree.getRowForLocation(...)的行爲:沒有對treetable中沒有API,你打缺少API,並可能考慮在swingx問題跟蹤對文件的改進問題:-)

在可用之前,您必須自己在一個自定義的MouseListener中委託給相應的樹方法。在去稍(咳..)髒型坯連鑄渲染器分層列到JTree:

MouseListener l = new MouseAdapter() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() != 2) return; 
      int column = treeTable.columnAtPoint(e.getPoint()); 
      if (!treeTable.isHierarchical(column)) return; 
      Rectangle cell = treeTable.getCellRect(0, column, false); 
      JXTree tree = (JXTree) treeTable.getCellRenderer(0, column); 
      // translate x to tree coordinates 
      int translatedX = e.getX() - cell.x; 
      int row = tree.getRowForLocation(translatedX, e.getY()); 
      LOG.info("row " + row); 
     } 

    }; 
    treeTable.addMouseListener(l); 

只是爲了記錄在案,有一個在Swinglabs forum over at java.net

編輯

並行線程

的假設;-)

隨着有機磷農藥的困境自己的答案聽者會火上雙擊任何地方在表包含該節點的單元格,而不僅僅是當節點(又名:其文本)上的直接。所以原來這個需求更多地沿着tree.getClosestRowForLocation(..)的方向,而不是假定的tree.getRowForLocation(..)。