# JTree Problem mit Focus bzw. Selection



## abes140377 (11. Jun 2004)

Hallo Forum,
bei meiner Arbeit mit einem JTree bin ich auf folgendes Problem gestoßen.
Ich habe einen "HauptFrame" (ExternalFrame) mit einem Tree.
Innerhalb des Trees kann ich mit den Cursortasten navigieren
Nach einem Doppelklick auf ein Blatt des Trees wird ein Fenster(InternalFrame) geöffnet in dem die Daten des UserObjects des Blattes angezeigt werden. So weit so gut...
Wird der InternalFrame geschlossen ist das Blatt des Trees weiterhin selektiert jedoch die Navigation mit denPfeiltasten funktioniert erst wieder nach dem ich das Blatt erneut mit der Maus selektiert habe.
Ich habe es mit einem Event versucht der im HauptFrame das schließen des InternalFrames behandelt und rufe dort setSelectionPath(tTreePath) auf den Jtree auf, jedoch ohne Erfolg.
Was mir aufgefallen ist, wenn ich das Blatt mit der Maus selektiere bekommt es zu dem blaue Hintergrund zusätzlich einen gelben Rand. Dieser fehlt wenn ich die Selektion mit setSelectionPath(...) setze.
Weis jemand was ich dafalsch mache?
Wäre nett wenn mir jemand helfen könnte.

Besten Dank

Gruß Sebastian[/code]


----------



## Xenophon (11. Jun 2004)

Das dürfte daran liegen, das der JTree bei der Selektion mit der Maus auch den Fokus bekommt.  Versuch mal, wenn sich Dein Fenster geöffnet hat, mit den Pfeiltasten zu navigieren. Sollte nicht funktionieren, wenn Dein InternalFrame den Fokus besitzt.


----------



## abes140377 (11. Jun 2004)

Da hast du natürlich recht, wenn ich die Node des Trees zum Anzeigen im InternalFrame öffne verliere ich den Fokus im JTree. Das habe ich sogar explizit gesetzt. Nach dem öffnen des InternalFrame bekommt das erste Eingabefeld des InternalFrame den Fokus. 
Das eigentlich verwirrende ist nur, wenn ich den InternalFrame schließe das o.g. Ereignis ausgelöst wird und ich in der Ereignisbehandlung folgendes implementiere

```
...
if (selektierterNode != null) {
    TreeNode[] tPath = ((DefaultTreeModel)treeFlaechen.getModel()).getPathToRoot(selektierterNode);
    TreePath tTreePath = new TreePath(tPath);
    treeFlaechen.requestFocus();
    treeFlaechen.setSelectionPath(tTreePath);
}
...
```
dann kann ich zwar jeden x-beliebigen Node des Trees selektieren aber die Navi geht halt nicht.
D.h. die Selektion der Nodes ist nicht das Problem scheinbar landet aber mein Fokus überall außer auf dem JTree.
Ich denke das ist auch die Erklärung warum die Navi mit den Pfeiltasten nicht geht.
Es scheint auch keinen Unterschied zu machen ob ich das setzten des Fokus auf den Jtree vor oder nach dem Setzten des selektierten Node mache.

Ganz schöner sch...

Noch ne Idee???

Bis dann Sebastian
[/code]


----------



## Xenophon (11. Jun 2004)

Schau doch mal, ob der Tree nach Deiner Eventbehandlung den Fokus hat (isFocusOwner()).


----------



## abes140377 (11. Jun 2004)

Gute Idee, und prompt:
Der Tree hat den Focus nicht.
Dann ist die Sache auch klar, bin ständig davon ausgegangen dann nicht der Aufruf von tree.requestFocus() scheitert sondern irgend etwas bei der Selektion der Nodes schief geht.
Jetzt ist nur die Frage was funktioniert beim setzten des Fokus nicht. Hab zwischenzeitlich versucht einer anderen Komponente die sich auf der Panel befindet den Fokus zu geben. Geht auch nicht.
D.h. Problem ist wohl erkannt, gelöst jedoch noch nicht.
Kann sich das jemand erklären? Aus meiner Erfahrung heraus hatte ich noch nie Probleme mit dem vergeben des focus an irgendwelche Components.
Auch RTFM in der API weist auf keine Besonderheiten mit xyzJComponent.requestFocus() hin.

Noch so ne bringer-idee xenophon?

Thanx

Sebastian


----------



## Xenophon (12. Jun 2004)

Versuch mal "requestFocusInWindow()" und nicht "requestFocus()".


----------

