Ich habe ein paar TextField
s in meinem Frame
. Ich möchte wissen, welche TextField
derzeit den Fokus hat. Wie kann ich diese Informationen finden?Wie finde ich heraus, welches Objekt gerade Fokus hat?
Antwort
JFrame.getFocusOwner()
(geerbt von Window.getFocusOwner()
) sollte einen Verweis auf die Komponente mit Fokus zurückgeben. getMostRecentFocusOwner()
könnte auch von Interesse sein.
This Tutorial sollte ziemlich hilfreich sein, um den Fokus zu verstehen.
Jede JComponent verfügt über eine hasFocus-Methode, mit der Sie überprüfen können, ob der Fokus vorhanden ist. Dies wurde jedoch geändert, und jetzt sollten Sie isFocusOwner verwenden.
So über alle Textfelder in Ihrem Rahmen laufen, und überprüfen Sie jedes von ihnen, wenn es IsFocusOwner ist, indem Sie diese Methode aufrufen.
Sie könnten auch den Fokus Besitzer durch den Rahmen erhalten.
getFocusOwner() die untergeordnete Komponente zurück, die derzeit fokussiert.
Aber Sie müssen überprüfen, ob es ein JTextField ist. Andere Komponenten wie Schaltflächen können fokussiert werden, wenn sie auch in Ihrem Rahmen vorhanden sind.
haben auch einen Blick auf die javax.swing.FocusManager
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
Viel besser als die angenommene Antwort, IMHO, da ich dies von einer statischen Klasse tun kann, die keinen Zugriff auf das Fenster habe, das ich tatsächlich verwende, und ich muss nicht alle Fenster durchlaufen. –
KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()
;
arbeiten nicht über Threads. Wenn deine App also einen neuen Thread aufruft und dieser Thread sein eigenes Frame/Fenster usw. hat, wird es nicht möglich sein, den Fokus-Besitzer von diesem Thread zu erhalten. Verwenden Sie stattdessen: KeyboardFocusManager.getCurrentKeyboardFocusManager().getGlobalFocusOwner();
okay, das Lesen der api doc hilft (mich :-) zu verstehen, was du vielleicht meinst. Es gibt das _Returns der Fokusbesitzer zurück, wenn sich der aufrufende Thread in einem anderen Kontext als dem Fokus owner_ befindet - es ist jedoch in Anwendungscode nicht verwendbar, da sein Bereich geschützt ist. Es wird nur intern verwendet ... – kleopatra
Swing ist eine single-threaded-Umgebung, alle UI-Interaktionen MÜSSEN aus dem Kontext des Event Dispatching-Thread heraus geschehen, es ist unmöglich, zwei Fenster innerhalb derselben JVM in verschiedenen Threads zu haben, das ist nicht wie API funktioniert – MadProgrammer
- 1. Wie finde ich heraus, welches Steuerelement den Fokus in .NET Windows Forms hat?
- 2. Wie finde ich heraus, welches Javascript ausgelöst wird?
- 3. Wie finde ich heraus, ob ein Steuerelement gerade ungültig ist?
- 4. Wie finde ich heraus, welches Pip-Paket eine Datei besitzt?
- 5. Wie finde ich heraus, welches Paket/Verfahren eine Tabelle aktualisiert?
- 6. In Emacs, wie finde ich heraus, welches Paket lädt Tramp?
- 7. Wie finde ich heraus, welches Plugin die gewünschte Klasse enthält?
- 8. Wie finde ich heraus, wer eine Methode aufgerufen hat?
- 9. Wie finde ich heraus, ob etwas in einem bestimmten div Fokus hat?
- 10. Wie finde ich heraus, was UITextField eine UIKeyboardWillShowNotification verursacht hat?
- 11. Wie finde ich heraus, ob ein Objekt gesperrt ist? C#
- 12. Wie finde ich heraus, welcher Edelstein eine bestimmte Abhängigkeit hat?
- 13. Wie finde ich heraus, welche Gruppe ein bestimmter Benutzer hat?
- 14. Wie finde ich heraus, wer einen CloudFormation-Stack erstellt hat?
- 15. Wie finde ich heraus, wer eine Garnanwendung getötet hat?
- 16. Wie finde ich heraus, wer SendMessage angerufen hat?
- 17. Wie finde ich heraus, wo der Fokus in meiner WPF-Anwendung liegt?
- 18. Wie finde ich heraus, welche Nachrichten ein Objekt versteht?
- 19. Finde heraus, ob eine Funktion hat
- 20. Wie finde ich heraus, welches VIM-Plugin schuld ist, um meine CPU zu überlasten?
- 21. Wie finde ich heraus, welches PHP-Bibliothekmodul für eine Funktion benötigt wird?
- 22. Nun, da ich weiß, wo der Fokus liegt, wie finde ich heraus, warum es dort hingeht?
- 23. Wie finde ich heraus, was einen Laufzeitfehler in Erlang verursacht hat?
- 24. Wie finde ich heraus, worauf mach_msg_trap wartet?
- 25. Wie finde ich heraus, wo NUnit hängt?
- 26. Wie finde ich meinen ISP heraus?
- 27. Wie finde ich heraus, was svchost macht?
- 28. Wie finde ich den aktuellen Überlaufprüfkontext heraus?
- 29. Wie ermitteln, welches Steuerelement in Formular Fokus hat?
- 30. Wie finde ich heraus, welches RPM-Paket eine Datei enthält, nach der ich suche?
Scheint wirklich ineffizient. Sie können einfach KeyboardFocusManager.getCurrentKeyboardFocusManager() aufrufen. GetFocusOwner(); –