java - 如何在同一个 JPanel 中实现南北部分

标签 java swing layout-manager border-layout

同一个JPanel中是否可以有南北组件?例如,我希望文本以下面的 2 x 2 网格布局显示。我怎样才能改变这个代码来实现这一点?我是 Java Swing 新手,不确定应该看哪里。

public  CompView(){
super("Super");
setResizable(false);
setLocationRelativeTo(null);

JPanel northPanel = new JPanel();
JPanel middlePanel = new JPanel();
JPanel southPanel = new JPanel();

getContentPane().add(northPanel, BorderLayout.NORTH);
northPanel.add(new JLabel("TITLE", CENTER));
northPanel.setLayout(new GridLayout(2,2));
northPanel.add(new JLabel("Text: "));
northPanel.add(new JTextField());
northPanel.add(new JLabel("Text: "));
northPanel.add(new JTextField());

getContentPane().add(middlePanel, BorderLayout.CENTER);
middlePanel.setLayout(new GridLayout(2,1));
middlePanel.add(new JLabel("Title 2:", CENTER));
middlePanel.add(new JTextField());
}

当前图像

enter image description here

我希望输出如下所示:

| Super             |_|  |X|
----------------------------     --|
|          Title           |       |
----------------------------       |
| Text: | JTextField 1   | |       } North Panel
----------------------------       |
| Text: | JTextField 2   | |       |
----------------------------     --|
|         Title 2          |       |
----------------------------       } Center Panel
| | Resizable JTextField | |       |
----------------------------     --|

希望此图有帮助。

最佳答案

解决复杂计算任务的常见策略是将其分解为小的、定义良好的可管理任务。分而治之。
这也适用于 GUI:将设计分解为小的、易于布局的容器。在这种情况下,首先将设计分为 2 个区域,就像您所做的那样(北区和南区),然后对每个区域进行分割。例如:

enter image description here

基本思想是将布局划分为更小的区域,每个区域都有简单的不同布局,可以由一个 layout manager 来实现。

北部部分的实现可能如下所示:

//avoid extends JFrame. Use for simplification
public class CompView extends JFrame{

    CompView(){

        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel northPanel = new JPanel(new GridLayout(2,0));

        FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER);
        JPanel titlePanel = new JPanel(layout1);
        titlePanel.add(new JLabel("TITLE"));
        northPanel.add(titlePanel);

        FlowLayout layout2 = new FlowLayout(FlowLayout.LEFT);
        JPanel textfieldPanel1 = new JPanel(layout2);
        textfieldPanel1.add(new JLabel("Text: "));
        JTextField txt = new JTextField();
        txt.setColumns(5);
        textfieldPanel1.add(txt);
        northPanel.add(textfieldPanel1);

        add(northPanel, BorderLayout.NORTH);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new CompView());
    }
}

关于java - 如何在同一个 JPanel 中实现南北部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432072/

相关文章:

java - protobuf 消息中的自引用字段

java - 关于try-with-resources语句的查询

java - 让java显示超过1个.add()

java - getWidth() 对于面板返回 0

Java JLabel 和 JTextField 定位

java - 无法更改 Java Swing CardLayout 中的卡片

java - spring事务注释方法无需对实体进行合并调用

java - 如何在 while 循环中增加行计数器变量?

java - 登录系统并有权 Access

java - 如何拆分 getActionCommand() 以获得字符串中的第一个元素?