【发布时间】:2015-09-15 16:37:25
【问题描述】:
我有一个列表按钮。我需要能够单击一个然后执行一个动作,但也单击一个,保持单击然后将鼠标拖动到另一个然后释放单击第二个并且两者都需要执行一个动作。
在Javadoc中是这样说的:
所有后续的鼠标事件都被传递到同一个节点,直到按钮被释放。 https://docs.oracle.com/javafx/2/api/javafx/scene/input/MouseEvent.html
提到我需要激活press-drag-release。
我读到我需要在 DRAG_DETECTED 事件处理程序中调用 startFullDrag()。
可以通过在 DRAG_DETECTED 事件处理程序内调用 startFullDrag()(在节点或场景上)来启动完全按下-拖动-释放手势。 https://docs.oracle.com/javafx/2/api/javafx/scene/input/MouseDragEvent.html
这是我的代码:
// I create a list of buttons
// I add the EventHandler
private void setButtonNumbers(String number) {
for (char ch : number.toCharArray()) {
Button btn = new Button(ch + "");
btn.getStyleClass().add("btnNumber");
btn.setOnMouseClicked(clickOnNumber(btn));
this.numbers.add(btn);
}
}
private EventHandler<MouseEvent> clickOnNumber(Button btn) {
EventHandler<MouseEvent> event;
event = (MouseEvent t) -> {
btn.setStyle("-fx-background-color: #" + getAColor());
};
return event;
}
当 btn.setOnDragEntered() 时我是否需要 startFullDrag(),然后当 btn.setOnMousePressed() 执行 setMouseTransparent(true) 时,如前所述将其设置为 false:
您可以通过在 MOUSE_PRESSED 处理程序中对拖动的节点调用 setMouseTransparent(true) 并在 MOUSE_RELEASED 处理程序中将其返回为 false 来实现此目的。
我已经尝试过了,但我可以弄清楚如何得到这样的东西:
btn.setOnMouseClicked(// do something);
// Get the button where the mouse has been released and do something with that button.
有什么例子可以说明我想要达到的目标吗?
【问题讨论】:
-
请出示 SSCCE,说明您想尝试什么以及您遇到的困难。
-
我想像最后几行一样。如果我点击 btn1,我保持点击然后我释放对 btn2 的点击,我希望这两个按钮都做一个动作,btn1 将被触发 onMouseClicked。如何让 btn2 “捕捉”事件并做点什么?我试过 btn2.onMouseReleased() 但它只影响 btn1