我想拖放标签在彼此之上。JavaFX OnDragDropped没有注册
我有标签叫starsAndBars的列表,每个标签都有,因为它创造了这个调用它:
private void giveDragAndDropProperties(Label label) {
//Enable drag actions to pick up the label
label.setOnDragDetected(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Drag and drop started!");
Dragboard db = label.startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
int index = starsAndBars.indexOf(label);
content.putString("test");
db.setContent(content);
event.consume();
}
});
label.setOnDragEntered(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("drag entered!");
}
});
label.setOnDragExited(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("drag left!");
}
});
//Enable a label to be dropped on this label
label.setOnDragDropped(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
System.out.println("Drop occurred!");
}
});
}
当我尝试执行拖放操作,这是我所看到的:
Drag and drop started!
drag entered!
drag left!
drag entered!
<I release the mouse here>
drag left!
据我所知,“onDragDropped”事件从不登记。我究竟做错了什么?我可以告诉每个Label都有拖放事件处理程序,因为它们注册了“进入”和“退出”事件。这是处理拖放事件处理程序的唯一代码 - 所以它应该首先被其他东西消费。
所有这些标签都位于ScrollPane内的HBox,如果这有什么区别的话。
编辑:我已经尝试在HBox上放置一个放置事件,标签包含在相同的结果中 - 它似乎永远不会被调用。我的setOnDragDropped代码基本上与我另一个例子中的代码完全相同。
我试图重写我的两个setOnDragDetected和setOnDragDropped,和我试图尽可能与他们这个例子(http://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm)成为可能,这为我工作过。
编辑2:我有另一个项目,目前有拖放事件处理事件非常接近完全相同,但具有不同的对象 - 我试图从没有运气的项目(并更改变量名称)复制源。如果可能有帮助,我也可以包含该来源。但它基本上是一样的。
还有什么可以帮助我找到答案?