2012-01-30 30 views
5

Tôi đang làm việc với Eclipse và tôi có câu hỏi về JXTreeTables. Tôi muốn một cửa sổ, hiển thị một số thông tin về nút, để bật lên, khi một nút được nhấp đúp. Bây giờ, có thể nhận được nút bấm đôi của JXTreeTable hoặc null nếu nhấp chuột không trực tiếp trên một nút?Cách lấy TreeTableNode nhấp đúp?

Trả lời

4

Tôi đã nhận được câu trả lời về chủ đề kleopatra được đề cập hoạt động hoàn toàn tốt và đơn giản hơn. Đây là mã:

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

vui vì bạn có giải pháp :-) Hãy cẩn thận: theo cách này người nghe sẽ kích hoạt nhấp đúp vào _anywhere_ trong ô bảng có chứa nút, không chỉ khi _directly_ trên nút (aka: văn bản của nó). – kleopatra

+0

Đó là ý định của tôi nhưng rất cám ơn bạn vì câu trả lời của bạn anyway :)! – user107043

2

Giả sử bạn có nghĩa là hành vi của tree.getRowForLocation (...): không có api trên treeTable, bạn nhấn thiếu api và có thể xem xét để nộp một vấn đề cải tiến trong theo dõi vấn đề swingx :-)

Cho đến khi nó sẽ có sẵn, bạn phải tự làm điều đó trong một MouseListener tùy chỉnh mà đại biểu cho phương pháp cây tương ứng. Đi nhẹ (ho ..) bẩn trong loại đúc các renderer cho cột thứ bậc để một 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); 

Chỉ cần cho các hồ sơ, có một sợi song song trong Swinglabs forum over at java.net

Sửa

Các tai họa của các giả định ;-)

Với câu trả lời của OPs, người nghe sẽ kích hoạt nhấp đúp chuột ở bất kỳ đâu trong bảng ô chứa nút, không chỉ khi trực tiếp qua nút (còn gọi là: văn bản của nút). Vì vậy, chỉ ra yêu cầu là nhiều hơn dọc theo dòng tree.getClosestRowForLocation (..) so với các tree.getRowForLocation giả định (..).

Các vấn đề liên quan