目标是在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();
});
}
}
哪里错了?
答案 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