Panel im BorderLayout South wird nicht angezeigt

bluerob

Mitglied
Hallo Com,

ich habe das Problem, dass ein Panel, welches ich in ein anderes Panel eingefüge, welches das BorderLayout besitzt, nicht angezeigt wird.

Erst einmal der Aufbau:
Ich füge in ein JFrame ein JPanel mit BorderLayout ein.
Das Panel bekommt in die North-Postionen ein JPanel welches als menuBar dient.
Auf die West-Postion kommt ein weiteres Panel, genauso wie auf die East-Position.
Das East-Panel macht mir die Probleme. Der Name von dem Panel ist playerPanel.

Das playerPanel hat auch das BorderLayout. Damit die Center-Postion nicht lang gezogen wird (hier soll das playerListPanel rein), setzte ich in die North, East, South und West Positionen leere JPanels.
Es werden alle Panels, außer das in der South-Position angezeigt.

Ich hatte die Vermutung, dass es vielleicht daran liegt, dass das playerPanel unten aus dem Bildschirm herausgeht. Wenn man aber nachrechnet, stimmen alle Zahlen.

Ich hoffe ihr konnt mir helfen!

Java:
public void makePlayerField(){
        int playerFieldWidth = getWidth()/2;
        int playerFieldHeight = getHeight()-menuBarHeight;
        int playerFieldBorderLength = getWidth()/250;

        int playerListPanelWidth = 3*playerFieldWidth/4;
        int playerListPanelHeight = 6*playerFieldHeight/7;
        int playerListBorderLength = getWidth()/250;

        int playerFieldWidthSpace = playerFieldWidth-playerListPanelWidth;
        int playerFieldHeightSpace = playerFieldHeight-playerListPanelHeight;

        //PlayerField
        JPanel playerField = new JPanel();
        playerField.setBackground(Color.green);
        playerField.setLayout(new BorderLayout());
        playerField.setPreferredSize(new Dimension(playerFieldWidth, playerFieldHeight));
        playerField.setBorder(new MatteBorder(0,0,playerFieldBorderLength,playerFieldBorderLength,Color.BLACK));
        playerField.setOpaque(false);
        add(BorderLayout.EAST, playerField);

        //PlayerFieldSpacePanels
        JPanel playerFieldSpaceWest = new JPanel();
        playerFieldSpaceWest.setPreferredSize(new Dimension(playerFieldWidthSpace/2, 0));
        playerFieldSpaceWest.setBackground(Color.pink);
        playerField.add(BorderLayout.WEST, playerFieldSpaceWest);

        JPanel playerFieldSpaceEast = new JPanel();
        playerFieldSpaceEast.setPreferredSize(new Dimension(playerFieldWidthSpace/2, 0));
        playerFieldSpaceEast.setBackground(Color.pink);
        playerField.add(BorderLayout.EAST, playerFieldSpaceEast);

        JPanel playerFieldSpaceBottom = new JPanel();
        playerFieldSpaceBottom.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
        playerFieldSpaceBottom.setBackground(Color.pink);
        playerField.add(BorderLayout.SOUTH, playerFieldSpaceBottom);

        JPanel playerFieldSpaceTop = new JPanel();
        playerFieldSpaceTop.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
        playerFieldSpaceTop.setBackground(Color.pink);
        playerField.add(BorderLayout.NORTH, playerFieldSpaceBottom);

        //PlayerList
        JPanel playerListPanel = new JPanel();
        playerListPanel.setPreferredSize(new Dimension(playerListPanelWidth, playerListPanelHeight));
        playerListPanel.setBorder(new MatteBorder(playerListBorderLength, playerListBorderLength, playerListBorderLength, playerListBorderLength, Color.black));
        playerListPanel.setBackground(Color.red);
        playerField.add(BorderLayout.CENTER, playerListPanel);
    }
 
S

SlaterB

Gast
> JPanel playerFieldSpaceBottom = new JPanel();
> playerFieldSpaceBottom.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
> playerFieldSpaceBottom.setBackground(Color.pink);
> playerField.add(BorderLayout.SOUTH, playerFieldSpaceBottom);

> JPanel playerFieldSpaceTop = new JPanel();
> playerFieldSpaceTop.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
> playerFieldSpaceTop.setBackground(Color.pink);
> playerField.add(BorderLayout.NORTH, playerFieldSpaceBottom);


manchmal ist weniger mehr, eine Variable p, mehrmals verwendet, mit neuen Panel befüllt,

wann wird das eigentlich aufgerufen? vor setVisible(true) hoffentlich und dann sind Aufrufe a la getWidth() eher fraglich
 
Zuletzt bearbeitet von einem Moderator:

bluerob

Mitglied
> JPanel playerFieldSpaceBottom = new JPanel();
> playerFieldSpaceBottom.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
> playerFieldSpaceBottom.setBackground(Color.pink);
> playerField.add(BorderLayout.SOUTH, playerFieldSpaceBottom);

> JPanel playerFieldSpaceTop = new JPanel();
> playerFieldSpaceTop.setPreferredSize(new Dimension(0, playerFieldHeightSpace/2));
> playerFieldSpaceTop.setBackground(Color.pink);
> playerField.add(BorderLayout.NORTH, playerFieldSpaceBottom);

oh, hab vergessen, dass zurück zu ändern. hatte damit ausprobiert, ob es am panel liegt.
wenn ich das richtige Panel einfüge funktioniert es trotzdem nicht.

wann wird das eigentlich aufgerufen? vor setVisible(true) hoffentlich und dann sind Aufrufe a la getWidth() eher fraglich

mein JFrame mache ich zu FullScreenWindow. danach rufe ich eine methode generalOptions() auf, in welcher methoden für alle voreinstellungen aufgerufen werden, wie z.b. die, die ich gepostet habe.
 
S

SlaterB

Gast
ein vollständiges Testprogramm ist gerade bei GUI extrem wichtig, jede weitere Einstellung im Layout außen rum
kann Millionen Code-Zeilen obsolet machen

wenn die GUI nachträglich geändert wird, dann
validate();
repaint();
am JFrame aufrufen

> Es werden alle Panels, außer das in der South-Position angezeigt.
klingt allerdings weniger nach allgemeinen Problemen als genau einem spezifischen

da der Fehler auch bei mir zu sehen und dann genau zu entfernen war bin ich jetzt etwas ratlos,
so genau kann kaum was anderes schuld sein, oder meinst du mit
> wenn ich das richtige Panel einfüge funktioniert es trotzdem nicht.
einen anderen Fehler nun?

vielleicht hilft kompletter Code von dir,
hier ein vollständiges Testprogramm von mir, spasseshalber auch mit meinem p-Vorschlag,
und da bei mir am Anfang eingefügt ohne getWidth() & Co.

Java:
public class TestGUI
    extends JFrame
{
    public TestGUI()
    {
        makePlayerField();

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        setVisible(true);
    }

    public void makePlayerField()
    {
        int playerFieldWidth = 200;
        int playerFieldHeight = 100;
        int playerFieldBorderLength = 5;

        int playerListPanelWidth = 3 * playerFieldWidth / 4;
        int playerListPanelHeight = 6 * playerFieldHeight / 7;
        int playerListBorderLength = 5;

        int playerFieldWidthSpace = playerFieldWidth - playerListPanelWidth;
        int playerFieldHeightSpace = playerFieldHeight - playerListPanelHeight;

        // PlayerField
        JPanel playerField = new JPanel();
        playerField.setBackground(Color.green);
        playerField.setLayout(new BorderLayout());
        playerField.setPreferredSize(new Dimension(playerFieldWidth, playerFieldHeight));
        playerField.setBorder(new MatteBorder(0, 0, playerFieldBorderLength, playerFieldBorderLength, Color.BLACK));
        playerField.setOpaque(false);
        add(BorderLayout.EAST, playerField);

        // PlayerFieldSpacePanels
        JPanel p = new JPanel();
        p.setPreferredSize(new Dimension(playerFieldWidthSpace / 2, 0));
        p.setBackground(Color.pink);
        playerField.add(BorderLayout.WEST, p);

        p= new JPanel();
        p.setPreferredSize(new Dimension(playerFieldWidthSpace / 2, 0));
        p.setBackground(Color.pink);
        playerField.add(BorderLayout.EAST, p);

        p = new JPanel();
        p.setPreferredSize(new Dimension(0, playerFieldHeightSpace / 2));
        p.setBackground(Color.pink);
        playerField.add(BorderLayout.SOUTH, p);

        p = new JPanel();
        p.setPreferredSize(new Dimension(0, playerFieldHeightSpace / 2));
        p.setBackground(Color.pink);
        playerField.add(BorderLayout.NORTH, p);

        // PlayerList
        JPanel playerListPanel = new JPanel();
        playerListPanel.setPreferredSize(new Dimension(playerListPanelWidth, playerListPanelHeight));
        playerListPanel.setBorder(new MatteBorder(playerListBorderLength, playerListBorderLength, playerListBorderLength,
                                                  playerListBorderLength, Color.black));
        playerListPanel.setBackground(Color.red);
        playerField.add(BorderLayout.CENTER, playerListPanel);
    }

    public static void main(String[] args)
    {
        new TestGUI();
    }

}
 

bluerob

Mitglied
Wow, es liegt wirklich an dem getWidth(), bzw. getHeight();

Ich habe mein Programm jetzt so umgeschrieben, dass ich mein JFrame erst als FullScreenWindow setzte und danach meiner Klasse, in welcher alles gezeichnet wird, width und height von FullScreenWindow übergebe.
Die Methode benutzt dann die übermittelten Werte und alles klappt :)

Java:
public class LayoutPanel extends JPanel{

    private int windowWidth;
    private int windowHeight;

    public void makePlayerField(){
        int playerFieldWidth = windowWidth/2;
        int playerFieldHeight = windowHeight-menuBarHeight;
        int playerFieldBorderLength = windowWidth/250;

    ...
    }

aber warum ist es schlimm getWidth(), bzw. getHeight() zu benutzen?

Danke für deine Hilfe! :)
 
S

SlaterB

Gast
schau dir doch die abgefragten Werte an,
je nach Zeitpunkt, etwa vor setVisible(true)/ vor Einfügen eines Panel in laufende GUI, ist noch nichts zu sehen, ergo gibts keine width usw.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
D BorderLayout.Center mit 3 Panel und dynamischer Größe AWT, Swing, JavaFX & SWT 2
J BorderLayout / 1 Panel in Mitte und 1 Panel im Osten anordne AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel-Unterklasse funktioniert nicht AWT, Swing, JavaFX & SWT 16
A Panel zu klein AWT, Swing, JavaFX & SWT 14
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben