Im Swingfenster den Inhalt wechseln...

deeska

Grünschnabel
Hallo!
Ich bastel grad ein bisschen an einer kleinen Anwendung. Mein Problem ist folgendes:
Ich habe mir ein Hauptfenster gebaut und möchte nun in diesem Fenster verschiedene Inhalte anzeigen wenn man unterschiedliche Buttons drückt(wie man das halt so bei einem Programm macht).
Ich mach das schon seit längerem folgendermaßen:

//Hauptklasse für das Fenster
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Test extends JFrame implements ActionListener {
	static JPanel mainPanel = new JPanel(new FlowLayout());
	JButton button = new JButton("Button");
	Test(){
		setSize(200,100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			button.addActionListener(this);
			mainPanel.add(button);
			add(mainPanel);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e){
		if(e.getSource()==button){
			new zweitesFenster();
		}
	}
	
	public static void main(String[] args) {
		new Test();

	}

}

//Zweite Klasse für anderen Inhalt
Code:
import javax.swing.*;
public class zweitesFenster {
	zweitesFenster(){
		Test.mainPanel.removeAll();
		Test.mainPanel.add(new JLabel("zweites Fenster"));
		Test.mainPanel.updateUI();
	}
}

Nun hab ich aber bei meinem aktuellen Projekt gemerkt, dass wenn ich das Programm länger laufen lasse, dieses mehr und mehr Physikalischen Speicher in Anspruch nimmt, weil ich ja immer wieder neue Objekte der verschiedenen Klassen erzeuge.

Die konkrete Frage also:
Kann man das so machen wie ich mir das überlegt habe? Und wenn nein, wie löst das der Professionelle Programmierer?

vielen Dank schonmal
lg
Sven
 
Meinst du damit das gesamt Fenster in einer Klasse belassen? Dann wird die doch unglaublich gross oder nicht?
 
Nein, das Auslagern ist schon richtig. Doch das was du in deriner zweiten Klasse machst, lässt sich auch ganz leicht in eine Methode fassen. So fällt das ständige "new zweitesFenster();" weg. Damit erstellst du nicht jedes mal ein neues Object, sondern benutzt Methoden eines bestehenden.
 
Hallo,

du machst es besser so. Für jede oberfläche die du im JFrame anzeigen möchtest, schreibst du dir jeweils eine eigene Klasse. Diese Klassen lässt du von JPanel erben und packst dann alles drauf, was du in der jeweiligen Oberfläche haben möchtest.

Dann schaust du dir mal das CardLayout an. Da kannst du nämlich alle Panels mit einem key hinzufügen. Mit diesem Key kannst du dann nachher die jeweilige Oberfläche anzeigen lassen.

http://www.java2s.com/Code/Java/Swing-JFC/LayingOutaScreenwithCardLayout.htm

MFG

Sascha
 
Zurück