2012-01-30 1 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_ над узлом (aka: его текст). – kleopatra

+0

Это было мое намерение, но я благодарю вас за ваш ответ :)! – user107043

2

Предполагая, что вы имеете в виду поведение tree.getRowForLocation (...): нет апи на TreeTable, вы попали не хватает апи и может рассмотреть подать вопрос улучшения в swingx отслеживания проблем :-)

Пока это не будет доступно, вы должны сделать это самостоятельно в пользовательском MouseListener, который делегирует соответствующий метод дерева. Going Slightly (кашель ..) загрязнен в типе литье визуализатора для иерархической колонки к 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 (..).