Por*_*os3 5 java drag-and-drop javafx
我试图将标签拖放到彼此之上.
我有一个名为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!");
}
});
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行拖放操作时,这就是我所看到的:
Drag and drop started!
drag entered!
drag left!
drag entered!
<I release the mouse here>
drag left!
Run Code Online (Sandbox Code Playgroud)
据我所知,"onDragDropped"事件从未注册过.我究竟做错了什么?我可以告诉每个Label都有拖放事件处理程序,因为它们注册了"已输入"和"已退出"事件.这是处理拖放事件处理程序的唯一代码 - 因此它应首先被其他东西使用.
所有这些标签都在ScrollPane中的HBox中,如果这有任何区别的话.
编辑:我现在尝试在HBox上放置一个drop事件,标签包含在同一个结果中 - 它似乎永远不会被调用.我的setOnDragDropped代码与我的另一个例子中的代码基本相同.
我试过重写我的setOnDragDetected和setOnDragDropped,我试图尽可能地将它们与这个例子(http://docs.oracle.com/javafx/2/drag_drop/jfxpub-drag_drop.htm)进行匹配,以前为我工作过.
编辑2:我有另一个项目,当前有拖放事件处理与此非常相似的事件,虽然有不同的对象 - 我已经尝试从该项目复制源(并更改变量名称)没有运气.如果可能有帮助,我也可以包含该来源.但它基本上是一样的.
我还可以提供哪些帮助以获得答案?
小智 7
您需要接受传输模式setOnDragOver,如下所示:
label.setOnDragOver(new EventHandler <DragEvent>() {
public void handle(DragEvent event) {
event.acceptTransferModes(TransferMode.ANY);
event.consume();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |