当鼠标移动到屏幕边缘时,JavaFX显示菜单

时间:2017-09-05 19:27:03

标签: javafx-8

我想在鼠标移动到屏幕边缘时显示(加载)菜单,并在鼠标离开屏幕边缘时隐藏(移除)。我正在尝试实现本视频https://www.youtube.com/watch?v=5GsdaZWDcdY中所见的内容(前进6分钟)。

当Welcome.fxml屏幕没有位于屏幕边缘的子项时,它可以正常工作。但是,当鼠标移过任何子节点时,它会停止读取StackPane(base)上的X,Y坐标。我不能使用鼠标透明,因为一些子节点是需要使用鼠标事件的按钮。

感谢任何建议或资源以供参考,以帮助我实现这一目标。谢谢。

public class Main扩展Application {

    StackPane base = new StackPane();

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("Welcome.fxml"));
    base.getChildren().add(root);
    Scene scene = new Scene(base);
    stage.setScene(scene);
    stage.show();

    VBox menu = FXMLLoader.load(getClass().getResource("Menu.fxml"));

    base.setOnMouseMoved((event) -> {
        if (event.getScreenX() < 40) {
            if (!base.getChildren().contains(menu)) {
                base.getChildren().add(menu);
                base.setAlignment(menu, Pos.TOP_LEFT);
            }
        } else {
            if (base.getChildren().contains(menu)) {
                base.getChildren().remove(menu);
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

您是否尝试过事件过滤器?

base.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
    //Do your processing
});

事件过滤器应该是第一个获取事件的过滤器。