Swing Bei Button Click neues Panel laden

D-AMP

Mitglied
Moin, hätte da mal ein Problem:
Und zwar hab ich ein JDialog Fenster welches zur Anmeldung und Registrierung dienen soll. Vom Code her sieht das ganze aktuell so aus:
Java:
import java.awt.BorderLayout;


public class Anmeldung extends JDialog {
	private JLabel lblAnmeldung;
	private JLabel lblBenutzername;
	private JTextField textField;
	private JLabel lblPasswort;
	private JPasswordField passwordField;
	private JButton btnAnmelden;
	private JButton btnRegistrieren;
	private static Anmeldung anmeldung;
	/*Methode zum Verbinden des Anmeldungsfenster mit den GUIClient*/
	protected static Anmeldung get() {
		if (anmeldung == null)
			anmeldung = new Anmeldung();
		return anmeldung;
	}

	/**
	 * Create the dialog.
	 */
	public Anmeldung() {
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setResizable(false);
		setBounds(100, 100, 450, 300);
		setModal(true);
		getContentPane().setLayout(null);
		getContentPane().add(getLblAnmeldung());
		getContentPane().add(getLblBenutzername());
		getContentPane().add(getTextField());
		getContentPane().add(getLblPasswort());
		getContentPane().add(getPasswordField());
		getContentPane().add(getBtnAnmelden());
		getContentPane().add(getBtnRegistrieren());
		
	}

	private JLabel getLblAnmeldung() {
		if (lblAnmeldung == null) {
			lblAnmeldung = new JLabel("Anmeldung");
			lblAnmeldung.setFont(new Font("Tahoma", Font.PLAIN, 18));
			lblAnmeldung.setHorizontalAlignment(SwingConstants.CENTER);
			lblAnmeldung.setBounds(0, 26, 434, 49);
		}
		return lblAnmeldung;
	}

	private JLabel getLblBenutzername() {
		if (lblBenutzername == null) {
			lblBenutzername = new JLabel("Benutzername:");
			lblBenutzername.setBounds(36, 100, 99, 14);
		}
		return lblBenutzername;
	}

	private JTextField getTextField() {
		if (textField == null) {
			textField = new JTextField();
			textField.setBounds(145, 97, 145, 20);
			textField.setColumns(10);
		}
		return textField;
	}

	private JLabel getLblPasswort() {
		if (lblPasswort == null) {
			lblPasswort = new JLabel("Passwort:");
			lblPasswort.setBounds(36, 131, 99, 14);
		}
		return lblPasswort;
	}

	private JPasswordField getPasswordField() {
		if (passwordField == null) {
			passwordField = new JPasswordField();
			passwordField.setBounds(145, 128, 145, 20);
		}
		return passwordField;
	}

	private JButton getBtnAnmelden() {
		if (btnAnmelden == null) {
			btnAnmelden = new JButton("Anmelden");
			btnAnmelden.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					anmeldung.setVisible(false);

				}
			});
			btnAnmelden.setBounds(83, 169, 99, 23);
		}
		return btnAnmelden;
	}

	private JButton getBtnRegistrieren() {
		if (btnRegistrieren == null) {
			btnRegistrieren = new JButton("Registrieren");
			btnRegistrieren.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
				}
			});
			btnRegistrieren.setBounds(228, 169, 107, 23);
		}
		return btnRegistrieren;
	}
}
Nun soll sich beim Klick auf den Button Registrieren am besten ein neues Panel(??) laden, welches im Prinzip genauso aussehen soll wie das Startfenster nur mit zwei Passwortfeldern (Passwort wiederholen) und lediglich einen Registrieren Button.
Bei meinen Recherechen dieses Problem zu lösen bin ich immer wieder auf das CardLayout gestoßen.
Leider hab ich aktuelll keine Ahnung wie ich es benutzen soll. Würde gerne möglichst viel über den WindowBuilder anlegen.
Mein erster Ansatz war nun der ContentPane das CardLayout zu geben und mir dann in der contentPane zwei Panels Anmelden und Registrieren zu erstellen (jeweils mit AbsolutLayout).
War leider nichts, der Code sieht dann ungefähr so aus (mal 'n vereinfachtes Beispiel):
Java:
public Test() {
		setBounds(100, 100, 450, 300);
		getContentPane().setLayout(new CardLayout(0, 0));
		{
			JPanel an = new JPanel();
			getContentPane().add(an, "name_9953374976740");
			an.setLayout(null);
			{
				JButton btnNewButton = new JButton("Anmelden");
				btnNewButton.setBounds(53, 97, 89, 23);
				an.add(btnNewButton);
			}
		}
		{
			JPanel reg = new JPanel();
			getContentPane().add(reg, "name_9962018113059");
			reg.setLayout(null);
			{
				JButton btnNewButton_1 = new JButton("Registrieren");
				btnNewButton_1.setBounds(180, 116, 125, 23);
				reg.add(btnNewButton_1);
			}
		}
	}
Mir ist bewusst dass, das Problem darin liegt, dass sich die Panels nicht kennen. Meine frage ist nun: Ist der ganze Ansatz S*****e? (Dann bitte um Vorschlag eines besseren). Verwend ich das CardLayout Falsch?? Oder könnt ich das Problem durch ein bisschen "per Hand Code" lösen? (zB die Panels und das CardLayout außerhalb des Konstruktors anlegen (hab ich zum teil schon probiert und hat leider nicht geklapppt hat).

Schonmal 'n fetten Dank an jeden der sich mienen Problem annimmt.
MfG D-AMP
 
Ich weiß nicht ob ich die Frage jetzt falsch verstehe aber du könntest ja ganz einfach 2 Panel erstellen und formatieren so wie sie aussehen sollen und dem ContentPane hinzufügen.. das übliche ...
dann zum schluss setzt du einfach ein Panel unsichtbar und das andere sichtbar beim klick auf den Registrierenbutton einfach die zustände ändern
panel1.setVisable(false);
panel2.setVisable(true);
Die 2 Panel muss man eben übereinander anordnen das das funktioniert
 
Zuletzt bearbeitet:
funktioniert glaube ich nicht. aber das hier:

Java:
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class Anmeldung extends JDialog {

	private CardLayout cardLayout;
	private JPanel holder;

	public Anmeldung() {
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setResizable(false);
		setBounds(100, 100, 450, 300);
		setModal(true);

		cardLayout = new CardLayout();
		holder = new JPanel(cardLayout);
		add(holder);

		AnmeldeFenster anmeldung = new AnmeldeFenster();
		RegistrierungsFenster registrierung = new RegistrierungsFenster();
		holder.add(anmeldung);
		holder.add(registrierung);
		cardLayout.addLayoutComponent(anmeldung, "Anmeldung");
		cardLayout.addLayoutComponent(registrierung, "Registrierung");
	}

	class AnmeldeFenster extends JPanel {

		private JLabel lblAnmeldung, lblBenutzername, lblPasswort1;
		private JTextField textField;
		private JPasswordField passwordField1;
		private JButton btnAnmelden, btnRegistrieren;

		public AnmeldeFenster() {
			setLayout(null);
			add(getLblAnmeldung());
			add(getLblBenutzername());
			add(getTextField());
			add(getLblPasswort1());
			add(getPasswordField1());
			add(getBtnAnmelden());
			add(getBtnRegistrieren());
		}

		private JLabel getLblAnmeldung() {
			if (lblAnmeldung == null) {
				lblAnmeldung = new JLabel("Anmeldung");
				lblAnmeldung.setFont(new Font("Tahoma", Font.PLAIN, 18));
				lblAnmeldung.setHorizontalAlignment(SwingConstants.CENTER);
				lblAnmeldung.setBounds(0, 26, 434, 49);
			}
			return lblAnmeldung;
		}

		private JLabel getLblBenutzername() {
			if (lblBenutzername == null) {
				lblBenutzername = new JLabel("Benutzername:");
				lblBenutzername.setBounds(36, 100, 99, 14);
			}
			return lblBenutzername;
		}

		private JTextField getTextField() {
			if (textField == null) {
				textField = new JTextField();
				textField.setBounds(145, 97, 145, 20);
				textField.setColumns(10);
			}
			return textField;
		}

		private JLabel getLblPasswort1() {
			if (lblPasswort1 == null) {
				lblPasswort1 = new JLabel("Passwort:");
				lblPasswort1.setBounds(36, 131, 99, 14);
			}
			return lblPasswort1;
		}

		private JPasswordField getPasswordField1() {
			if (passwordField1 == null) {
				passwordField1 = new JPasswordField();
				passwordField1.setBounds(145, 128, 145, 20);
			}
			return passwordField1;
		}

		private JButton getBtnAnmelden() {
			if (btnAnmelden == null) {
				btnAnmelden = new JButton("Anmelden");
				btnAnmelden.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
					}
				});
				btnAnmelden.setBounds(83, 200, 99, 23);
			}
			return btnAnmelden;
		}

		private JButton getBtnRegistrieren() {
			if (btnRegistrieren == null) {
				btnRegistrieren = new JButton("Registrieren");
				btnRegistrieren.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						cardLayout.next(holder);
					}
				});
				btnRegistrieren.setBounds(228, 200, 107, 23);
			}
			return btnRegistrieren;
		}
	}

	class RegistrierungsFenster extends JPanel {

		private JLabel lblAnmeldung, lblBenutzername, lblPasswort1, lblPasswort2;
		private JTextField textField;
		private JPasswordField passwordField1, passwordField2;
		private JButton btnRegistrieren;

		public RegistrierungsFenster() {
			setLayout(null);
			add(getLblAnmeldung());
			add(getLblBenutzername());
			add(getTextField());
			add(getLblPasswort1());
			add(getLblPasswort2());
			add(getPasswordField1());
			add(getPasswordField2());
			add(getBtnRegistrieren());
		}

		private JLabel getLblAnmeldung() {
			if (lblAnmeldung == null) {
				lblAnmeldung = new JLabel("Anmeldung");
				lblAnmeldung.setFont(new Font("Tahoma", Font.PLAIN, 18));
				lblAnmeldung.setHorizontalAlignment(SwingConstants.CENTER);
				lblAnmeldung.setBounds(0, 26, 434, 49);
			}
			return lblAnmeldung;
		}

		private JLabel getLblBenutzername() {
			if (lblBenutzername == null) {
				lblBenutzername = new JLabel("Benutzername:");
				lblBenutzername.setBounds(36, 100, 99, 14);
			}
			return lblBenutzername;
		}

		private JTextField getTextField() {
			if (textField == null) {
				textField = new JTextField();
				textField.setBounds(145, 97, 145, 20);
				textField.setColumns(10);
			}
			return textField;
		}

		private JLabel getLblPasswort1() {
			if (lblPasswort1 == null) {
				lblPasswort1 = new JLabel("Passwort:");
				lblPasswort1.setBounds(36, 131, 99, 14);
			}
			return lblPasswort1;
		}

		private Component getLblPasswort2() {
			if (lblPasswort2 == null) {
				lblPasswort2 = new JLabel("nochmal:");
				lblPasswort2.setBounds(36, 162, 99, 14);
			}
			return lblPasswort2;
		}

		private JPasswordField getPasswordField1() {
			if (passwordField1 == null) {
				passwordField1 = new JPasswordField();
				passwordField1.setBounds(145, 128, 145, 20);
			}
			return passwordField1;
		}

		private Component getPasswordField2() {
			if (passwordField2 == null) {
				passwordField2 = new JPasswordField();
				passwordField2.setBounds(145, 159, 145, 20);
			}
			return passwordField2;
		}

		private JButton getBtnRegistrieren() {
			if (btnRegistrieren == null) {
				btnRegistrieren = new JButton("Registrieren");
				btnRegistrieren.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
					}
				});
				btnRegistrieren.setBounds(228, 200, 107, 23);
			}
			return btnRegistrieren;
		}
	}

	public static void main(String[] args) {
		JDialog dialog = new Anmeldung();
		dialog.setVisible(true);
	}
}
 
Zuletzt bearbeitet:

Zurück
Oben