mousePressed后,在JavaFX中获取另一个节点

时间:2015-09-15 16:37:25

标签: java javafx javafx-8

我有一个列表按钮。我需要能够单击一个然后执行一个操作,但也单击一个,继续单击然后将鼠标拖动到另一个,然后释放单击第二个,两个都需要执行操作。

在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.

关于我想要实现的目标是否有任何例外?

1 个答案:

答案 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);