Announcement

Collapse
No announcement yet.

JDesktopPane und JInternalFrames

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JDesktopPane und JInternalFrames

    Hallo,<br><br>
    ich habe eine MDI Anwendung programmiert, indem ich innerhalb eines JDesktopPane mehrere JInternalFrames erstelle. Mein JDesktopPane hat eine Menüleiste, welche einen Menüpunkt Logout besitzt. Bei Klick auf diesen Menüpunkt sollen sich alle derzeit geöffneten JInternalFrames schließen. Wie geht das? Wie kann ich abfragen wieviele und welche JInternalFrames zur Zeit geöffnet sind?<br><br>
    Vielen Dank im voraus<br>
    Christian Lovis

  • #2
    Lieber Christian wir versuchen gerade ein ähnliches Programm zu schreiben und es würde uns wohl mächtig weiterhelfen wenn du uns verraten kannst wie wir unterhalb einer Menüleiste unterschiedliche Frames aufrufen können.
    Möglicherweise kannst du uns einen passagenweisen Ausdruck deines Progs senden.
    Wenn alles gut geht(unser Projektb nmuß in6 Wochen fertig sein)
    bekommst du spätestens dann unsere Lösung zum schliessen der Fenster.
    Vielleicht klappt auch : Eigenschaften
    public JinternalFrame(
    string title,
    boolean resizeable
    boolean closeable,
    boolean maximizable
    boolean iconifyable

    also zb public void setCloseable(boolean b)
    dank und hoffentlich treten wir noch in Kontakt,
    Thomas und Marti

    Comment


    • #3
      Hallo Martin,<br>
      ich möchte Euch da mal an 2 Beispielklassen erläutern:<br><br>
      1. Klasse: "Hauptklasse" stellt das Hauptfenster mit der Menüleiste dar<br>
      - wird von JFrame abgeleitet<br>
      - muß neben den JMenu's ein JDesktopPane beinhalten<br><br>
      2. Klasse: "Kindklasse" stellt das Kindfenster dar<br>
      - wird von JInternalFrame abgeleitet<br>
      - muß ebenfalls ein JDesktopPane enthalten<br>
      - wird aufgerufen, wenn Benutzer im Menu der Hauptklasse auf den entsprechenden Menupunkt klickt. Dafür wird dem Menupunkt ein ActionListener angefügt. Dieser erzeugt ein Objekt der Kindklasse wie folgt: KindKlasse kindKlasse1 = new KindKlasse(jDesktopPane1);<br> Dabei ist jDesktopPane1 eine Instanz des JDesktopPane.<br>
      - im Konstruktor der Kindklasse müssen folgende Punkte aufgenommen werden:<br>
      this.desktop = desktop;<br>
      (desktop ist Instanz von JDesktopPane)
      this.pack();<br>
      this.setVisible(true);<br>
      desktop.add(this);<br>
      this.toFront();<br><br>
      Soweit erstmal meine Informationen. Wenn Du möchtest, kann ich Dir auch eine frühe Version meines Programms zuschicken, dass genau diese Möglichkeiten bietet.<br><br>
      Mein Problem ist aber das folgende: Es kann ja durchaus sein, daß der Benutzer mehrere JInternalFrames gleichzeitig geöffnet hat. Klickt er nun auf den Menüpunkt Logout, sollen alle(!) derzeit eöffneten JInternalFrames geschlossen werden. Dafür muß das Programm ja erstmal wissen, welche denn geöffnet sind. Wie kann ich das abfragen??<br>
      Bis demnächs

      Comment


      • #4
        Hallo Christian,<br>
        ich würde eine Klasse WindowManager empfehlen, bei der sich jeder<br>
        JInternalFrame beim Öffnen (setVisible(true)) registriert und beim<br>
        Schliessen wieder abmeldet. Dieser WindowManager hat dann die <br>
        Buchführung, welche JInternalFrames gerade angemeldet sind. <br>
        Einziges Problem ist, dass bei De/Iconisieren wohl auch setVisible(true/false)<br>
        aufgerufen wird und dann aber KEINE Abmeldung erfolgen darf. Das<br>
        müsste man über einen WindowListener: JInternalFrame.addInternalFrameListener(..)<br> abfangen.
        <p>
        Gruss Klau

        Comment


        • #5
          Hallo Christian,

          mit der Methode getAllFrames() des JDesktopPane bekommst Du ein JInternalFrame[] mit alle InternalFrames, die auf dem Desktop angeordnet sind.<br>Die einzelnen Frames kannst Du dann unsichtbar machen, iconisieren oder auch zerstören(dispose()).<br>
          JDesktopPane hat eine Methode remove(Component comp) für das entnehmen eines InternalFrames bzw. removeAll(), um allen InternalFrames zu zerstören.<BR><BR>Jürge

          Comment


          • #6
            Hallo Christian, vielen Dank für Deinen Tip. Ich möchte gern auf Dein Angebot eingehen uns ein kleines Beispielprogramm zukommen zu lassen.
            Hier meine eMail Adresse: [email protected] .
            Doch ich habe noche ien weiteres Problem:
            Ich möchte aus den Unterframe auf einen globalen Datentopf zugreifen. Doch mit dem bekannt machen des Datentopfes und dem übergeben der einzelnen Infos hapert es noch. Hast du vielleicht eine Lösung?
            Vielen Dank im voraus, Martin

            Comment

            Working...
            X