我想在鼠标移动到屏幕边缘时显示(加载)菜单,并在鼠标离开屏幕边缘时隐藏(移除)。我正在尝试实现本视频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);
}
}
});
}
答案 0 :(得分:1)
您是否尝试过事件过滤器?
base.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
//Do your processing
});
事件过滤器应该是第一个获取事件的过滤器。