Java Zwischen JPanels wechseln, was ist am effizientesten?

InfDude

Cadet 4th Year
Registriert
Apr. 2016
Beiträge
95
Guten Tag,

ich arbeite momentan zur Übung an einem kleinen Projekt bei dem oft mithilfe von Buttonclicks zu einem neuen JPanel gewechselt werden soll. Das erstellen und wechseln ist an sich kein Problem, nur habe ich mich gefragt: Sollte ich alle JPanel die es in dem Programm geben wird, erstmal erstellen und dann wechseln, oder erst mit dem Buttonclick erstellen? Intuitiv würde ich sagen, erst beim klicken erstellen wäre effizienter, da ja nicht unbedingt jedes JPanel was es gibt, beim benutzen benötigt wird, würde dann aber nicht ein Panel mehrfach erstellt werden können? Wenn ich beispielsweise auf einem Panel bin und auf einen "Zurück" Button klicke, würde das ja dann wieder neu erstellt werden, oder? Meine "letzten Zeilen" beim wechseln sind die folgenden:

Code:
frame.remove(oldPanel);
frame.add(newPanel);
frame.revalidate();
frame.repaint()

Wobei das "newPanel" eben immer durch einen Klick erstellt wird. Ist dies ein sinnvoller (effizienter) weg da ranzugehen, oder sollte ich einen anderen Weg wählen? (Falls ja, welchen?)
Würde mich sehr über Ratschläge freuen

Edit:

Neuer Gedanke: Wenn ich die Panel erst mit einem Klick oÄ. erstelle und es auf dem neuen Panel weitere Button's gibt, mit denen weitere Panel erreichbar werden, würde sich das immer weiter verschachteln, das erscheint mir auf den ersten Blick nicht sinnvoll/übersichtlich, würde also wieder für "erstmal alles erstellen, dann immer wechseln" sprechen
 
Zuletzt bearbeitet:
InfDude schrieb:
Sollte ich alle JPanel die es in dem Programm geben wird, erstmal erstellen und dann wechseln, oder erst mit dem Buttonclick erstellen?

Ich würde die Masken on-demand erstellen.


InfDude schrieb:
Intuitiv würde ich sagen, erst beim klicken erstellen wäre effizienter, da ja nicht unbedingt jedes JPanel was es gibt, beim benutzen benötigt wird, würde dann aber nicht ein Panel mehrfach erstellt werden können?

Das kommt darauf an, wie man das umsetzt. Hindert Dich niemand daran, bereits erstellte Masken zu cachen, um sie nicht noch mal neu erstellen zu müssen.


InfDude schrieb:
Wobei das "newPanel" eben immer durch einen Klick erstellt wird. Ist dies ein sinnvoller (effizienter) weg da ranzugehen, oder sollte ich einen anderen Weg wählen?

Wenn das Erstellen spürbar Zeit benötigt, würde ich auf jeden Fall cachen. Ansonsten kann man einfach immer neu erstellen.


InfDude schrieb:
Neuer Gedanke: Wenn ich die Panel erst mit einem Klick oÄ. erstelle und es auf dem neuen Panel weitere Button's gibt, mit denen weitere Panel erreichbar werden, würde sich das immer weiter verschachteln, das erscheint mir auf den ersten Blick nicht sinnvoll/übersichtlich, würde also wieder für "erstmal alles erstellen, dann immer wechseln" sprechen

Kann ich nicht nachvollziehen. Ich würde immer nur unmittelbar erstellen, was gerade angezeigt wird (oder wenn man sicher weiß, dass etwas bald gebraucht wird, kann man das im Hintergrund schon mal anziehen).
 
Vielen dank für die Antwort. Werde es dann wohl so machen, die Panels erst zu erstellen wenn sie wirklich gebraucht werden.

Zum Thema Zeit: Da die Anwendung relativ simpel ist, spürt man kein laden etc., wollte nur wissen, was "üblich" ist bei größeren Projekten.
Und zu dem letzen Gedanken: Ich meinte nur, dass ja, wenn mittels ActionListener ein neues Panel erstellt wird, welches dann das "alte" ersetzt, das neue ja selbst wiederum Buttons hat, die ActionListener mit neuen Panels aufrufen, die wiederum.... usw. Das ergibt ziemlich schnell extrem verschachtelten/eingerückten Code der in meinen Augen immer "schlecht" aussieht. Wird eben irgendwann echt unübersichtlich
 
InfDude schrieb:
Und zu dem letzen Gedanken: Ich meinte nur, dass ja, wenn mittels ActionListener ein neues Panel erstellt wird, welches dann das "alte" ersetzt, das neue ja selbst wiederum Buttons hat, die ActionListener mit neuen Panels aufrufen, die wiederum.... usw. Das ergibt ziemlich schnell extrem verschachtelten/eingerückten Code der in meinen Augen immer "schlecht" aussieht.

Der Code muss nicht zwingend unmittelbar die hierarchische Struktur der verschachtelten Masken widerspiegeln. Naheliegend wäre für Submasken eigene Klassen zu nutzen. Man könnte die Erstellung auch in Methoden der Hauptklasse durchführen. Möglichkeiten der Code-Strukturierung gibt es viele.
 
Zurück
Oben