简体   繁体   中英

JPanel not shown properly

So, I'm starting with the basic visual Java components, and have trouble to use them accurately.

Here is my new problem: I'm trying to implement a 3 parts panel: east, center, west, but can't have a proper display of the center panel. Here is my piece of code:

Basically 'panelUpMiddle' isn't visible, so I wonder why?...

public class TestCode_Web {


public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 400);

    JPanel innerPanel = new JPanel(new BorderLayout());     
    JPanel panelUp = new JPanel(new BorderLayout());

    JPanel panelUpLeft = new JPanel();
    JPanel panelUpMiddle = new JPanel();

    window.add(innerPanel, BorderLayout.NORTH);     
    innerPanel.add(panelUp, BorderLayout.NORTH);

    panelUp.add(panelUpLeft, BorderLayout.WEST);
    panelUp.add(panelUpMiddle, BorderLayout.CENTER);

    JLabel label1 = new JLabel("Label 1");

    JLabel label11 = new JLabel("Label 11");
    JLabel label12 = new JLabel("Label 12");

    panelUp.add(label1);
    panelUpLeft.add(label11);       
    panelUpMiddle.add(label12);     

    panelUp.setBackground(new Color(200, 240, 200));

    panelUpLeft.setBackground(new Color(200, 240, 0));
    panelUpMiddle.setBackground(new Color(100, 240, 200));

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));        
    panelUpLeft.setPreferredSize(new Dimension(160, 120));

    window.setVisible(true);
}

}

Try this code. I updated the naming of the panels and the labels so it is more clear.

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 400);

    JPanel centerPanel = new JPanel(new BorderLayout());     
    JPanel eastPanel = new JPanel(new BorderLayout());
    JPanel westPanel = new JPanel(new BorderLayout());

    window.add(centerPanel, BorderLayout.CENTER);     
    window.add(eastPanel, BorderLayout.EAST);
    window.add(westPanel, BorderLayout.WEST);

    JLabel centerLabel = new JLabel("Center");
    JLabel eastLabel = new JLabel("East");
    JLabel westLabel = new JLabel("West");

    eastPanel.add(eastLabel);
    westPanel.add(westLabel);       
    centerPanel.add(centerLabel);

    centerPanel.setPreferredSize(new Dimension(200, 400));
    eastPanel.setPreferredSize(new Dimension(100, 400));
    westPanel.setPreferredSize(new Dimension(100, 400));
    eastPanel.setBackground(new Color(200, 240, 200));
    westPanel.setBackground(new Color(200, 240, 0));

    window.setVisible(true);

A third panel is never created and nested within the other panel.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestCode_Web {


public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 400);

    JPanel innerPanel = new JPanel(new BorderLayout());     
    JPanel panelUp = new JPanel(new BorderLayout());

    JPanel panelUpLeft = new JPanel();
    JPanel panelUpMiddle = new JPanel();
    JPanel panelUpRight = new JPanel();  //Create third panel

    window.add(innerPanel, BorderLayout.NORTH);     
    innerPanel.add(panelUp, BorderLayout.NORTH);

    panelUp.add(panelUpRight, BorderLayout.EAST); //Add Third Panel
    panelUp.add(panelUpLeft, BorderLayout.WEST);
    panelUp.add(panelUpMiddle, BorderLayout.CENTER);

    JLabel label1 = new JLabel("Label 1");

    JLabel label11 = new JLabel("Label 11");
    JLabel label12 = new JLabel("Label 12");

    panelUpRight.add(label1); //Add label for third panel
    panelUpLeft.add(label11);       
    panelUpMiddle.add(label12);     

    panelUp.setBackground(new Color(200, 240, 200));

    panelUpLeft.setBackground(new Color(200, 240, 0));
    panelUpMiddle.setBackground(new Color(100, 240, 200));

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));        
    panelUpLeft.setPreferredSize(new Dimension(160, 120));

    window.setVisible(true);
}

}

Actually, you don't need the innerPanel :

public class TestCode_Web
{
    public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setLayout(new BorderLayout());
    window.setSize(400, 400);

    JPanel panelUp = new JPanel();
    JPanel panelUpLeft = new JPanel();
    JPanel panelUpMiddle = new JPanel();

    window.add(panelUp, BorderLayout.NORTH);     
    window.add(panelUpLeft, BorderLayout.WEST);
    window.add(panelUpMiddle, BorderLayout.CENTER);

    JLabel label1 = new JLabel("Label 1");
    JLabel label11 = new JLabel("Label 11");
    JLabel label12 = new JLabel("Label 12");

    panelUp.add(label1);
    panelUpLeft.add(label11);       
    panelUpMiddle.add(label12);     

    panelUp.setBackground(new Color(200, 240, 200));
    panelUpLeft.setBackground(new Color(200, 240, 0));
    panelUpMiddle.setBackground(new Color(100, 240, 200));

    panelUp.setPreferredSize(new Dimension(window.getWidth(), 160));        
    panelUpLeft.setPreferredSize(new Dimension(160, 120));

    window.setVisible(true);
}
}

NiceCow gave the answer why yours is not working. This should work fine.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM