AWT mehrere Panels in einem Frame

fred741

Mitglied
Hallo!

Wir haben in der uni vor kurzem AWT (nicht SWING!!!) in der uni angestochen, und der dozent meinte, dass er AWT beispiele gerne zu klausuren bringen würde. Anhand von alten klausuren kann ich dies auch bestätigen :D:D

B2T: Ich wollte soeben 2 Panels in einer Klasse, die Frame erweitert anordnen.
Jedoch zeigt es mir immer nur eines davon auch wirklich am screen an.
Wie bekomme ich es her, dass sowohl "myPanel" als auch "myPanel2" sichtbar sind?


anbei mein java code
Java:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;

public class MyWindow extends Frame {
    public MyWindow(){
        Panel myPanel = new Panel();
        myPanel.setLayout(new FlowLayout()); 
     
        Panel myPanel2 = new Panel(); 
        myPanel2.setLayout(new GridLayout(20, 4));     
     
        Button b1 = new Button("OK");
        Button b2 = new Button("Close");
        Button b3 = new Button("Back");
        Button b4 = new Button("Tester");
        Button b5 = new Button("2.Tester");
     
        myPanel.add(b1);
        myPanel.add(b2);
        myPanel.add(b3);

        myPanel2.add(b4);
        myPanel2.add(b5);
     
        this.add(myPanel);
        this.add(myPanel2);
 
    
    }
}

--- neue unabhängige klasse:

public class Starter {
    public static void main(String[] args) {
        MyWindow frame = new MyWindow();
        frame.pack();
        frame.setVisible(true);
    }
}
f8127b-1499976132.png
ich danke euch schon mal für eure hilfe
 

DaCrazyJavaExpert

Bekanntes Mitglied
Probier mal die beiden Panels auch in ein Layout zu packen, bespielsweisr ein FlowLayout. Oder setze mal deine Fenstergröße selber(mit setSize(int x, int y), anstatt die pack() Methode zu nutzen. Oder versuch beides in Kombination. Mir scheint es so, als würden die Panels übereinanderliegen oder nebeneinander im "verborgenen" Bereich
 

fred741

Mitglied
ich danke dir für die schnelle antwort, jedoch wird das 2. panel trotzdem nicht angezeigt.

ich habe wie du gesagt hast den folgenden Code:
Java:
myPanel.setLayout(new FlowLayout());
myPanel2.setLayout(new GridLayout(20, 4));

in diesen abgeändert:
Java:
myPanel.setLayout(new FlowLayout());
myPanel2.setLayout(new FlowLayout());
,das pack() entfernt und stattdessen frame.setSize(800,400);
eingefügt.

Das ergebnis bleibt außer der größenänderung das selbe.

mfg fred[/code]
 

Robat

Top Contributor
Du musst deinem Frame einen anderen Layoutmanager mitgeben, nicht den Panels.

Das bei dir nur ein Panel angezeigt wird liegt weder an dem pack() noch an der Größe deines Fensters.
Der Default-Layoutmanager von einem Frame ist ein BorderLayout. Wird bei einem BorderLayout die add() Methode ohne zweiten Parameter aufgerufen, wird automatisch die Komponente ins CENTER gesetzt.
Die einzelnen Abschnitte eines BorderLayouts (NORTH, SOUTH, EAST, WEST, CENTER) können aber nur jeweils eine Komponente haben. Wenn man mehrere hinzufügt, wird die vorherige Komponente überschrieben (rausgeschmissen). Da du beide male die add() Methode ohne Parameter aufrufst, wird beim 2. mal dein 1. Panel überschrieben.
 

Meniskusschaden

Top Contributor
Wenn du die Anordnung der beiden Panels beeinflussen willst, bringt es nicht so viel, deren LayoutManager zu verändern, sondern du musst dich mit dem LayoutManager der Komponente beschäftigen, in der sich die beiden Panels befinden. Aktuell müsste das das BorderLayout sein. Du kannst ja mal testweise die Zeile für MyPanel wie folgt ändern:
this.add(myPanel, BorderLayout.SOUTH);
 

fred741

Mitglied
Vielen Dank für die vielen schnellen Antworten, der fehler ist behoben :cool:
Es lag wie Robat und Meniskusschaden schrieben wohl am nicht festgelegten standardlayoutmanager der klasse frame, sodass das 2. Panel immer das 1. überlagert hat.

Für alle, die später ähnliche Probleme mit mehreren Panels oä in einer Klasse haben befindet sich im Folgendem die laufende version des programms:

Java:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;

public class MyWindow extends Frame {
    public MyWindow(){
     
        // LayoutManager hinzufügen, der die Anordnung der
          // einzelnen Komponenten (hier Panels) bestimmt.
        setLayout(new FlowLayout());    //////   <-- hier lag der Fehler
     
        // erzeuge Panels und weise ihnen einen Layoutmanager zu:
        Panel myPanel = new Panel();
        myPanel.setLayout(new FlowLayout()); 
     
        Panel myPanel2 = new Panel(); 
        myPanel2.setLayout(new GridLayout(4,1));     
     
        // erstelle Buttons:
        Button b1 = new Button("OK");
        Button b2 = new Button("Close");
        Button b3 = new Button("Back");
        Button b4 = new Button("1.Tester");
        Button b5 = new Button("2.Tester");
     
        // dem 1. Panel 3 Buttons anhängen:
        myPanel.add(b1);
        myPanel.add(b2);
        myPanel.add(b3);
     
        // dem 2. Panel 2 Buttons anhängen:
        myPanel2.add(b4);
        myPanel2.add(b5);
     
        // Panel der Klasse MyWindow anhängen:
        this.add(myPanel);
        this.add(myPanel2);
     
    }
}
// neue Klasse
public class Starter {
    public static void main(String[] args) {
        MyWindow frame = new MyWindow();
        frame.setSize(800,400);
        frame.setVisible(true); 
    }
}

2 kleine fragen hätte ich aber noch:
* zum einen ob ich es richtig verstanden habe, dass der LayoutManager in der 1.Zeile des Konstruktors der Klasse Frame gilt, die ja von mir erweitert wird;
*und zum anderen inwiefern das THIS vom this.add(myPanel) sinnvoll ist oder ob man es generell weglassen soll.

Ich bedanke mich nochmal speziell bei @Robat und auch bei @Meniskusschaden .
Mit zufriedenen Grüßen,
Fred :)

EDIT: hier findet ihr quasi dasselbe programm, leider fandich das 1h zu spät und ich musste euch mit meiner frage beglücken
https://way2java.com/awt-components/java-awt-panels/
 
Zuletzt bearbeitet:

Robat

Top Contributor
Es lag wie Robat und Meniskusschaden schrieben wohl am nicht festgelegten standardlayoutmanager der klasse frame
Ich habe nie geschrieben dass die Frame-Klasse keinen Layoutmanager standartmäßig festlegt ;)

* zum einen ob ich es richtig verstanden habe, dass der LayoutManager in der 1.Zeile des Konstruktors der Klasse Frame gilt, die ja von mir erweitert wird;
Wenn du damit fragen willst, ob so ein Layoutmanager gesetzt wird: Ja

*und zum anderen inwiefern das THIS vom this.add(myPanel) sinnvoll ist oder ob man es generell weglassen soll.
Sinnvoll oder nicht. Nun ja - geschmackssache würde ich mal sagen. Ich schreibs so gut wie nie.

Nebenbei mal was Off-Topic:
In deinem Usecase von Frame zu erben ist mMn bad-practise. Man sollte nur von einer Klasse erben wenn man dessen Funktionalität erweitern will. Das machst du aber nicht. Es reicht vollkommen aus eine Instanz von Frame zu erstellen und darüber die Methoden auf zu rufen. Du machst dir ja auch nicht für jeden String eine eigene Klasse ;)
 

Flown

Administrator
Mitarbeiter
War ein Beispiel? Aber man sieht dieses Pattern am Häufigsten bei Konstruktoren und settern (hmm man könnte sagen bei DI oder bei parameterübergaben - auch bei normalen Methoden möglich)
Java:
class Box<T> {
  private T value;
  public Box(T value) {
    this.value = value; // <-- häufig
  }

  public void setValue(T value) {
    this.value = value; // <-- auch häufig
  }
}
 

Flown

Administrator
Mitarbeiter
Äh was? Post #12?

Edit: Der Satz passt schon so! Ich sagte WO man es braucht und nicht WARUM man es braucht.
WO: Konstruktor, Methoden, Subklassen, ... (mehr fällt mir gerade nicht ein)
WARUM: Shadowing
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Post #12 hatte ich dir bestätigt. ;);) da warst du aber auch irgendwie nicht zufrieden mit.
Dann habe ich dir erläutert warum ein Konstruktor kein Beispiel dafür ist. Du könntest ja genau so gut schreiben: "... - z.B. überall", gemeint hattest du aber "... z.B. um Shadowing zu vermeiden"
 

Flown

Administrator
Mitarbeiter
Wow wir reden aneinander vorbei ... :rolleyes:

TL;DR: this wird explizit verwendet um Shadowing zu vermeiden und konkrete Instanzen (z.B. äußere Instanz) direkt anzusprechen bei inneren Klassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
H Frames oder Panels für mehrere Ansichten? AWT, Swing, JavaFX & SWT 4
T GUI Steuerung (mehrere Panels) AWT, Swing, JavaFX & SWT 5
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben