2015-05-20 66 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