2017-09-05 3 views
1

Je souhaite afficher (charger) un menu lorsque la souris se trouve sur le bord de l'écran et masquer (supprimer) lorsque la souris s'éloigne du bord de l'écran écran. J'essaye de réaliser ce qui est vu dans cette vidéo https://www.youtube.com/watch?v=5GsdaZWDcdY (avancer 6 minutes).JavaFX Afficher le menu lorsque la souris arrive au bord de l'écran

Fonctionne correctement lorsque l'écran Welcome.fxml n'a aucun enfant positionné sur le bord de l'écran. Cependant, lorsque la souris passe sur l'un des nœuds enfants, il arrête de lire les coordonnées X, Y sur le StackPane (base). Je ne peux pas utiliser la souris transparente car certains des nœuds enfants sont des boutons qui doivent utiliser des événements de souris.

Appréciez toutes les suggestions ou ressources pour référence qui peuvent m'aider à réaliser ceci. Merci.


public class principal étend l'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); 
      } 
     } 
    }); 
} 

Répondre

1

Avez-vous essayé un filtre d'événement?

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

Le filtre d'événement doit être le premier à recevoir les événements.