2012-01-30 4 views
5

Eclipse로 작업 중이며 JXTreeTables에 대한 질문이 있습니다. 노드를 두 번 클릭했을 때 팝업에 대한 노드에 대한 정보를 보여주는 창이 필요합니다. 이제 JXTreeTable의 두 번 클릭 된 노드를 가져올 수 있습니까? 아니면 클릭이 노드에 직접 연결되지 않았 으면 null입니까?더블 클릭 된 TreeTableNode를 얻는 방법은 무엇입니까?

답변

4

나는 완벽하게 잘 작동하고 더 단순한 thread 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

당신은 그냥 조심 :-) 솔루션이 기쁜 : (그냥 때 _directly_ 노드에 걸쳐 리스너가 노드를 포함하는 테이블 셀에 더블 클릭 _anywhere_에 실행됩니다 이런 식으로 일명 : 그 텍스트). – kleopatra

+0

그건 내 의도 였지만 어쨌든 당신의 답변에 많은 감사드립니다! – user107043

2

당신이 tree.getRowForLocation (...)의 동작을 의미 가정하면 다음 트리 테이블에는 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

편집

에서 병렬 스레드있다 OPS와 가정 ;-)

비애는 테이블에 어디을 클릭 두 번에 발사 할 리스너 대답 소유 노드를 포함하는 셀 ()이 노드를 통해 직접적으로 일 때 (일명 : 해당 텍스트). 그래서 요구 사항은 가정 된 tree.getRowForLocation (..)보다 tree.getClosestRowForLocation (..)의 행을 따라 더 많은 것입니다.

관련 문제