Entferne Maske aus einem JPanel, füge neues hinzu -> manchmal verschwinden Felder

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe hier ein einfaches JFrame mit einem JPanel in ContentPane des Frams.

Nun gibt es im Programm recht viele Masken (die von JPanel abgeleitet sind), die ausgewählt werden können. Wird eine ausgewählt, so wird das JPanel geleert und die Maske dem Panel hinzugefügt. Mit diesem Mechanismus kann ich alle Masken "durchschalten".

Nun habe ich ein merkwürdiges Problem Es kommt sehr selten vor, dass eine Maske oder gar eine Komponente innerhalb einer Maske (z.B. ein JTextField) plötzlich nicht angezeigt werden. Ich rufe die Maske auf (sie wird dem Panel hinzugefügt) und dann könnte das Problem auftreten - sprich, es fehlt einfach eine Komponente.

Der Code zum Wechseln der Maske sieht so aus:

Code:
// contentContainer ist jenes oben erwähnte JPanel

mainAppPanel.getContentContainer().removeAll();
mainAppPanel.getContentContainer().add( view, "0, 0" );
mainAppPanel.getContentContainer().validate();
mainAppPanel.repaint();

Wie man sieht, entferne ich erst alle Komponenten aus meinem Panel, füge dann die Maske hinzu (view), validiere den Container und zeichne ihn anschließen neu.

Ist diese Vorgehensweise überhaupt korrekt, wenn man Komponenten aus einem Panel entfernt und ein neues reinsetzt? Oder fehlt dort ein Aufruf an irgendeine Methode, um es "korrekt" zu machen?

Könnt Ihr Euch vielleicht vorstellen, warum ab und zu eine Komponente auf einer Maske fehlt (sie wird erst nach einem Programmneustart wieder angezeigt)? Ich kann das Problem nicht zufällig reproduzieren, aber es tritt immer wieder mal auf... als wenn nicht die komplette Maske zu Ende gezeichnet wurde.

(Die Masken enthalten total simplen Code, z.B. ein TableLayout mit 4 JTextFields darin plus ein paar JLabel).

Ist es vielleicht "korrekter", alle Masken dem Panel hinzuzufügen und alle auf setVisible(false) zu setzen, und nur jene, die angezeigt werden soll, wird auf setVisible(true) gesetzt? Oder ist meine Mehode oben schon der richtige Weg?


Über Eure Hilfe würde ich mich sehr freuen


Vielen Dank!
 
Zurück