# Toplevel-Fenster ermitteln



## Niki (9. Jul 2004)

Gibt es irgendeine statische Methode, mit der ganz einfach das Top-level Fenster/Dialog einer Applikation ermitteln kann. Vom Window gibts zwar ein Window[] getOwnedWindows() aber die Methode hilft auch nicht wesentlich weiter.


----------



## L-ectron-X (9. Jul 2004)

Ich kenne keine, was nicht heißt, dass es nicht vielleicht doch eine gibt. Aber Du kannst zur Ermittlung des des Parent-Fensters den Child-Fenstern bei deren Erzeugung jeweils eine Instanz des Parent-Fensters übergeben.


----------



## Roar (9. Jul 2004)

entweder JFrame.getFrames() oder SwingUtilities.windowForComponent();


----------



## Isaac (9. Jul 2004)

Lass mich raten, du hast eine Komponente die in einem Frame liegt und du willst mit dem Frame komunizieren aber weist nicht wie?

Naja vieleicht liege ich auch falsch.


----------



## Niki (12. Jul 2004)

Das Problem ist, dass ich mein Programm in ein bestehendes Framework einbetten muss, daher den bereits existierenden Code nicht beeinflussen. Daher kann ich auch das parent fenster nicht übergeben: ich schildere das problem genauer:

ich hab einen messagelistener, der an einem port lauscht, ob was rein kommt, wenn ja, will ich eine messagebox aufmachen, die natürlich das neue top-level fenster sein soll, bis jetzt hat sie den parent null, dadurch gibts aber ein thread problem, und der user kann nur mit dem x das fenster schliessen, nicht jedoch mit ok, weil der button überhaupt nicht reagiert. für die messagebox verwende ich eine normale JOptionPane.showmessage.... (Vielleicht ist das problem eh bekannt). ich möchte jedoch der messagebox das aktuelle top-level fenster als parent übergeben, und das ist nirgendwo registriert, weil das wie gesagt ein bestehendes framework ist, das von einer anderen firma geschrieben wird....

bitte um hilfe


----------



## Guest (12. Jul 2004)

```
public static Frame getFrame(Component component) {

    Component c = component;
    while(c!=null)
    {
      if(c instanceof JPopupMenu)
        c = ((JPopupMenu)c).getInvoker();
      if(c instanceof Frame)
        return (Frame)c;
      c = c.getParent();
    }
    return null;
  }
```
Vielleicht hilft es Dir weiter.  :wink:


----------



## Niki (13. Jul 2004)

Ich glaub du hast mich falsch verstanden, ich möchte das gerade aktive Fenster haben, nicht das parent Fenster


----------



## L-ectron-X (13. Jul 2004)

Die Methode isFocused() gibt einen Wahrheitswert zurück. Mit ihr kann man fest stellen, ob eine von Window abgeleitete Component gerade den Focus hat. Vielleicht kannst Du ja damit etwas anfangen?
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Window.html#isFocused()


----------



## Niki (13. Jul 2004)

klingt viel versprechend, mal ausprobieren, ich sag dann bescheid, obs klappt


----------



## Guest (13. Jul 2004)

Wenn's so ist 
Über KeyboardFocusManager kann man das Fenster mit Focus ermitteln.


----------



## Niki (14. Jul 2004)

werds über den keybordfocusmanager machen, da isFocused() erst unter 1.4 geht, und die applikation daweil noch unter 1.3.1 läuft

danke für die tipps, habt mir wesentlich weiter geholfen


----------



## Niki (14. Jul 2004)

KeyboardFocusManager geht ja auch erst unter 1.4

ich brauch eine lösung, die bereits unter 1.3 geht :-(


----------



## L-ectron-X (14. Jul 2004)

Dann probiere mal etwas mit hasFocus() aus Component zu basteln.
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#hasFocus()
Diese Methode gibts schon seit 1.2.


----------



## Niki (15. Jul 2004)

soda, habs aufgegeben, bei 1.3 geb ich weiterhin null als aktives fenster zurück wenns unter 1.4 gestartet wird, ruf ich (über reflection) KeyboardFocusManager.getDefaultKeyboardFocusManager().getActiveWindow() auf, das funktioniert prächtig, aber wie gesagt nur unter 1.4


----------

