Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat

123456789

Aktives Mitglied
Ich habe im unteren Teil des JFrames einen Statusbereich, welcher eine JTabbedPane beinhaltet. Der Action Tab is dazu da, aktuelle Informationen anzuzeigen, wie z.B. das "Apply changes" JPanel.
Dieses JPanel wird automatisch angezeigt, sobald der Speichern Button gedrückt wird.
Mein Wunsch ist es, dass dieses JPanel wieder entfernt wird, soblad der Fokus von allen Childs des Action Tabs verloren geht. (Das ist der Fall, wenn der User z.B in den Haupt,- oder Navigationsbereich klickt.)

Aufbau des StatusPanels:

- JTabbedPane
- JPanel​
- JTextField​
- JPanel​
- 2* JRadioButton​
- 2* JButton​
- JTextField​


Sobald alle der oben aufgelisteten Components den Fokus verlieren, so soll das "Apply changes" panel aus der JTabbedPane entfernt werden.

Ich suche nach einer Lösung wie z.B.:
JTappedPane.hasPaneOrAnyChildFocus();

Vielen Dank! LG
 
An den [c]KeyboardFocusManager.getCurrentKeyboardFocusManager()[/c] können wir einen PropertyChangeListener hinzufügen, um den aktuellen "focusOwner" herauszufinden. Siehe How to Use the Focus Subsystem .

Mit [c]SwingUtilities.isDescendingFrom(Component a, Component b)[/c] können wir dann feststellen, ob der "focusOwner" ein Subelement des "Apply changes" Panels ist.

Gruß,
André
 
Vieleicht nicht der eleganteste Weg, aber klappen würde es so:

1. im JTabbedPane FocusListener implementieren
2. allen Kindern und dem JTabbedPane an sich das JTabbedPane als Focuslistener hinzufügen
3. in JTabbedPane eine Methode erstellen private boolean isChildOrThis(JComponent c). Diese Methode schaut ob das übergebene JComponent das JTabbedPane oder ein Sub-JComponent ist.
3. in der Methode focusLost() mit der Methode aus Schritt 3 erfragen ob getOppositeComponent() nicht im Tab liegt -> Ausblenden 🙂

MFG Melfis

[EDIT]Mist, zu langsam und relativ Primitiv im gegensatz zu Andrés Methode[/EDIT]
 
Zuletzt bearbeitet:

Zurück
Oben