我想拖放標籤在彼此之上。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:我有另一個項目,目前有拖放事件處理事件非常接近完全相同,但具有不同的對象 - 我試圖從沒有運氣的項目(並更改變量名稱)複製源。如果可能有幫助,我也可以包含該來源。但它基本上是一樣的。
還有什麼可以幫助我找到答案?