Lage von Internal Frames

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo!

Wie kann man feststellen, ob ein Internal Frame vor allen anderen Internal Frames liegt (also für den Benutzer sichtbar ist) oder nicht?
 
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JInternalFrame.html#isSelected()
 
Danke für die Antwort, aber, isSelected() bezieht sich doch auf den Focus. Da könnte es doch theoretisch vorkommen, dass ein Fenster zwar vorne liegt, aber keinen Fokus hat. In diesem Fall würde der Test mit isSelected das falsche Ergebnis liefern.
 
Beispiel zu meiner oben angeführten Überlegung:

Ich öffne 2 Internal Frames (Frame A und Frame B) => Frame A liegt hinter Frame B und Frame B hat den Fokus. Klicke ich nun auf das Iconify-Symbol von Frame B => Frame A ist vorne, hat aber keinen Fokus => Test mit isSelected schlägt fehl.

Das Problem konnte man lösen, wenn man, sobald ein Fenster geschlossen wird, den Fokus auf Fenster überträgt, das dann sichtbar wird. Aber dazu müsste man eigentlich wieder das oberste Fenster ermitteln und damit wäre ich wieder beim eigentlichen Problem - oder gib es eine andere Möglichkeit den Fokus auf das Fenster zu übertragen, das dann sichtbar wird?
 
Hallo,

ich kann das von dir beschriebene Verhalten so nicht nachvollziehen. Ich bin kein Swing-Spezialist, deshalb kann ich nur vermuten, aber meiner Meinung nach erfolgt diese Verwaltung durch den DefaultDesktopManager. Ich habe mal mit dem Beispiel-Programm 'Listing3607' aus den Examples des Online-Tutorials 'Handbuch der Java-Programmierung' rumgespielt. Dort bekommt das oberste Fenster automatisch den Focus, wenn das davorliegende Fenster iconified wird.

Vieleicht hilft dir das Beispiel ja weiter:

Code:
/* Listing3607.java */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class DesktopFrame
extends JFrame
{
  private JDesktopPane desk;

  public DesktopFrame()
  {
    super("DesktopFrame");
    this.desk = new JDesktopPane();
    desk.setDesktopManager(new DefaultDesktopManager());
    setContentPane(desk);
    addWindowListener(new WindowClosingAdapter(true));
  }

  public void addChild(JInternalFrame child, int x, int y)
  {
    child.setLocation(x, y);
    child.setSize(200, 150);
    child.setDefaultCloseOperation(
      JInternalFrame.DISPOSE_ON_CLOSE
    );
    desk.add(child);
    child.setVisible(true);
  }
}

class ChildFrame
extends JInternalFrame
{
  public ChildFrame(String title)
  {
    super("Child " + title, true, true);
    setIconifiable(true);
    setMaximizable(true);
    setBackground(Color.lightGray);
  }
}

public class Listing3607
{
  public static void main(String[] args)
  {
    //Desktop erzeugen
    DesktopFrame desktop = new DesktopFrame();
    desktop.setLocation(100, 100);
    desktop.setSize(400, 300);
    desktop.setVisible(true);
    //Zwei ChildFrames hinzufügen
    desktop.addChild(new ChildFrame("1"), 10, 10);
    desktop.addChild(new ChildFrame("2"), 20, 20);
  }
}
 
Hallo!

Ich habe vergessen zu erwähnen, dass ich den DefaultDesktopManager abgeleitet habe 😳.
Da ich eine Art Taskleiste programmiere, wird jedes offene Fenster durch einen Button auf dieser Taskleiste repräsentiert. Klickt man auf das Iconify - Symbol mache ich das Fenster einfach unsichtbar. Deswegen brauche ich auch eine Möglichkeit nach dem Iconify -Vorgang das neue oberste Fenster zu bestimmen, um diesem dann den Fokus zu geben.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben