【发布时间】:2019-11-07 18:58:53
【问题描述】:
我们正在尝试实现这种布局,骰子行是文本字段,当单击随机按钮时,骰子一侧的一个字母会填充其中一个字母
我们有一个由 duh TextFields 组成的 Target TextField。
当用户将其中一个骰子拖到目标上时,目标就会被填充。
问题是 Source 与 Target 的关系是 1 对 1,用户事先不知道源需要放在哪里。
接下来,我们尝试使用 Button 来表示骰子并将 Button 拖放到作为 AnchorPane 的 newPane。当我们尝试添加第二个按钮时,尝试将重复的子项添加到窗格时出现错误
问题是
1. 我们可以有源到目标的一对多关系吗?
如果是这样,我们如何编码?如果可能的话,它看起来像是不真实的代码行
如何克服使用 newPane 概念的问题?
或者有更好的设计方法吗?
我们知道我们可以单击 Button 并构建一个单词并将其添加到 ListView 中,这不是我们想要的。
我们将使用 Button 的代码发布到它可以工作的 newPane,但是当我们为第二个 Button 复制此代码时,我们会收到上述错误
@Override
public void initialize(URL url, ResourceBundle rb) {
// Add mouse event handlers for the source
btnOK.setOnMousePressed((MouseEvent event) -> {
btnOK.setMouseTransparent(true);
event.setDragDetect(true);
});
btnOK.setOnMouseReleased((MouseEvent event) -> {
btnOK.setMouseTransparent(false);
});
btnOK.setOnMouseDragged((MouseEvent event) -> {
event.setDragDetect(false);
});
btnOK.setOnDragDetected((MouseEvent event) -> {
btnOK.startFullDrag();
});
// Add mouse event handlers for the target
// =======================================
newPane.setOnMouseDragEntered((MouseDragEvent event) -> {
});
btnOK.setOnMouseDragEntered((MouseDragEvent event) -> {
});
newPane.setOnMouseDragOver((MouseDragEvent event) -> {
});
newPane.setOnMouseDragReleased((MouseDragEvent event) -> {
System.out.println(event.getX());
System.out.println(event.getY());
double h = event.getX();
double v = event.getY();
newPane.getChildren().add(btnOK);
btnOK.setLayoutX(h);
btnOK.setLayoutY(v);
t1.setText(s1.getText());
t1.setStyle("-fx-background-color: lightblue;");
//newPane.getChildren().add(s1);
});
tosswordPane.setOnMouseDragExited((MouseDragEvent event) -> {
});
}
【问题讨论】:
-
你是如何尝试使用第二个按钮的?
-
@Grendel 我们只是复制并粘贴 btnOK 并使用新的 Button id btnNO 更改变量而不是创意命名。我们甚至尝试使用 event2 代替 event 没有运气因为代码失败我们没有发布它抱歉
-
我不确定我是否理解您想要完成的任务。问题仅仅是用户没有指示将骰子拖到哪里吗?如果是这样,那么只要在骰子上检测到拖动,您就可以为目标设置不同的样式。
-
@Slaw 我们想使用目标文本字段,因此当您拖动 W 时,如果源和目标同步,则位置是有效的,但如果您想拖动 O,您需要知道O 目标位于 W 下方,如果您想将 R 拖到 W 下方的位置,这是不可能的,因为 R 没有该位置作为目标 假设您有 3 个骰子,并且您正在用手定位骰子你可以把它们放在你不喜欢的地方,因为源和目标是一对一的关系类型的人工智能问题
-
@Slaw 我们考虑过在拖动 Source 的同时将鼠标悬停在节点 id 上并使用该 id 设置 Target 但现在确定如何获取任何节点的 id 就像我们需要使所有节点通用或编写一个大的 if 语句以包含所有具有 onMouseEntered 事件的目标? ?
标签: javafx drag-and-drop