0

我有以下代码,但我的 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);
    }
4

1 回答 1

2

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

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

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

在此处输入图像描述

(图片借自Java Trails)

所以设置框架的背景“看起来”没有效果。

使用您的代码...

在此处输入图像描述

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

在此处输入图像描述

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

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);
        }
    }
}
于 2012-11-06T03:24:20.947 回答