GUI neuladen (JPanel)

OLStefan

Neues Mitglied
Ich arbeite momentan an einem Programm, bei dem Ich in einer von drei möglichen Kategorien ein neues Element zu einer JComboBox hinzufügen möchte. Hierzu wird durch einen String der Fenstertitel geändert werden.
Dies ist der Punkt an dem es nicht so funktioniert wie geplant, der String wird mit null deklariert und so sieht dann auch der Fenstertitel aus, daher suche ich eine Möglichkeit die GUI noch einmal zu laden nachdem der String den richtigen Inhalt bekommen hat.

Ich habe schon die Möglichkeit mit revalidate() und repaint() gefunden und ausprobiert, jedoch funktioniert beides nicht.

Hier der interesante Teil des Codes:

Java:
String choose;
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
	JPanel paEdit;
	JComboBox cobGroup,cobSchool,cobJob;
	JButton buGroupNew,buGroupEdit,buGroupDel;
	JButton buSchoolNew,buSchoolEdit,buSchoolDel;
	JButton buJobNew,buJobEdit,buJobDel;
	JLabel lblGroup,lblSchool,lblJob;
	
	//Add Window
	JFrame frmAdd;
	JLabel lblAdd;
	JTextField tfAdd;
	JButton buSave,buAbort;

new Edit() {
        paEdit = new JPanel(null);
		//Standard Window
		lblGroup = new JLabel("Gruppen");
		lblGroup.setBounds(10,10,200,20);
		paEdit.add(lblGroup);
		cobGroup = new JComboBox();
		cobGroup.setBounds(10,40,200,30);
		paEdit.add(cobGroup);
		buGroupNew = new JButton("Neue Gruppe");
		buGroupNew.setBounds(220,40,220,30);
		buGroupNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				choose = "Gruppe";
				tfAdd.setText("");
				frmAdd.setVisible(true);
			}
		});
		paEdit.add(buGroupNew);
		buGroupEdit = new JButton("Gruppe bearbeiten");
		buGroupEdit.setBounds(445,40,250,30);
		paEdit.add(buGroupEdit);
		buGroupDel = new JButton("Gruppe entfernen");
		buGroupDel.setBounds(335,75,245,30);
		paEdit.add(buGroupDel);
		
		lblSchool = new JLabel("Schule");
		lblSchool.setBounds(10,110,200,20);
		paEdit.add(lblSchool);
		cobSchool = new JComboBox();
		cobSchool.setBounds(10,140,200,30);
		paEdit.add(cobSchool);
		buSchoolNew = new JButton("Neue Schule");
		buSchoolNew.setBounds(220,140,220,30);
		buSchoolNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				choose = "Schule";
				tfAdd.setText("");
				frmAdd.setVisible(true);
			}
		});
                frmAdd = new JFrame("Neue " + choose +" Anlegen");
		frmAdd.setSize(300,160);
		frmAdd.setResizable(false);
		frmAdd.setVisible(false);
		frmAdd.setLayout(null);
		frmAdd.setLocation(((d.width - frmAdd.getWidth()) / 2),((d.height - frmAdd.getHeight()) / 2));
		
}
 
die Änderung der String-Variable interessiert niemanden, schon gar nicht, wenn du als Titel nichtmal choose selber setzt,
sondern einen zusammengebauten String

du musst schon
setTitle("Neue " + choose +" Anlegen");
(erneut) aufrufen
 
...daher suche ich eine Möglichkeit die GUI noch einmal zu laden nachdem der String den richtigen Inhalt bekommen hat.

Hallo Stefan,

herzlich willkommen in unserem Java Forum. Deine Überlegung ist im Prinzip sehr gut 🙂.
Es gibt leider zwei Probleme:
  1. Eine Zuweisung wie
    Code:
    choose = "Gruppe";
    legt ein neues String Objekt an, das dein Frame-Titel nicht ohne Weiteres kennen kann.
  2. String Objekte sind unveränderlich.
Wir sind daher tatsächlich gezwungen, den vollständigen Titel mit Frame#setTitle(..) zu ersetzen.

Wir könnten die Sache höchstens etwas vereinfachen, indem wir den neuen Titel über eine eigene Methode holen, damit wir die Konstanten Teile des Titels nicht immer wieder schreiben müssen.

Gruß,
André
 

Zurück
Oben