我有一个列表按钮。我需要能够单击一个然后执行一个操作,但也单击一个,继续单击然后将鼠标拖动到另一个,然后释放单击第二个,两个都需要执行操作。
在Javadoc中,据说:所有后续鼠标事件都将传递到同一节点,直到释放该按钮。 https://docs.oracle.com/javafx/2/api/javafx/scene/input/MouseEvent.html
提到我需要激活按下拖动释放。
我已经读过我需要在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.
关于我想要实现的目标是否有任何例外?
答案 0 :(得分:0)
我找到了这个答案: Can't get mouse event from any other javafx 8 node after getting MOUSE_PRESSED event from one node
我需要做的就是:
btn.setOnDragDetected(mouseEvent -> btn.startFullDrag());
btn.setOnMouseReleased(// do something);
btn.setOnMouseDragReleased(// do something with event triggered from an other node);