同一个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());
}
当前图像
我希望输出如下所示:
| Super |_| |X|
---------------------------- --|
| Title | |
---------------------------- |
| Text: | JTextField 1 | | } North Panel
---------------------------- |
| Text: | JTextField 2 | | |
---------------------------- --|
| Title 2 | |
---------------------------- } Center Panel
| | Resizable JTextField | | |
---------------------------- --|
希望此图有帮助。
最佳答案
解决复杂计算任务的常见策略是将其分解为小的、定义良好的可管理任务。分而治之。
这也适用于 GUI:将设计分解为小的、易于布局的容器。在这种情况下,首先将设计分为 2 个区域,就像您所做的那样(北区和南区),然后对每个区域进行分割。例如:
基本思想是将布局划分为更小的区域,每个区域都有简单的不同布局,可以由一个 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/