Ich habe 2 Jpanel erstellt, die zu einem JFrame hinzugefügt werden.
Zuerst wird eines der JPanel dem JFrame hinzugefügt.
Ich habe die "add()" Methode des JFrame verwendet, um das JPanel hinzuzufügen.
JPanel panel = new JPanel();
JFrame j = new JFrame();
j.getContentPane().add(panel);
Das JFrame hat eine JMenuBar darauf festgelegt.
Mit 2 JMenuItems, die zu einem JMenu hinzugefügt sind, das schließlich zur JMenuBar hinzugefügt wird.
Wenn auf das erste JMenuItem geklickt wird, wird das vorherige Panel aus dem JFrame entfernt und das andere JPanel dem JFrame hinzugefügt. Das 2. JMenuItem macht das Gegenteil, entfernt das vorherige JPanel und platziert das neuere JPanel.
JMenuItem a = new JMenuItem("p1");
a.addActionListener(new...
{
Frame2 ob = new Frame2();//eine andere Klasse, die Komponenten auf das Panel hinzufügt.
JPanel p1 = ob.getPanel();//Methode, die das JPanel aus einer anderen Klasse zurückgibt
j.getContentPane().remove(0);
j.getContentPane().add(p1);
});
JMenuItem b = new JMenuItem("p2");
a.addActionListener(new...
{
Frame3 ob2 = new Frame3();//eine andere Klasse, die Komponenten auf das Panel hinzufügt.
JPanel p2 = ob2.getPanel();//Methode, die das JPanel aus einer anderen Klasse zurückgibt
j.getContentPane().remove(0);
j.getContentPane().add(p2);
});
Das Problem, dem ich jetzt gegenüberstehe, ist, dass die Panels nicht entsorgt werden, wenn sie entfernt werden, und an irgendeiner Stelle im Speicher die Panels Speicher belegen.
Obwohl das vorherige Panel nicht sichtbar ist und das neuere Panel gesehen werden kann, kann der Speicher, den das vorherige Panel (nicht sichtbares Panel) belegt, im Task-Manager gesehen werden.
Und wenn ich zwischen den Panels wechsle, nimmt der von ihnen belegte Speicher zu, da jedes Mal eine neue Instanz des Panels erstellt wird. Ich möchte die Panels entsorgen, wenn sie entfernt werden, aber es gibt keine Methode, um ein JPanel zu entsorgen, wie die dispose() Methode für JFrame.