# Fenster nicht mehrmals öffnen?



## Ocean-Driver (16. Dez 2007)

Hallo,


Ich habe ein Event was ein neues Fenster öffnet (Es wird erst durch den Listener initialisiert).
Nun würde ich gerne verhindern, dass das Fenster mehrmals geöffnet wird. Diesbezügl hab ich mir einfach überlegt das fenster zu anfang auf null zu setzen und es  beim starten dann zu initialisieren.  Und beim schließen wieder auf Null setzen. Nur, ich denke mir - da gibts doch bestimmte eine bessere Lösung,oder?


Ich habe einmal das Objekt

```
public static Bruch_liste_gui bruchliste;
```


Dann habe ich den Listener

```
ActionListener open_gui_bruchliste = new ActionListener() 
		{ 
		  public void actionPerformed( ActionEvent e ) 
		  { 
			  		if(bruchliste == null)
			  			bruchliste = new Bruch_liste_gui("Bruchliste", size_x, size_y);
			  		if(bruchliste  == null){
			  			System.out.println("Bruchliste ist noch null!");
			  		}
			  
		  } 
		};
```


Und das Objekt setze ich einfach null von dem anderen Objekt aus.. (deswegen Static) - nur ich kann doch bestimmt irgendwie prüfen ob ein Fenster geöffnet ist?

Und wie realisiert ihr das öffnen von fenstern?Genauso?Oder wie ist dort die übliche Methode?


Danke schonmal


mfg
ocean-driver


----------



## L-ectron-X (16. Dez 2007)

Sowas geht mit einem modalen Dialog.


----------



## Ocean-Driver (16. Dez 2007)

Hi,

Ist es auch programmier-technisch i.O wenn ich das Fenster in main einfach wieder auf null setze und die default-operation auf DISPOSE_ON_CLOSE setzen?


Hier mal mein Main:


```
package bruch_verwaltung;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class Main_Fenster extends JFrame {
	
	private Container c;
	private JPanel north, center;
	private JLabel title;
	private JButton brueche_add, brueche_rechnen, copyright;
	public static Bruch_liste_gui bruchliste;

	public Main_Fenster(String fenster_title, final int size_x, final int size_y){
		
		c = getContentPane();
		
		this.setTitle(fenster_title);
		this.setSize(size_x, size_y);
		this.setVisible(true);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		title = new JLabel(fenster_title);
		
		brueche_add = new JButton("Bruchliste"); 
		brueche_rechnen = new JButton("Mit den brüchen rechnen");
		copyright = new JButton("Copyright anzeigen");
		
		ActionListener open_gui_bruchliste = new ActionListener() 
		{ 
		  public void actionPerformed( ActionEvent e ) 
		  { 		
			  		if (bruchliste == null)
			  			bruchliste = new Bruch_liste_gui("Bruchliste", size_x, size_y);
			  		else
			  			bruchliste.toFront();
			  		
			  
		  } 
		};
		
		brueche_add.addActionListener(open_gui_bruchliste);
		
		
		north = new JPanel();
		center = new JPanel();
		north.add(title);
		
		center.add(brueche_add);
		center.add(brueche_rechnen);
		center.add(copyright);
		
		c.add(center, BorderLayout.CENTER);
		c.add(north, BorderLayout.NORTH);
		
		
	}




}
```


Mein zu öffnendes Fenster:


```
package bruch_verwaltung;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.*;

public class Bruch_liste_gui extends JFrame{
	
	private Container c;
	private JLabel seitentitle;
	private JPanel north = new JPanel();
	private JPanel center = new JPanel();
	
	private JTable brueche;
	
	public class ClosingListener extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
				Main_Fenster.bruchliste = null;
								
		}
	}
	
	public Bruch_liste_gui(String title, int size_x, int size_y){
		
		c = getContentPane();
		

		this.setTitle(title);
		this.setSize(size_x, size_y);
		this.setVisible(true);	
		this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
		
		addWindowListener(new ClosingListener());
		
		seitentitle = new JLabel(title);
		
		north.add(seitentitle);
		
		c.add(north, BorderLayout.NORTH);
		
		
	}

	

}
```


Und was kann ich dagegen tuen, dass beim starten von meinem Fenster keine Ihnhalte vorhanden sind?Erst nachdem ich das Fenster nochmal ein bisschen verzogen habe?

danke shconmal


gruß oceandriver


----------



## dirty-mg (17. Dez 2007)

Probier`s mal mit nem Singleton ...

mfg
Marcus


----------



## Ocean-Driver (17. Dez 2007)

was hab ich unter nem singleton zu verstehen?


----------



## mikachu (17. Dez 2007)

en.wikipedia.org/wiki/Singleton_pattern#Java


----------



## L-ectron-X (17. Dez 2007)

Ocean-Driver hat gesagt.:
			
		

> Und was kann ich dagegen tuen, dass beim starten von meinem Fenster keine Ihnhalte vorhanden sind?Erst nachdem ich das Fenster nochmal ein bisschen verzogen habe?


Setze das _setVisible(true);_ in die letzte Zeile deines Konstruktors.

Und zum Rest: Soll dieses geöffnete Fenster den Rest der Anwendung so lange blockieren, bis die Eingaben abgeschlossen sind, oder warum darf sich nur eine Instanz davon öffnen?


----------



## Ocean-Driver (18. Dez 2007)

Weil es keinen Sinn macht, zwei zu öffnen.


----------

