O
Hallo Zusammen,
Danke ersteinmal an Pogo für seine Lösung. Ich habe nach einigem Suchen und Probieren nun doch noch die Lösung gefunden, die ich seit Tagen (Wochen??) suche. Also das Zauberwort heisst Invalidate/Validate. Die Klassen Test1 und Test2 werden richtig instanziiert und auch gezeichnet, aber das Center wird nicht neu gezeichnet. Hierzu muss die ContentPane erst "ungültig" gesetzt werden, um dann zum Neuzeichnen auf "gültig" gesetzt zu werden. Dies bewirkt ein Neuzeichnen und das neue Center wird dargestellt. Für Verbesserungsvorschläge zum Code bin ich aber immer offen. Also Abschuss freigegeben.
Anbei dann nochmal der Code:
----------------------------
/*
* Created on 06.12.2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
/**
* @author Oliver
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test extends JFrame
implements ActionListener
{
Test1 test11;
Test2 test21;
JPanel buttonPanel = new JPanel();
JButton button1 = new JButton("Hallo 1");
JButton button2 = new JButton("Hallo 2");
JButton button3 = new JButton("- Validate -");
JPanel pane = new JPanel();
public Test() {
super("Test");
setContentPane(pane);
pane.setLayout(new BorderLayout());
buttonPanel = new JPanel();
buttonPanel.add(button1);
buttonPanel.add(button2);
buttonPanel.add(button3);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
pane.add(buttonPanel,"West");
this.setSize(800,600);
this.show();
}
public void actionPerformed(ActionEvent evt)
{
Object command = evt.getSource();
if (command == button1)
{
System.out.println("Hallo 1");
test11 = new Test1(this);
pane.add(test11,"Center");
pane.invalidate();
}
else
if (command == button2)
{
System.out.println("Hallo 2");
test21 = new Test2(this);
pane.add(test21,"Center");
pane.invalidate();
}
else
{
pane.validate();
}
}
public static void main(String[] args) {
JFrame frame = new Test();
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
}
}
/**
* @author Oliver
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.event.*;
import javax.swing.*;
class Test1 extends JPanel
implements ActionListener {
Test frame;
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JTextField tf1 = new JTextField("Hallo 1");
JTextField tf2 = new JTextField("Hallo 2");
Test1(Test parent )
{
frame = parent;
label1.setText("Hallo");
label2.setText("Welt ");
label3.setText("aus Köln");
add(label1);
add(label2);
add(label3);
add(tf1);
add(tf2);
}
public void actionPerformed(ActionEvent evt)
{
// leer
}
}
/*
* Created on 14.12.2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
/**
* @author Oliver
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.event.*;
import javax.swing.*;
class Test2 extends JPanel
implements ActionListener {
Test frame;
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JTextField tf1 = new JTextField("Hallo 3");
JTextField tf2 = new JTextField("Hallo 4");
Test2(Test parent) {
frame = parent;
label1.setText("Hallo");
label2.setText("Welt ");
label3.setText("aus Bochum");
add(label1);
add(label2);
add(label3);
add(tf1);
add(tf2);
}
public void actionPerformed(ActionEvent evt) {
// leer
}
}
Vielleicht hilft es Jemand bei der Lösung eines ähnlichen Problems.
Gruss und frohe Weihnachten an Alle in diesem Forum!
Oliver