Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 JButtons仅在BorderLayout.CENTER中出现在JFrame上,而不是在SOUTH或NORTH中_Java_Button_User Interface - Fatal编程技术网

Java JButtons仅在BorderLayout.CENTER中出现在JFrame上,而不是在SOUTH或NORTH中

Java JButtons仅在BorderLayout.CENTER中出现在JFrame上,而不是在SOUTH或NORTH中,java,button,user-interface,Java,Button,User Interface,所以我正在尝试创建一个gui,我以前在java中对gui进行过修补,但我对它们还是新手。因此,我在这里发布的是,我的jlabel(butLabel和cbLabel)充满了按钮和复选框。遗憾的是,我的JFrame将只显示设置为BorderLayout.CENTER的内容。南北不显示,即使我只将butLabel设置为南,甚至不使用cbLabel。我忽略了什么??非常感谢,谢谢 public class mainWindow { JFrame frame = new JFrame("Main

所以我正在尝试创建一个gui,我以前在java中对gui进行过修补,但我对它们还是新手。因此,我在这里发布的是,我的jlabel(butLabel和cbLabel)充满了按钮和复选框。遗憾的是,我的JFrame将只显示设置为BorderLayout.CENTER的内容。南北不显示,即使我只将butLabel设置为南,甚至不使用cbLabel。我忽略了什么??非常感谢,谢谢

public class mainWindow
{
    JFrame frame = new JFrame("Main Window");

    JLabel butLabel = new JLabel();
    JLabel cbLabel = new JLabel();

    JButton showBut = new JButton("Show");
    JButton exitBut = new JButton("Exit");
    JButton addBut = new JButton("Add");
    JButton remBut = new JButton("Remove");

    JCheckBox aCB = new JCheckBox("Airplane");
    JCheckBox bCB = new JCheckBox("Boat");
    JCheckBox cCB = new JCheckBox("Clock");


    public mainWindow()
    {
        frame.setLayout(new BorderLayout()); //I know this is set by default to BorderLayout but I just did it when I was out of options to try.
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setMinimumSize(new Dimension(360, 480));


        butLabel.setLayout(new GridLayout(1,4));
        cbLabel.setLayout(new GridLayout(2, 2));

        butLabel.add(showBut);
        butLabel.add(exitBut);
        butLabel.add(addBut);
        butLabel.add(remBut);

        cbLabel.add(aCB);
        cbLabel.add(bCB);
        cbLabel.add(cCB);

        frame.add(butLabel, BorderLayout.CENTER);
        frame.add(cbLabel, BorderLayout.NORTH);
    }
    public void setVisible()
    {
        butLabel.setVisible(true);//Didn't think I needed butLabel.setVisible or the cbLabel.setVisible but
        cbLabel.setVisible(true);//again I was trying things that I thought might make sense.

        frame.setVisible(true);
    }
}

不要使用标签对元素进行分组,而是使用JPanel 我试着把所有的都换掉

标签

面板


它可以工作

不要使用标签对元素进行分组,使用JPanel而不是Good gosh我不敢相信我这么做了,因为我之前一直在看它,看起来不对劲。天哪,我觉得自己很傻。感谢您的快速回复!1+但还要在回答中添加原因:布局管理器,JLabel默认为null,JPanel为FlowLayout)。是的,谢谢,我将在9分钟后投票。在发布(-uu-)之前应该仔细考虑一下。再次感谢!不,我不对,我没有读代码,因为我看到OP确实为JLabel提供了布局。很可能是因为
getPreferredSize()
为JLabel返回了0,0。我发现:,阅读答案,这就是它返回0,0的原因,@hoverCraftFullOfels感谢链接,但这不是原因。原因正如我所怀疑的,JLabel不使用任何包含的组件来计算其preferredSize,而是使用添加到标签的任何文本和图标的大小。请参阅camickr的答案以确认。