Problem mit CardLayout: Wie einzelne Karten aktualisieren?

Solera

Grünschnabel
Hi,
Ich bin grad am Java lernen (und das auf Englisch, verzeiht mir also gelegentliche Terminologiefehler...) und muss für meine Vorlesung in ein paar Tagen ein Programmierprojekt abliefern. Da nun hab ich folgendes Problem, dass sich auch nach längerem googlen und Sun-Webseite lesen irgendwie nicht lösen will:

Mein Benutzerinterface ist mit einem CardLayout realisiert. In der void main rufe ich die Initialisierung auf. In der entsprechenden void init() weise ich das CardLayout zu und initialisiere die einzelnen Karten per build:
public void init()
{
container.setLayout( cl );
builderstenDialog();
buildzweitenDialog();
container.add( "Start", erstesPanel );
container.add( "Check", zweitesPanel );

cl.show( container, "Start" );
}

Die einzelnen Karten sind dann definiert via
void builderstenDialog()
{ JPanel erstesPanel = new JPanel();
/*Erstellung der restlichen GUI Komponenten für diese Karte*/
}
etc.

Soweit alles schön. Wenn ich das Programm starte, erscheint brav die erste Karte. Auf der habe ich eine Liste mit Namen, aus der der User per Mausklick einen aussucht. Der ActionHandler für diesen Click setzt eine Merkervariable auf die Indexnummer des ausgewählten Namens und ruft dann per cl.show( container, "Check" ); die zweite Karte auf. Das funktioniert auch noch prima.
Aber nu: Auf der zweiten Karte versuche ich über den Merker und die darin gespeicherte Indexnummer den Namen aus der ersten Karte darzustellen zusammen mit Adressdaten die ich ebenfalls über die Indexnummer reinhole.
Und das funktioniert nicht. Es zeigt immer die Daten des ersten Namens aus der Liste von Karte 1 an.

Erst dachte ich, das mein ActionListener einfach den Merker nicht auf die Indexnummer umstellt. Das ist aber nicht der Fall (getestet indem ich anstelle der zweiten Karte eine Messagebox aufgerufen habe, die den Wert des Merkers anzeigt.) Der Merker hat nach dem Klick in Karte 1 die richtige Indexnummer als Wert.

Soweit ich das im Moment verstehe, ist mein Problem, dass die einzelnen Karten mittels build bei Start des Programms erstellt werden, wenn mein Indexnummern-Merker noch gleich Null ist (ich initialisiere ihn im Constructor auf =0).

Ich müsste also in meinem ActionListener auf der ersten Karte einen Befehl einfügen, der die nächste Karte aktualisiert bevor sie angezeigt wird, schlicht damit die Karte mit dem neuen Index-Merker erstellt wird und die passenden Daten angezeigt werden.
Meine erste Idee war, einfach den buildzweitenDialog-Befehl zu wiederholen. Das funktioniert aber leider nicht. So, was nun?

Sorry für den umfangreichen Roman, aber ich hab im Moment keinen Plan mehr wie weiter oder wo suchen. Falls ich irgendwas wichtiges vergessen hab, bitte rückfragen. Ich wollte Euch nicht gleich im ersten Anlauf mein ganzes chaotisches Codemonster an den Hals werfen... ;)

Ich wär dankbar für einen Tip oder einen Schubs in die richtige Richtung in der ich eine Lösung finden kann.
Thanks Solera
 
Warum hast du dich für CardLayout entschieden? Kann JTabbedPane deine Anforderung nicht erfüllen?
Bei mir funktioniert diese Variante immer ganz gut, sogar wenn das Fenster dynamisch viele Tabs hat.
 
Vielen Dank für die schnelle Reaktion! :)

CardLayout: Weil ich es da in der Hand habe, dass erst zur nächsten Karte geschaltet wird, wenn der User tatsächlich eine Auswahl getroffen hat. (Und weil ich TabbedPane erst seit ein paar Tagen kenne und noch nie benutzt habe... ;) )

Mal abgesehen davon, dass ich nicht weiß, ob mir die Zeit reicht, das ganze Projekt auf Tabbed Pane umzustellen (Es handelt sich in Realität um deutlich mehr als 2 Dialoge): Kann ich unterdrücken, dass der User die Tabs selber wechselt?
 
Bei JTabbedPane kann man die einzelnen Tabs inaktiv stellen, dann lassen sie sich nicht auswählen. So denke ich sollte es möglich sein erst zu wechseln, wenn eine Auswahl getroffen wurde.
Vieleicht solltest du ein einfaches Testfenster bauen und mal versuchen ob es klappt bevor du eine Umstellung versuchst.
:rolleyes:
 
Zurück