我无法将jpanel添加到jframe中

时间:2012-11-06 03:14:07

标签: java swing jpanel

我有以下代码,但我的JPanel没有显示。我无法弄清楚为什么。你明白为什么吗?我看到的只是带有黑色背景的JFrame

public class ShapeFrame extends JFrame 
{
    private JPanel outlinePanel;

    public ShapeFrame(LinkedList<Coordinate> list)
    {
        super("Outline / Abstract Image");
        setSize(950, 500);
        setLayout(null);
        setBackground(Color.BLACK);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel outlinePanel = new JPanel();
        outlinePanel.setBackground(Color.WHITE);
        outlinePanel.setBorder(null);
        outlinePanel.setBounds(50, 50, 400, 400);
        add(outlinePanel);


//      abstractPanel = new JPanel();
//      abstractPanel.setBackground(Color.WHITE);
//      abstractPanel.setBounds(500, 50, 400, 400);
//      add(abstractPanel);
    }

1 个答案:

答案 0 :(得分:3)

我得到的只是一个带有白色方块的框架......

您应该使用getContentPane().setBackground()来设置框架的背景

框架由图层组成。通常,您看到的内容会(在大多数情况下自动添加)到内容窗格中,而内容窗格会覆盖框架。

enter image description here

(借用Java Trails的图片)

因此设置框架的背景“出现”无效。

使用您的代码......

enter image description here

使用getContent().setBackground(...)

enter image description here

这是我用来测试代码的代码......

public class BadLayout01 {

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

    public BadLayout01() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                ShapeFrame shapeFrame = new ShapeFrame();
                shapeFrame.setSize(525, 525);
                shapeFrame.setVisible(true);

            }
        });
    }

    public class ShapeFrame extends JFrame {

        private JPanel outlinePanel;

        public ShapeFrame() {
            super("Outline / Abstract Image");
            setSize(950, 500);
            setLayout(null);
            getContentPane().setBackground(Color.BLACK);
//            setBackground(Color.BLACK);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JPanel outlinePanel = new JPanel();
            outlinePanel.setBackground(Color.WHITE);
            outlinePanel.setBorder(null);
            outlinePanel.setBounds(50, 50, 400, 400);
            add(outlinePanel);


//      abstractPanel = new JPanel();
//      abstractPanel.setBackground(Color.WHITE);
//      abstractPanel.setBounds(500, 50, 400, 400);
//      add(abstractPanel);
        }
    }
}