2011-07-26 2 views
7

내가 가지는 JTree의 잎을 드래그 할 필요가 잎하게하지만, 다음 코드 조각은 드래그 트리의 모든 노드 수 :의 JTree는 드래그

tree.setDragEnabled(true); 

나는 특정 정보을에 드래그 할 수있는 요소를 제한 할 수있는 방법을 속성 myNode.isLeaf()와 같은 트리 노드;

TIA의 jaster는

답변

5

이 비 리프 노드에 널 Transferable을 반환 JTreeTransferHandler을 변경하여 수행 할 수 있습니다.

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

단지 조심, 아마도 유일한 방법 :

여기에 빠른 예입니다 사용자 정의 핸들러를 설치할 때 모든 기본 드래그 동작이 손실됩니다. 정상적인 작업은 모든 작업을 기본 처리기에 위임하고 전송할 수있는 생성을 가로채는 것입니다. 불행히도 지난 번에 보지 못했던 것입니다 (BasicTransferHandler의 일부 중요한 부분은 개인 또는 보호 된 패키지이며 정확하게 잊어 버렸습니다) – kleopatra

+0

Thx , 의도 한대로 작동합니다. – jaster