Java null布局导致空白屏幕

时间:2011-05-05 14:59:27

标签: java swing layout

当我尝试使用setLayout(null)时,我得到一个普通的灰色屏幕,并且没有任何组件存在。我是否需要为ColorPanel中的每个组件提供x,y值?

import javax.swing.*;
import java.awt.*;

public class GUI{

    public static void main(String[] args){
        JFrame GUI = new JFrame();
        GUI.setLayout(null);
        GUI.setTitle("Betrai");
        GUI.setSize(500, 500);
        GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ColorPanel panel = new ColorPanel(Color.white);
        Container pane = GUI.getContentPane();
        JButton continueButton = new JButton("TEST");
        continueButton.setBackground(Color.red);
        continueButton.setBounds(10, 10, 60, 40);
        pane.add(continueButton);
        GUI.setVisible(true);
        GUI.setBounds(0, 0, 500, 500);
        GUI.setResizable(false);
    }
}

2 个答案:

答案 0 :(得分:5)

我尝试了代码,我可以看到你的按钮,就像你指定的一样!

您需要将ColorPanel添加到布局并设置边界(就像您为测试按钮所做的那样)。

    panel.setBounds(50, 50, 100, 100);
    pane.add(panel);

但是你不应该使用null布局。几乎总有另一种布局可以满足您的需求!

答案 1 :(得分:2)

当你为布局管理器使用null时,你告诉Swing你想做绝对定位。绝对定位的规则是在添加之前必须为添加到Container的每个组件设置边界。

在这里您可以找到Oracle使用无布局管理器的规范示例。 http://download.oracle.com/javase/tutorial/uiswing/layout/none.html

另请注意,您应按如下方式包装所有内容:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        ... GUI creation stuff here ...
    }
});