Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java空布局会导致一个空白屏幕_Java_Swing_Layout - Fatal编程技术网

Java空布局会导致一个空白屏幕

Java空布局会导致一个空白屏幕,java,swing,layout,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);

当我尝试使用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);
    }
}

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

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


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

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

这里是Oracle使用无布局管理器的典型示例。

另外请注意,您应该按照以下方式包装所有内容:

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

“我是否需要为ColorPanel中的每个组件指定一个x,y值?”是的,这就是为什么您应该使用布局管理器。让他们完成所有的工作,这样你就不用担心了。+1表示不使用空布局。无论如何,没有满足所有需要的布局,但如果您需要自定义布局,最好编写自己的LayoutManager,而不是使用空布局。@0verbose:正确,几乎添加了。@0verbose此布局仅用于游戏的标题屏幕,我宁愿在空布局中设置四个按钮,也不愿编写自己的按钮。dacwe,这正是我需要的面板显示,但现在按钮是看不见的。我确保在面板后添加按钮。@Bro mcBro:在有限的情况下,您可以使用空布局,没有问题。@0详细的是的,我就是这么想的。您知道为什么在将ColorPanel添加到容器中时按钮不会显示吗?
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        ... GUI creation stuff here ...
    }
});