2015-05-20 64 views
0

目標是使用拖放在treeView上移動節點本身。
我已經看到了幾個例子,其中事件在重新定義的TreeCell中處理,但只有檢測到的事件被觸發。
這是我的代碼:JavaFx 8 TreeCell拖放

public class TreeCellImpl extends TreeCell<TreeItemContent> { 

    public TreeCellImpl() { 
     setOnDragEntered(e -> { 
      System.out.println(" Entered "); 
      e.consume(); 
     }); 
     setOnDragDetected(e -> { 
      System.out.println(" Detected "); 
      startDragAndDrop(TransferMode.MOVE); 
      e.consume(); 
     }); 
     setOnDragDone(e -> { 
      System.out.println(" Done "); 
      e.consume(); 
     }); 
     setOnDragDropped(e -> { 
      System.out.println(" Dropped "); 
      e.setDropCompleted(true); 
      e.consume(); 
     }); 
     setOnDragExited(e -> { 
      System.out.println(" Exited "); 
      e.consume(); 
     }); 
     setOnDragOver(e -> { 
      System.out.println(" Over "); 
      e.consume(); 
     }); 
    } 
} 

在哪裏我錯了嗎?

回答

1

看來,直到你把一些內容Dragboard事件處理程序不會被觸發:

setOnDragDetected(e -> { 
     System.out.println(" Detected "); 
     Dragboard db = startDragAndDrop(TransferMode.MOVE); 
     ClipboardContent content = new ClipboardContent(); 
     content.putString("Hello!"); 
     db.setContent(content); 
     e.consume(); 
    }); 

您也可以選擇使用MouseEvent描述的其它類型的阻力正下落機構。即MouseDragEvent

+0

它的工作原理,謝謝! – Alessandro