2017-09-05 79 views
1

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

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

感谢任何可以帮助我实现这一目标的建议或参考资料。谢谢。


公共类主要扩展应用{

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

你有没有尝试过的事件过滤器?

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

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