Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 JFrame中的多个面板_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java JFrame中的多个面板

Java JFrame中的多个面板,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,那个没用的布局经理又回来了,我就是不能让我的脑袋去想这些该死的布局,让它们按照我想要的方式工作 无论如何,我想有一个JFrame,它的顶部有一个大面板(我称之为页眉),从框架的左侧到右侧,在框架的北部,然后是四个面板,两个在页眉下方,两个在页眉下方,最后是一个“页脚”面板,基本上与页眉面板相同,仅在框架的南部 像这样: 我有四个中间面板工作正常的代码,但是标题面板把一切都搞糟了,从那以后,我一直在测试GridBagLayout、GridLayout和BoxLayout的演示布局管理器代码。我不

那个没用的布局经理又回来了,我就是不能让我的脑袋去想这些该死的布局,让它们按照我想要的方式工作

无论如何,我想有一个JFrame,它的顶部有一个大面板(我称之为页眉),从框架的左侧到右侧,在框架的北部,然后是四个面板,两个在页眉下方,两个在页眉下方,最后是一个“页脚”面板,基本上与页眉面板相同,仅在框架的南部

像这样:

我有四个中间面板工作正常的代码,但是标题面板把一切都搞糟了,从那以后,我一直在测试GridBagLayout、GridLayout和BoxLayout的演示布局管理器代码。我不能让任何人按我的意愿工作

为了提醒大家,你们可能会注意到我已经有了一个与此相关的问题,如果不允许有两个类似的问题,请让我知道,我会将此移到我的上一个问题,这可以结束

public Shop() {
        shopUI = new JFrame("Shop Menu");
        shopUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        shopUI.setBounds(100, 100, 700, 500);
        shopUI.setResizable(false);

        allPanels = new JPanel();

        headerPanel = new JPanel();
        headerPanel.setLayout(new BorderLayout());
        headerPanel.setBackground(Color.cyan);

        mainPanel = new JPanel();
        mainPanel.setLayout(new GridLayout(2,2));

        topLeft = new JPanel();
        topLeft.setBackground(Color.pink);

        topRight = new JPanel();
        topRight.setBackground(Color.black);

        bottomLeft = new JPanel();
        bottomLeft.setBackground(Color.green);

        bottomRight = new JPanel();
        bottomRight.setBackground(Color.blue);

        footerPanel = new JPanel();
        footerPanel.setLayout(new BorderLayout());
        footerPanel.setBackground(Color.magenta);

        mainPanel.add(topLeft);
        mainPanel.add(topRight);
        mainPanel.add(bottomLeft);
        mainPanel.add(bottomRight);

        allPanels.add(headerPanel, BorderLayout.NORTH);
        allPanels.add(footerPanel, BorderLayout.SOUTH);
        allPanels.add(mainPanel);

        shopUI.add(allPanels);

        shopUI.setVisible(true);
}

我建议学习边界布局

根据需要,将页眉放在边框面板的北部,页脚放在南部。你如何做你的其他面板取决于你想要他们做什么;如果您总是希望它们彼此大小相同,则可以为它们使用gridlayout;如果没有,则可以使用boxlayout水平放置两对或垂直放置两对,这同样取决于调整帧大小时希望它们执行的操作

我认为使用布局管理器可以通过首先确定希望发生的事情来简化,包括调整框架大小时发生的事情。不管怎么说,这是布局的很大一部分——什么样的延伸,什么样的排列,等等

无论如何。在我看来,你那里的布局很经典。如果您需要进一步帮助,请告诉我们。顺便说一句,BorderLayout是JFrame的默认设置

编辑

当你在面板上放一些东西时,这会变得更有趣

package simpleborderlayout;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{

    public static void main(String[] args)
    {
        Main main = new Main(args);
        main.go();
    }

    public Main(String ... args)
    {}

    public void go()
    {
        JPanel headerPanel = getPanel(Color.RED);
        JPanel footerPanel = getPanel(Color.BLUE);

        JPanel p1 = getPanel(Color.GRAY);
        JPanel p2 = getPanel(Color.GRAY);
        JPanel p3 = getPanel(Color.GRAY);
        JPanel p4 = getPanel(Color.GRAY);

        GridLayout gridLayout = new GridLayout(2,2);
        JPanel middlePanel = new JPanel(gridLayout);
        middlePanel.add(p1);
        middlePanel.add(p2);
        middlePanel.add(p3);
        middlePanel.add(p4);

        JFrame mainFrame = new JFrame();
        mainFrame.add(headerPanel, BorderLayout.NORTH);
        mainFrame.add(middlePanel, BorderLayout.CENTER);
        mainFrame.add(footerPanel, BorderLayout.SOUTH);
        mainFrame.pack();

        mainFrame.setVisible(true);

    }

    private JPanel getPanel(Color c)
    {
        JPanel result = new JPanel();
        result.setBorder(BorderFactory.createLineBorder(c));
        return result;
    }

}

“[…]然后它下面有四个面板,两个在页脚下面,两个在页眉下面”你是说页眉下面吗?对不起!是的,你是对的,页眉在最上面,两个面板的大小是页眉的一半,然后是两个相同的面板,最后是页脚。还有,你对布局的想法是什么?如果是的话,我或者其他人可以帮你把它添加到你的帖子里。就是这样!如果你能在几分钟内弥补,这说明我和这些管理者在一起是多么的无用!非常感谢。谢谢你!这正是我要找的。我尝试将mainFrame设置为false resizable,并尝试了mainFrame.setBounds(100100700500);但这似乎没什么用,有什么建议吗?好吧,你必须知道你想要实现什么。总的来说,我不认为窗口应该是不可调整大小的;它假设了太多关于用户、计算机、屏幕大小等的内容。设置边界更多的是一种初始化,我不确定为什么Resizeable(false)不起作用,但我不记得使用过它。只尝试了这两个语句——将它们放在setVisible(true)调用之后——它们工作正常。我不知道你和他们之间有什么问题。我是按照你说的去做的,只是把那两行搞乱了,直到我明白为止,谢谢!如果这回答了您的问题,习惯上会将其标记为答案。