PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Swing: wie SwingJComponent austauschbar machen?


mittelding
2011-05-05, 21:30:30
Hallo!

Nicht zu sehr am Threadtitel orientieren, ich beschreibe am besten erst mal was ich möchte, vielleicht geht das auch ganz anders.

Ich habe in meiner Swing-Oberfläche 2 verschiedene Ansichten. Die erste Ansicht ist ein Loginfeld mit diversen Einstellungen, die zweite Ansicht ist erst das eigentliche Programm. Nachdem der Login erfolgreich war, soll dann also die eigentliche Oberfläche angezeigt werden.

Wie kann ich die Oberflächen aber austauschen? Ganz am Anfang geht es los mit einem JFrame. Diesem kann ich mit der Methode "add" ja Komponenten hinzufügen - ich würde sie aber gerne austauschen. Beispielsweise habe ich Komponente A (ein JPanel mit dem Loginfeld drin) und Komponente B (die eigentliche Oberfläche, vermutlich ein JDesktopPane). Gewünscht ist aber nur eines von beiden zum Zeitpunkt X.

Ich hoffe das war verständlich genug, vielen Dank!

edit: gemeint ist also nicht, wie ich die gesamte Oberfläche im Sinne von MVC oder Schichtenmodellen austauschbar halte, sondern wie ich innerhalb meiner Oberfläche auf verschiedene Programmzustände verschiedene "Sub-oberflächen" zeigen kann.

Abe Ghiran
2011-05-05, 21:59:29
Man kann ja Komponenten mit remove() auch wieder aus einem Container, also dem JFrame entfernen. Sprich nach erfolgtem login fliegt das JPanel fürs Login raus, das normale gui wird hinzugefügt, vielleicht noch neu layouten (doLayout()), fertig.

Edit: Javadoc meint, man sollte nach dem hinzufügen oder entfernen von Komponenten auch mal validate() aufrufen, wenn der Container gerade sichtbar ist. Oi, ist das alles lange her.

Grüße, Jan

mittelding
2011-05-05, 22:02:25
Danke dir, so hatte ich es mir auch erst überlegt, dachte mir aber dass das irgendwie unsauber ist.
Habe jetzt die CardLayout Klasse gefunden, die wohl genau das macht, was ich wollte.


Eventuell kann das jemand mit Erfahrung bestätigen oder verneinen (kann ja sein es geht noch besser).

Gast
2011-05-06, 11:16:51
Ich hätte auch mit .remove /.add die Panels getauscht, CardLayout hatte ich garnicht auf dem Schirm, sieht aber in der Tat so aus, als ob es genau dein Problem lösen würde.
Hab übrigens grad mal reingeschaut, CardLayout arbeitet intern mit setVisible und nicht add/remove.

BeeRockxs
2011-05-06, 12:52:21
CardLayout ist genau das richtige.

dogmeat
2011-05-06, 13:10:42
Schon etwas her, aber gibts nicht sowas wie .visible(true/false)?