Swing geöffnete Frames in einer List speichern******

sos

Mitglied
Hallo liebe leute,

sollte eigentlich eine simple Sache sein doch mir fehlen trotzdem die Kenntnisse dafür und zwar habe ich diese kleine App programmiert :
Java:
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;


public class Test extends JFrame{
	
	private Action actSchliessen;
	private WindowEvent we = null;

   public Test(){
	   super("HauptFenster");
	   
	   JMenuBar mb = new JMenuBar();
	   this.setJMenuBar(mb);
	   
		JMenu datei = new JMenu("datei");
		
		defineActionSchliessen();
		datei.add(actSchliessen);
		mb.add(datei);
		
		
		Frame f = new Frame("Erstes Frame");
		f.setSize(300,300);
		
		f.setVisible(true);
		Frame f2 = new Frame("2. Frame");
		f2.setSize(150,150);
		f2.setVisible(true);
	    
		
	   
   }
   
  public void defineActionSchliessen(){
	
//bitte keine vorwürfe wegen dieses Teils, das sind nämlich rein testzweck :) 
  
	  actSchliessen = new AbstractAction("alle Fenster schließen"){
		  public void actionPerformed(ActionEvent e){
			  Test t = new Test();
			 Window w =  t.we.getWindow();
			 int i = w.countComponents();
			 for(i=0;;i++)
				 w.dispose();
			
		  }
	  };

	  
   } 
	
	
	public static void main(String[] args) {
		Test t = new Test();
		t.setSize(300,300);
		t.setVisible(true);
		t.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent we){
				System.exit(0);
			}
		});
		
		
		
		
	}

}

Hauptfenster verfügt über ein Menu und Action schliessen, diese soll bei einwahl alle erzeugten frames (in diesem fall f und f2 schliessen).

bin für jeden tipp dankbar :)
 
Zuletzt bearbeitet von einem Moderator:
Hi,

also dein Ansatz kann schon deswegen gar nicht funktionieren, da du immer auf das gleiche Window-Objekt zugreifst.
Java:
             Window w =  t.we.getWindow();
             int i = w.countComponents();
             for(i=0;;i++)
                 w.dispose();

Ich würde es folgendermaßen machen:
Java:
      actSchliessen = new AbstractAction("alle Fenster schließen"){
          public void actionPerformed(ActionEvent e){
              Frame[] allFrames = getFrames();
              for(int i = 0; i < allFrames.length; i++) {
                allFrames[i].dispose();
              }
          }
      };

Ich habe den Code aber nicht getestet, deshalb kann ich auch nicht garantieren, dass er funktionieren wird.

Gruß

Fabio
 
  • Gefällt mir
Reaktionen: sos
danke Fabio, es schliessen sich dadurch tatsächlich alle Frames....aber Das HauptFrame sollte sich nicht
mitschließen.
irgend eine Idee ?
 
HAHA Problem gelöst...
einfach ab i = 1 iterieren dann wird das Hauptframe nicht mitgezählt..
super vielen dank nochmal :)
 
Zurück