2011-07-26 33 views
7

Tôi chỉ cần thực hiện lá của một JTree kéo nhưng các đoạn mã sau đây làm cho tất cả các nút trong cây kéo:JTree làm chỉ lá kéo

tree.setDragEnabled(true); 

Làm thế nào tôi có thể giới hạn các phần tử kéo đến informationen cụ thể của một nút cây như thuộc tính myNode.isLeaf();

tia jaster

Trả lời

5

Điều này có thể được thực hiện bằng cách thay đổi TransferHandler của JTree trở về một null Transferable trên các nút lá không.

Dưới đây là một ví dụ nhanh:

JTree tree = new JTree(); 
    tree.setDragEnabled(true); 
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 

    tree.setTransferHandler(new TransferHandler(null) { 
     public int getSourceActions(JComponent c) { 
      return MOVE; 
     } 

     protected Transferable createTransferable(JComponent c) { 
      JTree tree = (JTree) c; 
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent(); 

      if (node.isLeaf()) { 
       // TODO create the Transferable instance for the selected leaf 
      } else { 
       return null; 
      } 
     } 
    }); 
+0

có lẽ đó là cách duy nhất, chỉ cần một hãy cẩn thận: tất cả các hành vi kéo mặc định bị mất khi cài đặt một handler tùy chỉnh. Điều cần làm là giải quyết tất cả các hoạt động cho trình xử lý mặc định và chỉ chặn việc tạo chuyển đổi, tiếc là không thể lần cuối tôi nhìn (một số phần quan trọng của BasicTransferHandler là gói riêng tư hoặc được bảo vệ, quên chính xác) – kleopatra

+0

Thx , nó hoạt động như dự định. – jaster

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