Swing Wechsel zwischen Frames

HankScorpio

Mitglied
Hallo,

ich muss gerade im Moment ein Programm basteln, dessen Oberfläche ungefähr so funktionieren muss, wie meine Skizze im Anhang verdeutlichen soll. Das Bildchen ist natürlich stark vereinfacht und soll nur zeigen, worauf ich hinausmöchte.

Nach dem Start öffnet ein großer JFrame (standardmäßig maximiert), sozusagen das Hauptmenü. Darin kann man Vorgänge wählen. Wird ein Vorgang gestartet, soll das Hauptmenü verschwinden und ein neues Fenster öffnet sich. In dem Fenster können dann verschiedene Dinge gemacht werden und ggf. weitere JDialogs modal dazu angezeigt werden.
So weit. So gut.
Jetzt ist aber die Anforderung, dass man nach Beendigung und Schließen dieses Vorgangsfensters wieder zum Hauptmenü - zum Hauptframe - zurückgelangen soll. Von dort aus soll dann der nächste Vorgang aufgerufen werden können (oder man beendet das Programm von dort aus).

Wie könnte ich das am geschicktesten anstellen? Hat jemand einen Rat für mich?

Ich kann kein MDI benutzen oder ein großes Fenster, wo links Explorer-like die Vorgänge sind und rechts der jeweilige Vorgang oder sowas. Es soll von der Funktionsweise schon so sein, wie beschrieben. Ich kann auch nicht einfach den Inhalt des ContentPane des Hauptmenüs austauschen durch den Vorgangskram, weil ich sozusagen annehmen muss, dass ich nicht weiß, was da für Unterprogramme aufgerufen werden.

Ein paar Probleme, die ich dabei habe:
  • Den schönen modalen JDialog kann ich eigentlich nicht nehmen, weil der nicht maximiert werden kann (soll?).
    Sonst ginge das ja sicher ganz gut: Hauptmenü ausblenden -> Modal dazu das neue Fenster starten -> Hauptmenü pausiert solange, wie modales Fenster aktiv -> Bei Rückkehr des Kontrollflusses zum Hauptmenü einfach dieses wieder sichtbar schalten
  • Wenn ich vom Hauptmenü-Frame aus den Vorgangs-Frame erzeuge und vom Vorgangs-Frame aus wieder einen Hauptmenü-Frame usw., läuft sicher irgendwann der Stack über, oder?
  • Wenn ich eine große Ereignisschleife (*schauder* *uäääh*) baue (Hauptmenü anzeigen > Abwarten, bis geschlossen > Auswahl abfragen > Vorgang starten > Abwarten, bis geschlossen > Zurück zum Anfang), müsste ich in der Ereignisschleife irgendwie auf die Beendigung der Frames warten... :-? Kann ja schlecht
    Code:
    while (!frameXY.isFinished()) { }
    machen. Ich weiß, dass der Gedanke, das so zu machen, gruselig und verkehrt ist. ;)

Stehe gerade etwas auf dem Schlauch... Kann mir jemand weiterhelfen?
Danke für eure Hilfe!

Euer
Hank Scorpio ;)
 

Michael...

Top Contributor
Grundsätzlich stellt sich für mich die Frage, warum man das über zwei Frames abbilden will. Könnte nicht einfach der Inhalt des ersten Frames von der Menüanzeige zu Vergangsanzeige wechseln, siehe CardLayout.
Falls man auf die zwei Frames nicht verzichten will: Einfach einen WindowListener an den zweiten Frame, wenn dieser geschlossen wird macht er den ersten Frame wieder sichtbar, oder einen Button mit ActionListener darauf der den zweiten Frame unsichtbar macht oder schließt und den ersten sichtbar macht.
 

HankScorpio

Mitglied
Danke für die schnelle Hilfe!

Einfach einen WindowListener an den zweiten Frame, wenn dieser geschlossen wird macht er den ersten Frame wieder sichtbar, oder einen Button mit ActionListener darauf der den zweiten Frame unsichtbar macht oder schließt und den ersten sichtbar macht.

Eine Rückfrage noch: Dazu müssten dann alle JFrames, die "Vorgangsframe" extenden, z.B. im Konstruktor eine Referenz auf den Hauptmenü-JFrame erhalten, oder? Dann könnten die darüber in einem Action-/WindowListener diesen Frame wieder auf Visible<-true setzen und daraufhin sich selber auf Visible<-false oder versteh ich das falsch?

Wenn ich das so mache und Folgendes passiert ist:
  • Im Hauptmenü wird ein Vorgang aufgerufen. Daraus folgt:
    Java:
    private void zeigVorgangsfenster () {
      setVisible(false);  // Hauptmenü ausblenden
      BlaFrame vorgangsFenster = new BlaFrame(this);  // this == der Hauptmenü-JFrame
      vorgangsFenster.setVisible(true); // Jetzt müsste man im vorgangsFenster arbeiten können.
    }
  • Nach getaner Arbeit im "Unter-Frame":
    Java:
    private void zurueckZumHauptmenue () {
      setVisible(false);  //Vorgangs-Frame ausblenden
      refHauptmenue.setVisible(true);
    }
  • Benutzer ist wieder im Hauptmenü.
Wird jetzt der unsichtbare vorgangsFenster-Frame vom Garbage Collector getilgt, sobald die Hauptmenü-Methode "zeigVorgangsfenster" verlassen wird, in der dieses Frame-Objekt erzeugt wurde (mit new)? Die Referenz auf den Unterframe wäre ja eigentlich nur im Scope der Methode gültig. Der wird verlassen, also wäre der vorgangsFenster-Frame aus dem Speicher weg, sobald man wieder im Hauptmenü ist, oder? Oder bleibt der unsichtbar irgendwie hängen, solange das von ihm wieder sichtbar geschaltete Hauptmenü läuft?

Uff, kompliziert. Ich hoffe, das ist einigermaßen zu verstehen, was ich noch nicht ganz verstehe... :D
 

Michael...

Top Contributor
Eine Rückfrage noch: Dazu müssten dann alle JFrames, die "Vorgangsframe" extenden, z.B. im Konstruktor eine Referenz auf den Hauptmenü-JFrame erhalten, oder?
Nein, nicht unbedingt bzw. nicht unbedingt so direkt. Man könnte auch in oder über den Hauptframe einen Listener definieren und diesen an die neu erzeugten Vorgangsframes übergeben.

Wobei ich persönlich das in einem Frame und mittels CardLayout implementieren würde.
Wird jetzt der unsichtbare vorgangsFenster-Frame vom Garbage Collector getilgt, sobald die Hauptmenü-Methode "zeigVorgangsfenster" verlassen wird, in der dieses Frame-Objekt erzeugt wurde (mit new)? Die Referenz auf den Unterframe wäre ja eigentlich nur im Scope der Methode gültig. Der wird verlassen, also wäre der vorgangsFenster-Frame aus dem Speicher weg, sobald man wieder im Hauptmenü ist, oder? Oder bleibt der unsichtbar irgendwie hängen, solange das von ihm wieder sichtbar geschaltete Hauptmenü läuft?
Um ein Fenster "komplett" zu schließen und alle Resourcen freizugeben gibt es die Methode dispose()
 

HankScorpio

Mitglied
Nein, nicht unbedingt bzw. nicht unbedingt so direkt. Man könnte auch in oder über den Hauptframe einen Listener definieren und diesen an die neu erzeugten Vorgangsframes übergeben.
Ich hab jetzt mal ein bisschen experimentiert, aber das versteh ich noch nicht ganz. :/ Welche Vorteile hätte das gegenüber dem Weiterreichen einer Referenz auf den ganzen Hauptmenü-Frame? Oder wie müsste der Listener aussehen, den man an die neuen Vorgangs-Frames übergibt?

Also ich könnte mir vorstellen, im Vorgangsframe einen WindowListener auf diesen neuen Frame einzubauen, der bei windowClosed automatisch den Haupt-Frame wieder sichtbar macht, aber dafür bräuchte ich ja auch eine Referenz auf den Hauptmenü-JFrame. Sonst komme ich ja nicht an die Methode setVisible?

Danke auf jeden Fall schon mal für die Tipps bisher!!
 

bERt0r

Top Contributor
Naja, du kannst ja vom Hauptframe aus auf den "Kindframe" Kindframe.addWindowListener() machen.
Edit: Und ich schließe mich Michael an, ich würde das auch mit einem CardLayout machen.
 
Zuletzt bearbeitet:

jgh

Top Contributor
auch ich schließe mich den Vorredner an...eine Anwendung, ein Frame!

aber und am Anfang scheint(ist) es wahrscheinlich einfacher (zu sein)...
Ich habe meine ersten Applicationen auch mit vielen Frames realisiert. Dafür hatte ich mir eine FrameManagerKlasse geschrieben, die dann die "Logik", wann welcher Frame geöffnet wird, welcher geschlossen wird und was sonst so passieren soll, implementierte. Diese Klasse bekam alle "Frames" übergeben und bot statische Methoden zum disposen, toFront, und was weiß ich noch....
In den entsprechenden Listener (closeFrame) musste dann der FrameManager über statischen Methoden informiert werden und entsprechend reagieren.

Irgendwann wirst du sehen, dass ein Frame für eine Anwendung ausreicht...aber bis dahin ist es zumindest eine Möglichkeit mehr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
S Wechsel zwischen JFrame und JDialog durch Benutzerauswahl AWT, Swing, JavaFX & SWT 2
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
T Scene-Wechsel manchmal weiss AWT, Swing, JavaFX & SWT 3
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
I JavaFX-Scene-Überlagerung/Wechsel mit pausieren der anderen Scene AWT, Swing, JavaFX & SWT 0
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
S JavaFX Pane Wechsel AWT, Swing, JavaFX & SWT 1
H Drag-Evente nach Container wechsel AWT, Swing, JavaFX & SWT 2
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
R Wechsel bei der GUI funktioniert nicht AWT, Swing, JavaFX & SWT 3
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
D jtabbedpane Event VOR tab-Wechsel AWT, Swing, JavaFX & SWT 3
U JPanel wechsel in JApplet AWT, Swing, JavaFX & SWT 14
B Focusverhalten und wechsel des KeyboardFocusManagers AWT, Swing, JavaFX & SWT 6
E Swing Wechsel in JCheckBox abfangen AWT, Swing, JavaFX & SWT 10
S Swing JTabbedPane: Resize des JFrame bei Tab wechsel AWT, Swing, JavaFX & SWT 8
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
D Wechsel der Komponenten im MainFrame . AWT, Swing, JavaFX & SWT 3
B JTable - Wechsel der Spalte bei TAB, RETURN oder Maus AWT, Swing, JavaFX & SWT 5
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
D Wechsel in Taskleiste führt zu verschwninden von Dialog AWT, Swing, JavaFX & SWT 18
Z Look&Feel-Wechsel bringt mein GUI durcheinander AWT, Swing, JavaFX & SWT 5
M JavaFX Abstand zwischen AnchorPane und Labels in dem HBox halten AWT, Swing, JavaFX & SWT 1
U 2dgraphics unterschied zwischen .scale und AffineTransform.getScaleInstance AWT, Swing, JavaFX & SWT 4
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
missy72 JavaFX TableView Spalte zwischen den Zeilen AWT, Swing, JavaFX & SWT 5
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
M Kommunikation zwischen zwei Stages AWT, Swing, JavaFX & SWT 0
T JavaFX - Datenübergabe zwischen Scenes AWT, Swing, JavaFX & SWT 8
S JavaFX Unterschiede zwischen Scene Builder 2.0 und der ausgeführten App AWT, Swing, JavaFX & SWT 17
Informatiknoob AWT Zahlenraten (eine Zahl zwischen 1 und 10) AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
ralfb1105 JavaFX Daten zwischen Controller "austauschen" AWT, Swing, JavaFX & SWT 65
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Arif AWT Unterschied zwischen RED und red AWT, Swing, JavaFX & SWT 4
D Swing Kommunikation zwischen zwei GUI's AWT, Swing, JavaFX & SWT 2
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
K Wie kann ich eine Variable zwischen Tab Klassen weitergeben ? AWT, Swing, JavaFX & SWT 7
S JavaFX (Best Practise) Daten zwischen Controllern austauschen AWT, Swing, JavaFX & SWT 1
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
S Verzögerung zwischen Cursorbewegung einbauen AWT, Swing, JavaFX & SWT 1
3 Swing Vertikaler Separator zwischen JMenu's AWT, Swing, JavaFX & SWT 2
D JGridLayout zwischen Zeilen bestimmter Abstand AWT, Swing, JavaFX & SWT 3
S Unterschied zwischen id und fx:id AWT, Swing, JavaFX & SWT 5
F Swing JAVA GUI Übergabe von Werten zwischen mehreren Fenstern/Klassen AWT, Swing, JavaFX & SWT 10
B Datenübergabe zwischen Tabs und Daten speichern AWT, Swing, JavaFX & SWT 2
B Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben AWT, Swing, JavaFX & SWT 4
B Linie zwischen 2 Elementen AWT, Swing, JavaFX & SWT 5
D animierte kameraansicht zwischen gezeichneten objekten AWT, Swing, JavaFX & SWT 4
B Swing JMenu zwischen anderen Componenten AWT, Swing, JavaFX & SWT 4
F Swing Ladebildschirm zwischen zwei SWING Frames AWT, Swing, JavaFX & SWT 11
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
GUI-Programmer JWindow zwischen den Desktopbild und Dektopverknüpfungen AWT, Swing, JavaFX & SWT 16
Psypsy Swing SwingWorker unterschied zwischen setProgress und process AWT, Swing, JavaFX & SWT 2
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
A Daten umherschieben zwischen zwei Klassen AWT, Swing, JavaFX & SWT 40
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
B LayoutManager Positionierung zwischen zwei Layoutkomponenten AWT, Swing, JavaFX & SWT 2
N Swing DnD zwischen zwei JTrees AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
D JTabel: Überschrift, Abstand zwischen Tabellen, Spalten-Farbe ändern AWT, Swing, JavaFX & SWT 2
G Swing MigLayout: Lücken zwischen Elementen entfernen AWT, Swing, JavaFX & SWT 2
F Variablen zwischen Frames AWT, Swing, JavaFX & SWT 5
V Swing JLabel zwischen 2 JPanel hin- und herbewegen. AWT, Swing, JavaFX & SWT 12
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
M SWT DND zwischen zwei TreViewern in beide Richtungen AWT, Swing, JavaFX & SWT 10
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
P Swing Beziehungen zwischen 3 Klassen AWT, Swing, JavaFX & SWT 4
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
S Schnittstelle zwischen Haupt und Nebenfenster AWT, Swing, JavaFX & SWT 17
algorismi Unterscheiden zwischen zwei JLists AWT, Swing, JavaFX & SWT 5
F JCombobox zwischen setEditable true und false switchen AWT, Swing, JavaFX & SWT 2
I Swing JPanel Tab zwischen GUI Elementen AWT, Swing, JavaFX & SWT 6
L Swing Kommunikation zwischen JMenuBar und anderen Componenten AWT, Swing, JavaFX & SWT 2
data89 Verbindungslinien zwischen Formen auf einer "Zeichenfläche" AWT, Swing, JavaFX & SWT 2
DeeDee0815 SWT Text Widget: Zwischen Single und Password umschalten AWT, Swing, JavaFX & SWT 3
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
G Variblenwert zwischen zwei Klassen übergeben AWT, Swing, JavaFX & SWT 3
G Gap zwischen JButton-Rand und JButton-Icon verändern AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen Zwei GUI-Klassen AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen zwei jFrames AWT, Swing, JavaFX & SWT 4
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
S Abstand zwischen Labeln auf 0 setzen AWT, Swing, JavaFX & SWT 6
J Unterschied zwischen nicht-statischen und statischen Klassen AWT, Swing, JavaFX & SWT 5
G Datenaustausch zwischen zwei JFrames AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben