swing gui闪烁白色错误

eat*_*hil 1 java swing background jlabel opacity

我有一个Gui我正在制作一个程序,它有一个以JFrame为中心的外部容器,它包含一个容纳22*12个单元格的内部容器.当我运行这个程序时,背景只是闪烁白色并保持这样.如果你能指出我出错的地方那就太棒了!

public class Gui extends JFrame
{   
private JPanel outer, inner;
private JLabel[][] labels = new JLabel[22][12];

public Gui()
{
    setBackground(Color.black);
    setSize(1000,1000);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    outer = new JPanel();
    outer.setLayout(new BorderLayout());
    outer.setSize(620,920);
    outer.setBackground(Color.white);

    inner = new JPanel();
    inner.setLayout(new GridLayout(22,12,10,10));
    inner.setSize(600,900);
    inner.setBackground(Color.white);

    for (int i = 0; i < 22; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            labels[i][j] = new JLabel();
            JLabel label = labels[i][j];
            label.setSize(50,50);
            label.setBackground(Color.gray);
            inner.add(label);
        }
    }

    outer.add(inner, BorderLayout.CENTER);
    add(outer, BorderLayout.CENTER);
    }
}
Run Code Online (Sandbox Code Playgroud)

gui在实例化它的主类中设置可见.

gui的创建和大小正确.它从黑色背景开始,然后随后随机变成白色,并保持这样.

编辑:如果这仍然很重要:

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable()
    {

        public void run()
        {
            Gui gui = new Gui();
            gui.setVisible(true);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 5

使用遵循最终静态命名约定的新静态变量名称.那个变量应该是大写的:

//setBackground(Color.black);
setBackground(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)

不要将setSize()用于组件.而是将组件添加到框架中,然后使用pack()方法,以便组件以其首选大小显示:

//setSize(1000,1000);
add(component1);
add(anotherComponent);
pack();
Run Code Online (Sandbox Code Playgroud)

布局管理器使用首选大小而不是大小作为布局提示:

//label.setSize(50,50);
label.setPreferredSize(new Dimension(50, 50));
Run Code Online (Sandbox Code Playgroud)

这是你的主要问题.默认情况下,JLabel是透明的,因此忽略您设置的背景颜色:

label.setBackground(Color.gray);
label.setOpaque(true);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我的屏幕高度只有738,因此你不想看到整个画面,因为你想要22*50的高度.你应该知道这一点,并可能将你的面板添加到JScrollPane,所以像我这样的人实际上可以使用你的应用程序.这就是为什么你不应该硬编码首选大小.