[英]swing gui flickering white error
我正在為一個程序制作一個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);
}
}
gui在實例化它的主類中設置為可見。
gui的創建和大小正確。 它以黑色背景開始,然后隨即隨機變為白色,並保持這種狀態。
編輯:如果這仍然很重要:
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Gui gui = new Gui();
gui.setVisible(true);
}
});
}
使用遵循最終靜態命名約定的新靜態變量名稱。 那就是變量應該大寫:
//setBackground(Color.black);
setBackground(Color.BLACK);
不要將setSize()用於組件。 而是將組件添加到框架,然后使用pack()方法,以便以首選大小顯示組件:
//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中,以便像我這樣的人可以實際使用您的應用程序。 這就是為什么您不應該硬編碼首選大小的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.