Behandeln Sie Mausereignisse überall mit JavaFX
Habe ich eine JavaFX-Anwendung, und ich möchte dem hinzufügen einer Ereignisprozedur für ein Mausklick an einer beliebigen Stelle in der Szene. Der folgende Ansatz funktioniert ok, aber nicht ganz, wie ich will. Hier ist ein Beispiel, um das problem zu veranschaulichen:
public void start(Stage primaryStage) {
root = new AnchorPane();
scene = new Scene(root,500,200);
scene.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("mouse click detected! "+event.getSource());
}
});
Button button = new Button("click here");
root.getChildren().add(button);
primaryStage.setScene(scene);
primaryStage.show();
}
Wenn ich Sie irgendwo in einem leeren Raum, der EventHandler
ruft die handle()
Methode, aber wenn ich auf die button
die handle()
Methode wird nicht aufgerufen. Es gibt viele Schaltflächen und andere interaktive Elemente in meine Anwendung, also brauche ich einen Ansatz zu fangen Klicks auf diese Elemente als auch die zimmerreserviereung, ohne das Sie manuell fügen Sie einen neuen handler für jedes einzelne element.
InformationsquelleAutor der Frage Sam De Meyer | 2013-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie fügen Sie einen Ereignis-filter, um die Szene mit addEventFilter(). Diese werden aufgerufen, bevor das Ereignis konsumiert wird von allen untergeordneten Steuerelementen. Hier ist, was der code für den event-filter aussieht.
InformationsquelleAutor der Antwort Brian Blonski