# jframe setVisible(false) wieder sichtbar machen?



## Paul279 (25. Okt 2012)

Hallo Community,

ich sitze noch immer an meinem Projekt (ich lerne und lerne :rtfm: ), doch jetzt hab ich wieder etwas, das für euch sicher eine Kleinigkeit ist:

Ich habe zwei Klassen(Client und ClientHauptform). Der Client erzeugt irgendwann das ClientHauptform und setzt sich selber auf visible(false).  

Client code:

```
new ClientHauptform(jurorID, oos).setVisible(true);
this.setVisible(false);
```

So, funktioniert tadellos, aber nun möchte ich gerne den ClientHauptform wieder verstecken und bei Client weitermachen. Wie mache ich den Client wieder sichtbar?

Ich kann zwar schreiben:

```
this.setVisible(false);
new Client().setVisible(true);
```
aber dann erzeugt er mir einen neuen Client, ich möchte aber gerne den alten nur wieder sichtbar machen, da dort schon einige Werte eingegeben wurden.

Ich kann auch keine static Funktion beim Client schreiben, denn da kann ich this.setVisible(true); nicht ausführen, da er mir schreibt, dass ich von einem statischen Kontext nicht auf einen non-static Kontext zugreifen kann, also fällt diese Möglichkeit schon mal weg.

Könnte mich bitte jemand aufklären.
Ich danke schon jetzt


----------



## PrincE (25. Okt 2012)

Ich denke mit ein bisschen mehr Code, würde dir ganz einfach geholfen werden können.

Denn wenn man dir jetzt erklärt, dass du da wahrscheinlich ein riesiges Architektur Problem hast, würde dir das kaum weiter helfen.


----------



## Paul279 (25. Okt 2012)

Okay, denke aber das ich das wichtigste schon reingepackt habe.

Hier mein Projectaufbau:





Hier sind die zwei JavaKlassen Client und Clienthaupform zu sehen.

Im Client gibt es den Code, der ausgeführt wird, wenn man auf einen Button klickt:

```
private void jButton_MeisterschaftStartenActionPerformed(java.awt.event.ActionEvent evt) {                                                             
        
        //1 = OK, 0 = Fehler
        if(this.jLabel_versteckt_CSV_Ueberpruefung.getText().toString().equals("1") && this.jLabel_portOK_versteckt.getText().toString().equals("1"))
        {
            new Hauptform(meisterschaftLaeuft, meinServerThread).setVisible(true);
            this.setVisible(false);       
        }          
}
```

Dann wird ein neuer ClientHauptform erzeugt, da ist das selbe spielchen:
Dort gibt es einen Button mit dem ich den ClientHauptform visible auf false setzten kann und dort, würde ich jetzt gern den Client wieder anzeigen lassen:

ClientHauptform Code:

```
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        this.setVisible(false);
        new Client().setVisible(true);
    }
```

Ich will nur das eine Fenster verstecken, dann im zweiten Fenster arbeiten, dieses wieder verstecken und das erste Fenster wieder anzeigen.


----------



## PrincE (26. Okt 2012)

hilft dir das weiter?


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Client
{
	private JFrame clientFrame;
	private JButton buttonToClientHauptform;
	private ClientHauptform clientHauptform;

	public Client()
	{
		init();
		addListener();
	}

	private void init()
	{
		clientFrame = new JFrame("Client");
		clientFrame.setBounds(20, 20, 400, 400);
		clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		buttonToClientHauptform = new JButton("zur ClientHauptform");
		clientHauptform = new ClientHauptform();
		
		clientFrame.add(buttonToClientHauptform);
		
		clientFrame.setVisible(true);
	}

	private void addListener()
	{
		buttonToClientHauptform.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				clientHauptform.setVisible(true);
				clientFrame.setVisible(false);
			}
		});
		clientHauptform.setActionButtonBack(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				clientHauptform.setVisible(false);
				clientFrame.setVisible(true);
			}
		});
	}

	public static void main(String[] args)
	{
		new Client();
	}
}
```


```
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class ClientHauptform
{
	private JFrame clientHauptform;
	private JButton buttonBack;

	public ClientHauptform()
	{
		init();
	}

	private void init()
	{
		clientHauptform = new JFrame("ClientHauptform");
		clientHauptform.setBounds(60, 20, 400, 400);
		clientHauptform.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		buttonBack = new JButton("zurück zum Client");
		
		clientHauptform.add(buttonBack);
	}

	public void setVisible(boolean visible)
	{
		clientHauptform.setVisible(visible);
	}

	public void setActionButtonBack(ActionListener actionListener)
	{
		buttonBack.addActionListener(actionListener);
	}
}
```

Du hättest auch die Referenz des Frames an die andere Klasse übergeben können, wovon ich dir aber abrate.


----------



## Paul279 (28. Okt 2012)

Sooo, hat leider etwas länger gedauert, da ich den Code anfänglich nicht verstanden hab. 

Aber jetzt ist es klar und deine Idee ist eigentlich sehr simple. Trotzdem wär ich alleine leider nicht drauf gekommen.

Perfekt. Es funktioniert 

Danke dir, hat mir sehr weitergeholfen :toll:


----------

