java - 如何使用 GridLayout 和多个面板?

标签 java swing layout-manager grid-layout

如何使用多个 JPanel 容器使此代码看起来像这样?

这是我的代码应该是什么样子的图像,但我无法弄清楚。 我只能使用 GridLayoutBorderLayoutFlowLayout。作为初学者,我们只了解了基本概念,但我需要更多帮助。

我也不允许使用GridBagLayout。我感谢所有的帮助。

最佳答案

解决复杂计算任务的常见策略是将其分解为小的、定义良好的可管理任务。分而治之。
这也适用于 gui:将设计分解为小的、易于布局的容器。
在这种情况下,请考虑将设计划分为嵌套在主 JPanel 中的 3 个区域 (JPanel):

enter image description here

如果您无法使用GridBagLayout,您可以使用BoxLayout实现底部面板。
BoxLayout 对于主面板来说也是一个有效的选项,以允许不同的子面板(顶部、中心、底部)高度。

演示:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Lab1 extends JFrame
{
    public Lab1() {

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel main = new JPanel(new GridLayout(3,1));
        //to allow different child-panels height use BoxLayout
        //BoxLayout boxLayout = new BoxLayout(main, BoxLayout.Y_AXIS);

        add(main);
        JPanel top = new JPanel(new GridLayout(1,3));
        main.add(top);
        top.add(getPanel(Color.RED));
        top.add(getPanel(Color.GREEN));
        top.add(getPanel(Color.BLUE));

        JPanel center = new JPanel(new GridLayout(1,4));
        main.add(center);
        center.add(getPanel(Color.YELLOW));
        center.add(getPanel(Color.CYAN));
        center.add(getPanel(Color.BLACK));
        center.add(getPanel(Color.LIGHT_GRAY));

        JPanel bottom = new JPanel();
        bottom.setLayout(new BoxLayout(bottom, BoxLayout.LINE_AXIS));
        main.add(bottom);

        bottom.add(getPanel(Color.PINK));
        JPanel rightPane =  getPanel(Color.MAGENTA);
        rightPane.setPreferredSize(new Dimension(900, 200));
        bottom.add(rightPane);

        pack();
        setVisible(true);
    }

    private JPanel getPanel(Color color) {
        JPanel panel = new JPanel();
        panel.setBackground(color);
        panel.setPreferredSize(new Dimension(300, 200));
        return panel;
    }

    public static void main(String args[])
    {
        new Lab1();
    }
}

关于java - 如何使用 GridLayout 和多个面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462093/

相关文章:

java - JPanel 和 JScrollPane 在 Swing App 中不可见

Java eclipse IDE线速调试

java - 打破开关失败?? java

java - 如何动态更改 JLabel

java - 每行中的列数可能不同的 JTable

java - BorderLayout - 添加另一个组件后子组件仍然可见

java - 如何在没有instanceOf的情况下实现我的LayoutManager?

java - JEdi​​torPane 填充 JScrollPane 中的所有可用空间

java - 不同类之间的通信(Eclipse Forms 部分之间的通信)

java - 如何在 spring boot rest 应用程序中使用 Swagger ui 配置带有密码流的 oAuth2