Java swing gui闪烁白色错误

Java swing gui闪烁白色错误,java,swing,background,opacity,jlabel,Java,Swing,Background,Opacity,Jlabel,我为一个程序制作了一个Gui,它有一个以JFrame为中心的外部容器,其中包含一个容纳22*12个单元格的内部容器。当我运行这个程序时,背景只会闪烁成白色并保持不变。如果你能指出我错在哪里,那就太棒了 public class Gui extends JFrame { private JPanel outer, inner; private JLabel[][] labels = new JLabel[22][12]; public Gui() { setBackground(C

我为一个程序制作了一个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);
    }
}

使用遵循最终静态命名约定的新静态变量名。即变量应大写:

//setBackground(Color.black);
setBackground(Color.BLACK);
不要对组件使用setSize。而是将组件添加到框架中,然后使用“打包”方法,以便以其首选大小显示组件:

//setSize(1000,1000);
add(component1);
add(anotherComponent);
pack();
布局管理器使用首选尺寸而不是尺寸作为布局提示:

//label.setSize(50,50);
label.setPreferredSize(new Dimension(50, 50));
这是你的主要问题。默认情况下,JLabel是透明的,因此您设置的背景色将被忽略:

label.setBackground(Color.gray);
label.setOpaque(true);

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

使用遵循最终静态命名约定的新静态变量名称。即变量应大写:

//setBackground(Color.black);
setBackground(Color.BLACK);
不要对组件使用setSize。而是将组件添加到框架中,然后使用“打包”方法,以便以其首选大小显示组件:

//setSize(1000,1000);
add(component1);
add(anotherComponent);
pack();
布局管理器使用首选尺寸而不是尺寸作为布局提示:

//label.setSize(50,50);
label.setPreferredSize(new Dimension(50, 50));
这是你的主要问题。默认情况下,JLabel是透明的,因此您设置的背景色将被忽略:

label.setBackground(Color.gray);
label.setOpaque(true);

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

我想您忘记了构造函数中的setVisibletrue。试试这个。发布你的主方法,这样我们就可以执行你的代码了。我想你忘记了构造函数中的setVisibletrue。试试这个。发布你的主方法,这样我们就可以执行你的代码了。干得好。非常可靠的分析。非常感谢!现在效果很好!干得好。非常可靠的分析。非常感谢!现在效果很好!