Frage

Ich habe Probleme, herauszufinden, dies heraus.

Die Situation ist nicht schwer, sich vorzustellen, so dass ich hoffe, dass ich dies ohne einen Beispielcode schreiben könnte. Ich habe JPanel mit Cardlayout. Die Platte enthält mehrere andere Platten als einzelne Registerkarten. Was ich zu achive versuchen, ist eine JButton zu erstellen, die die Haupt-Panel-Show machen wird zuletzt geöffneten Tab (der vor dem aktuellen gezeigt wurde). Keine große Sache dachte ich zuerst.

So begann ich durch Denken, wie die aktuellen sichtbaren Registerkarte zu erhalten (Panel) und fand heraus, dass es für das Panel bzw. Cardlayout, das nur enthält Methoden zuerst (), zuletzt geändert (), neben keine native Methode () und previous (), die keine Verwendung für mich ist.

Dann dachte ich, dass vielleicht mein Ziel achive ich durch alle Komponenten des Hauptfelds gehen könnte und Test, der eine sichtbar ist, welche die aktuelle wäre. Ich finde es ein wenig kompliziert, in Ordnung, aber wie kann ich dieses Panel-Show von Cardlayout, wenn ich nicht seine Kartennamen haben Cardlayout Methode Show (Eltern, Name) anrufen?

An diesem Punkt habe ich keine Ahnung. Ich habe habe das Internet durchsucht, aber keine Lösung gefunden, nur dass nur wenige Menschen zu Figur etwas ähnliches heraus versucht haben. Also ich hoffe, jemand, der bereits mit dieser Art von Problem in diesem Thema delt kommt: -)

Vielen Dank für alle Vorschläge.

Mit freundlichen Grüßen

Martin S.

War es hilfreich?

Lösung

Das bringt die Frage, wie man an der aktuellen Karte an erster Stelle angekommen. Wenn Sie next() auf die aktuelle Karte zu bekommen verwendet, dann previous() werden Sie auf die vorherige Karte und umgekehrt erhalten. Wenn Sie first() oder last() verwenden, dann bist du kein Glück.

Natürlich könnte man immer einen Teil der durch die CardLayout gespeicherten Informationen duplizieren Ihr Ziel zu erreichen: Wenn Sie eine Reihe von Komponentennamen pflegen (und aktualisieren, wenn Sie addLayoutComponent nennen) sowie einem früheren Index (und aktualisieren diese mit next, previous und anderen Anrufen), dann können Sie Nachschlag nur den Namen der vorherigen Komponente und Verwendung show die vorherige Karte zeigen.


Update: Da Sie die Registerkarte Namen kennen, ist hier, wie Sie die vorherige Registerkarte Namen beibehalten können:

String prevTab, curTab;

public void showTab(String newTab) {
  prevTab = curTab;
  curTab = newTab;
  layout.show(parent, curTab);
}

public void goBack() {
  layout.show(parent, prevTab);
}

Andere Tipps

Sie können eine Karte Objektes Karte erstellen. Und fügen Sie Panels & Namen Kartenlayout und auf der Karte. Danach, wenn Sie die vorher gezeigt JPanel haben, erhalten Sie seinen Namen von der Karte über map.get (JPanel p). Und zu finden, was JPanel vor dem Moment sichtbar war, müssen Sie ComponentListener zu jedem JPanel hinzuzufügen. Und machen es auf componentHidden Ereignis einige statische Variablen zu ändern (zum Beispiel statische JPanel prev_shown).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top