Java panel anzeigen

Ich habe hier ein kleines prob… Und zwar habe ich frame, in dieses frame packe ich zwei panel und mache eines sichtbar - klappt auch wunderbar. Nun möchte ich auf ein event hin dieses panel unsichtbar machen und das andere sichtbar - das klappt leider nicht… das zweite panel wird erst sichtbar wenn ich das fenster mit der hand (automatisch verändern klappt auch nicht) größer oder kleiner mache… Woran liegt das?
Hier mal der code…:

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Dialog1 extends Frame implements ActionListener, ItemListener
{
Button bt1;
Button bt3;
TextField Pw1;
TextField Pw2;
Panel panel;
Frame rahmen;
Button bt2;
Checkbox Cbox1;
Checkbox Cbox2;
Panel panel2;

/*****************
* Konstruktor *
****************/
public Dialog1()
{

setTitle(„Login“);
setSize(200, 200);

// Neue Panel erzeugen + panel hinzufuegen und sichtbar machen
panel = new Panel();
panel2 = new Panel();
add(panel);
panel.setVisible(true);

// Layout Manager einrichten
panel.setLayout(new FlowLayout());
panel2.setLayout(new GridLayout(5, 2));

// Buttons und Fields zum Panel hinzufuegen
panel.add(new Label(„Name“));
panel.add(Pw1 = new TextField(„test“, 20));
panel.add(new Label(„Passwort“));
panel.add(Pw2 = new TextField(„test“, 20));
Pw2.setEchoChar(’*’);
panel.add(bt1 = new Button(„Test“));

// Buttons und Fields zum Panel2 hinzufuegen
panel2.add(
new Label(„Ist die Archivierung der Scan-Belege beendet?“));
panel2.add(Cbox1 = new Checkbox());
panel2.add(new Label(„Ist der Interpreter heruntergefahren?“));
panel2.add(Cbox2 = new Checkbox());
panel2.add(bt2 = new Button(„Connect“));
bt2.setVisible(false);

// ActionListener hinzufuegen
bt1.addActionListener(this);
bt2.addActionListener(this);
Cbox1.addItemListener(this);
Cbox2.addItemListener(this);

// WindowListener hinzufuegen
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
}

//Button Event
public void actionPerformed(ActionEvent ae)
{
Object quelle = ae.getSource();

if (quelle == bt1)
{
String a = Pw1.getText();
String b = Pw2.getText();
String c = „test“;
String d = „test“;

if (a.equals© && b.equals(d))
{
// altes panel unsichtbar machen
panel.setVisible(false);
panel.removeAll();;
//größe anpassen und neus panel hinzufügen und sichtbar machen
setSize(280,200);
add(panel2);
panel2.setVisible(true); //??
this.repaint(); //??
panel2.repaint(); //??
}
else
{
bt1.setLabel(„BAD“);
}
panel2.setVisible(true); //??
this.repaint(); //??
panel2.repaint(); //??
}

if (quelle == bt2)
{
bt2.setBackground(Color.red);
bt2.setLabel(„Verarbeite“);
connect();
}
}

//Chkbox Event
public void itemStateChanged(ItemEvent e)
{
if (Cbox1.getState() == true && Cbox2.getState() == true)
{
bt2.setVisible(true);
}
}

public void connect()
{
try
{
Client Cl = new Client();
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}

/****************
* Startpunkt *
***************/
public static void main(String[] args)
{
Frame rahmen = new Dialog1();
rahmen.setVisible(true);
}
}

//Button Event
public void actionPerformed(ActionEvent ae) {
 Object quelle = ae.getSource();

 if (quelle == bt1) {
 String a = Pw1.getText();
 String b = Pw2.getText();
 String c = "test";
 String d = "test";

 if (a.equals(c) && b.equals(d)) {
 // altes panel unsichtbar machen
 panel.setVisible(false);
 panel.removeAll();
 //größe anpassen und neus panel hinzufügen und sichtbar machen
 setSize(280, 200);
 add(panel2);
 validate();
 } else {
 bt1.setLabel("BAD");
 }
 }

 if (quelle == bt2) {
 bt2.setBackground(Color.red);
 bt2.setLabel("Verarbeite");
 connect();
 }
}

Ein einfaches validate() hat hier genuegt.

Gruss, Patrick

Vielen Dank!

mit pack() hat es auch geklappt… Nur warum weiß ich immer noch nicht…

Vielen Dank!

mit pack() hat es auch geklappt… Nur warum weiß ich immer
noch nicht…

Weil du java nicht gesagt hast dass was ernstes passiert ist (Solche Austauschaktionen werden nicht bemerkt). Mit pack() oder validate() zwingst du die VM aber, sich neu zu zeichnen…