我在拖放标签时遇到了问题。我无法拖动标签并将其放到另一个标签上。检测到事件setOnDragDetected,但未检测到setOnDrugDropped。这些是文件。
FXML:
<HBox fx:id="hboxTwo" alignment="CENTER" spacing="100" style="-fx-background-color: orange;">
<padding>
<javafx.geometry.Insets bottom="25" left="25" right="25" top="25" />
</padding>
<children>
<Label fx:id="labelTwo" prefHeight="50.0" text="labelTWO" />
</children>
</HBox>
</children>
</HBox>
</center>
控制器:
公共类HomeController实现可初始化{
@FXML
Label labelOne;
@FXML
Label labelTwo;
@FXML
HBox hboxOne;
@FXML
HBox hboxTwo;
@Override
public void initialize(URL url, ResourceBundle rb) {
labelOne.setOnDragDetected((MouseEvent event) -> {
System.out.println("source::" + event.getSource());
});
hboxTwo.setOnDragDropped((DragEvent event) -> {
event.acceptTransferModes(TransferMode.ANY);
System.out.println("source::" + event.getSource());
});
hboxTwo.setOnDragEntered((DragEvent event) -> {
event.acceptTransferModes(TransferMode.ANY);
System.out.println("source::" + event.getSource());
});
}
}
只需复制并粘贴下面,JavaFX 8拖放教程中用于拖放检测和放置的相关代码即可。
当您将示例代码与代码进行比较时,您可以看到缺少一些东西:
source.setOnDragDetected(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
/* drag was detected, start a drag-and-drop gesture*/
/* allow any transfer mode */
Dragboard db = source.startDragAndDrop(TransferMode.ANY);
/* Put a string on a dragboard */
ClipboardContent content = new ClipboardContent();
content.putString(source.getText());
db.setContent(content);
event.consume();
}
});
target.setOnDragOver(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
/* data is dragged over the target */
/* accept it only if it is not dragged from the same node
* and if it has a string data */
if (event.getGestureSource() != target &&
event.getDragboard().hasString()) {
/* allow for moving */
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
}
});
target.setOnDragDropped(new EventHandler<DragEvent>() {
public void handle(DragEvent event) {
/* data dropped */
/* if there is a string data on dragboard, read it and use it */
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
target.setText(db.getString());
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);
event.consume();
}
});
要使setOnDragDropped
工作,您必须先设置TransferMode
boxTwo.setOnDragOver((DragEvent event) -> {
event.acceptTransferModes(TransferMode.ANY);
event.consume();
});
boxTwo.setOnDragDropped((DragEvent event) -> {
Label source = (Label) event.getGestureSource();
boxTwo.getChildren().add(source);
event.setDropCompleted()
event.consume();
});
拖放(Drag’n’Drop)是一个很赞的界面解决方案。取某件东西并将其拖放是执行许多东西的一种简单明了的方式,从复制和移动文档(如在文件管理器中)到订购(将物品放入购物车)。 在现代 HTML 标准中有一个 关于拖放的部分,其中包含了例如 dragstart 和 dragend 等特殊事件。 这些事件使我们能够支持特殊类型的拖放,例如处理从 OS 文件管理器中拖动文件,并将其拖放到浏览器窗口中。
我尝试了几乎所有的方法,但是鼠标拖动事件没有触发,就像这里解释的那样: https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/input/MouseDragEvent.html 下面是一个简单的示例,您可以尝试一下(我在JavaFX11.0.2中使用Java11): 我想通过在或中获取的引用。有许多嵌套窗格等,因为我想保持原来的项目布
问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。
问题内容: 我想通过覆盖JLabel上的鼠标事件来启用JLabel上的拖放功能,但是当我在mousePressed事件中定义拖放时,mouseReleased对该JLabel无效。难道我做错了什么 ? 缩略图是JLabel的数组 运行该程序时,拖放有效,但不会打印“此处释放鼠标”语句。但是,当我从mousePressed()方法中删除负责DND的代码时,将打印“此处释放了鼠标”。 这段代码有什么问
我已经在我的游戏中实现了拖放功能,但到目前为止,我只能“拖放”到硬编码的位置。如图所示: 我想要的是: 当船舶被丢弃时,它的x、y值(相对于GridPane)被保存,或者 飞船掉落到的细胞被保存。 我的setOnDragDropped事件在此处处理: 我觉得这应该是一个简单的鼠标悬停事件或类似的事情,但我不知道该怎么做。 编辑:下面类的完整代码: }
我在做拖放。我正在将一些按钮从一个VBox拖动到另一个VBbox。我现在看到的是,只有当鼠标光标进入目标的边界时,才会触发OnDragEnter事件。 我的问题是:当源按钮边框与目标列表边框重叠时,如何触发拖动事件(或其他事件)? 非常感谢你