2011-07-26 14 views
7

muszę dokonać tylko liście z JTree przeciągany ale następujące fragmenty kodu sprawia, że ​​każdy węzeł w drzewie Draggable:JTree zrobić tylko pozostawia przeciągany

tree.setDragEnabled(true); 

Jak mogę ograniczyć Draggable elementem konkretnego Informationen Urządzony węzeł drzewa taki jak właściwość myNode.isLeaf();

tia Jaster

Odpowiedz

5

Można to zrobić poprzez zmianę TransferHandler z JTree zwrócić NULL Transferable na non węzłów liściowych.

Oto krótki przykład:

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

to chyba jedyny sposób, tylko uwaga: wszystkie domyślne zachowanie przeciągania zostaną utracone podczas instalacji niestandardowej obsługi. Rzeczą rozsądną byłoby delegowanie wszystkich operacji do domyślnego programu obsługi i przechwycenie tylko możliwego do przeniesienia stworzenia, co niestety nie było możliwe ostatnio (niektóre ważne części BasicTransferHandler są paczkami prywatne lub chronione, zapomniałem dokładnie) – kleopatra

+0

Thx działa zgodnie z przeznaczeniem. – jaster

Powiązane problemy