Feuer-Taste den onAction-mit Enter in JavaFX
Ich bin ein Neuling auf JavaFx. In meinem JavaFX-Anwendung, die ich gesetzt habe, onAction-Eigenschaft, und es funktioniert, wenn ich die Taste drücken, mit der Maus. Ich will Feuer das gleiche, auch wenn der Benutzer die EINGABETASTE drücken der auf-Taste. Ich weiß, ich kann mit einer selbst-handler zu tun.
Aber wenn ich lese das onAction-JavaDoc heißt es, dass dieses Ereignis bekommen, Feuer, indem Sie eine Taste drücken.
Beschreibung der Immobilie:
Aktion der Schaltfläche, die wird aufgerufen, wenn
die Taste ausgelöst wird. Dies kann durch den Benutzer klicken Sie auf die
Schaltfläche mit der Maus oder einem touch-Ereignis, oder durch drücken einer Taste, oder wenn
der Entwickler programmatisch ruft das Feuer () - Methode.
Aber wenn ich die Enter-Taste drücken, geschieht nichts. Ist es Fehler in der Dokumentation? Gibt es irgendeine andere Möglichkeit das zu erreichen ohne das hinzufügen alistener auf den button?
P. S
Nachdem die Kommentare, die ich überprüft, mit der space-Taste, dann wird er gefeuert. Aber ich möchte zu setzen, um die Enter-Taste.
Ich habe viele Knöpfe. Ich habe versucht button.setDefaultButton(true);
aber es ist nicht gefeuert. Ich denke, das ist becacuse es gibt mehr als einen Knopf. Wenn ich es nur auf einen einzigen button funktioniert es einwandfrei. Wie Sie festlegen, dass mehrere Tasten?
- Hat der button den Fokus hat, wenn Sie die Taste drücken? Auf Windows 7, das action-Ereignis wird nur gefeuert, wenn ich drücken Sie die space-Taste.
- ja. Ich setzt den Fokus auf die Taste vor dem drücken der Taste
- Ist der handler wird aufgerufen, wenn Sie drücken Sie die Leertaste anstelle der EINGABETASTE?
- Siehe - Taste.defaultButtonProperty()
- Auch "Taste drücken" in docs können sich auf die
mnemonicParsingProperty
. - Ja, Es arbeitete für space-Taste. wie kann ich das geändert, zu Betreten,
- Ich habe eine Idee, die Sie sollten, um zu testen. btn.defaultButtonProperty().bind(btn.focusedProperty())
- Schön verbindlich. Sollte dies funktionieren !
- Vielen Dank. Es hat geklappt :D. Wenn Ihr das als Antwort werde ich es akzeptieren 🙂
- Nur einen moment :~)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dynamisch ändern die Standard-Schaltfläche der Eigenschaft des aktuell fokussierten Schaltfläche mit Bindung
Wenn Sie sich bewerben möchten dieses auf alle Button in Ihrem Programm können Sie eine Unterklasse der JavaFX-Button und binden diese in den Konstruktor. In deinem fxml-Datei, die Sie benötigen, um Ihre benutzerdefinierte Schaltfläche.
Schrieb ich das folgende: Unterklasse:
Um diesen Code zu verwenden, müssen Sie Ihre benutzerdefinierte Klasse in der fxml-Datei:
Wenn Sie möchten, verwenden Sie den Scene Builder die Dinge ein wenig schwieriger: Sie müssen exportieren Sie Ihre benutzerdefinierte Schaltfläche in einer jar-Datei und fügen Sie diese an Szene-generator wie beschrieben hier
Warum muss ich immer Antworten drei Jahre alte Fragen...?! 😉 Wie auch immer, könnte jemand es nützlich finden (mich eingeschlossen).
Überschreiben Sie die Enter-Taste drücken Verhalten ich nutze die Funktion unten ruft es in der Szene-Taste drücken-Ereignis-filter:
Basierend auf dem Ereignis ist target die Funktion arbeitet wie folgt. Für eine TextArea oder TableView, es ist ein NoOp. Für eine Schaltfläche, es verbraucht die Enter-Presse-event und feuert Space-Taste drücken und loslassen-Ereignisse. Und für alle anderen Steuerelemente, es verbraucht auch die Enter-Presse-event und feuert eine Registerkarte Ereignis und drücken Sie die EINGABETASTE bewegt den Fokus zum nächsten Steuerelement wird wie Tab.
Dann müssen Sie nur registrieren Sie einen Ereignis-filter für die ganze Szene:
Und der event filter sieht wie folgt aus:
----- edit, weil ich vergaß, Sie zu zählen die isAncestorNodeTargeted () - Funktion; vielen Dank für den Kommentar, Robert -----