JavaFx 8 TreeCell拖放

时间:2015-05-20 10:33:12

标签: drag-and-drop treeview javafx-8 treecell

目标是在treeView上使用拖放来移动节点。我已经看到了几个例子,其中事件在重新定义的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 个答案:

答案 0 :(得分: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