JavaFX: Textfeld programmgesteuert fokussieren

8

Ich habe eine Anwendung mit JavaFX geschrieben, die nur mit den Pfeiltasten der Tastatur verwendbar ist. Also habe ich MouseEvent auf Scenes Bühne verhindert und ich höre KeyEvents zu. Ich habe auch die Fokussierbarkeit aller Knoten ausgeschaltet:

%Vor%

Jetzt habe ich einige Textfelder, Kontrollkästchen und Schaltflächen. Ich möchte den Zustand meiner Eingabesteuerelemente (Textfeld, Checkbox, ..) programmatisch ändern: zB möchte ich das Textfeld eingeben, um den Inhalt programmatisch zu bearbeiten. Meine Frage ist also: Wie gehe ich in ein nicht fokussierbares Textfeld ein? Weil textfield.requestFocus (); funktioniert nicht mehr, da ich false auf die fokustragbare Eigenschaft meines Textfelds setze.

Danke

    
PacDroid 18.11.2013, 13:50
quelle

2 Antworten

34

Nach

%Vor%

Der Knoten wird nicht fokusverfahrbar anstatt nicht fokussierbar gemacht. Es kann zum Beispiel immer noch mit der Maus oder programmgesteuert fokussiert werden. Da Sie Mausereignisse verhindert haben, hier die andere Option:

%Vor%

EDIT: wie Kommentar,
Das Javadoc von requestFocus besagt:

  

... Um berechtigt zu sein, den Fokus zu erhalten, muss der Knoten Teil einer Szene sein,   es und alle seine Vorfahren müssen sichtbar sein, und es muss nicht sein   behindert. ...

Diese Methode sollte also nach dem Aufbau des Szenengraphen wie folgt aufgerufen werden:

%Vor%

Platform.runLater im obigen Beispiel wird jedoch am Ende nach der Hauptmethode start() ausgeführt, was sicherstellt, dass der Aufruf von requestFocus nach der Szenendarstellung erfolgt.

Je nach requestFocus-Implementierungscode gibt es möglicherweise andere Gründe.

    
Uluk Biy 18.11.2013, 14:23
quelle
1

setze die .requestFocus (); auf Initialize-Methode auf .fxml Datei laden Controller

ausgelöst werden %Vor%     
Ravinath 07.12.2015 11:23
quelle

Tags und Links