JPanels in JFrame einfügen

javama

Erfahrenes Mitglied
hallo,
ich habe ein JFrame (Hauptfenster), in diese hauptfenster sollen JPanels eingefügt werden,
wenn ich das programm ausführe, bekomme ich das Hauptfenster mit den AuswahlPanel mit 4 Buttons (gridlayout), jeder Button ist für ein Panel verantwortlich, dass heisst wenn ich ein Button1 anklicke wird Panel1 angezeigt innerhalb von meiner Frame.

ich habe auch ein ButtonZurück (borderlayout.South) um zu dem Hauptauswahl zurückzukehren.

Mein problem jetzt wenn ich das Programm ausführe und Button1 klicke, bekomme ich
panel1, und wenn ich zum Hauptauswahl anhand buttonZurück zurückkehre und dann Button2 anklicke bekomme ich wieder Panel1.

wenn ich die anwendung schliesse und wieder ausführe, jetzt wenn ich Button2 klicke, bekomme ich panel2, und wenn ich zum Hauptauswahl anhand buttonZurück zurückkehre und dann Button1 anklicke bekomme ich wieder Panel2.

hat jemand eine Idee woran das liegen kann****?
danke im voraus
 
Meine Kristallkugel sagt mir... oehm.. nix..
Bisschen Code (in java-Tags) waere hilfreich :)
 
Hm die haelfte von meinem Post einfach ueberlesen oder nicht verstanden?
Nochmal, BITTE in java-tags (siehe meine Signatur)
 
Also ... nach dem ich mir den Code nun mit Notepad2 erstmal ordentlich formatiert und Syntax-Highlighting aktiviert habe bin ich mal so über den Code geflogen.

1) KEIN Compile-bares Beispiel ... wir können leider nicht testen was da kaputt ist wenn du uns nicht den gesamten Source postest ... oder zumindest so viel das man das ganze auch compilen kann ...
2) Deine public void arbeitsfaecheBereinigen hat sowas von wenig Sinn. Warum gehst du mit einer for-Schleife alle Elemente durch wenn du eh Container.removeAll() aufrufst ? ... Das kannst du auch ohne die for-Schleife.
3) Eine MenuBar braucht man nicht mit einem BorderLayout an den oberen Rand kleben ... dafür gibt es die Methode java.awt.Frame.setMenuBar(MenuBar) bzw javax.swing.JFrame.setJMenuBar(JMenuBar)
4) Der vermeintliche Fehler ist das du arbeitsfleache.setVisible(false) aufrufst und danach aber etwas zum Container addest ... wenn du nun zurück gehst setzt du die alte arbeitsflaeche wieder auf true und addest aber nun noch eine weitere. Du solltest hier also wirklich erstmal den Container mit removeAll() aufräumen
5) Verwende beim nächsten Post bitte [code=java]CODE[/code]-codetags und poste bitte den GESAMTEN RELEVANTEN Source damit man es auch mal zum test Compilen kann.
 
Zuletzt bearbeitet von einem Moderator:
Du fügst zwar die Panels immer schön hinzu, aber wo entfernst du die vorherigen wieder?

Es gibt jedoch auch Möglichkeiten die Panels in verschiedenen Ebenen anzuordnen und diese je nach dem in den Vordergrund bzw in den Hintergrund zu rücken. Schau dir z.B. mal die JLayeredPane an...
 
5) Verwende beim nächsten Post bitte [code=java]CODE[/code]-codetags und poste bitte den GESAMTEN RELEVANTEN Source damit man es auch mal zum test Compilen kann.

Ohne code-tags sollte man sich den Code gar nicht anschauen, so lernen es die Leute nie, aber wenn ihr euch das antun wollt bitte ^^
Der relevante Code ist eigentlich nur der des hinzufuegens/entfernen und wechseln der Panel, falls dieser nicht ausreicht, kann man immer noch mehr posten lassen, bevor nachher 20k Zeilen Code hier stheen ;)
 
@HonniCilest
JLayeredPane ist zwar eine sehr resourcensparende Variante ... allerdings zu kompliziert da alle MouseEvents die nicht auf ein Objekt gehen das MouseListener implementiert so lange zum nächsten darunterliegenden Objekts durchgereicht werden bis es auf eine Component trifft die MouseListener implementiert ... also im Falle des Beispieles würde dann ein MouseEvent an das JPanel mit den JButtons weitergereicht wenn nicht jedes JPanel extra MouseListener implementiert und damit das weiterreichen blockiert. Von daher für TO eine eher schlechte wahl.

@MiMi
Das die relevanten Zeilen nur das Hinzufügen und das fehlende Entfernen der JPanels ist ist mir auch klar. Und Source der nicht in Codetags steht gucke ich mir in der Regel auch nicht an, aber ich wollte TO darauf hinweisen das wenn er schon Code postet dieser auch compile-bar sein sollte ... Das es sich bei uns gehört Source in die entsprechenden Codetags zu posten weiß ich doch auch ... es war aber nicht die Kernaussage meines Posts.
 
Wenn ich das jetzt richtig verstehe, willst du mir sagen, dass die Buttons auch aktiviert werden würden, wenn der entsprechende Layer nicht im Vordergrund ist? Das wusste ich nicht, wenn du wirklich so ist will ich nix gesagt haben ;)
 

Neue Beiträge

Zurück