【发布时间】:2016-04-16 11:21:26
【问题描述】:
我有 3 个JPanel 组件。面板 1 设置为 BorderLayout.NORTH,面板 2 设置为 BorderLayout.CENTER,面板 3 设置为 BorderLayout.SOUTH。
现在面板 1 有 GridLayout(1,2),面板 2 也有 GridLayout(1,2)。
困扰我的是面板 1 和 2 中的组件对齐,就好像它们在 GridLayout 组合中一样。
具体来说,我在面板 1 中有一组 JTextField 组件,位于 row=0 和 column=1 的位置。
我在JScrollPane 内有一个JTable,位于面板 2 中的 row=0 和 column=1 位置。
无论我尝试什么,这两个组件都以相同的尺寸呈现。
代码太长,无法在此处发布,如果有人能阐明如何从概念上解决此问题,我将不胜感激。
public class PanelTest extends JFrame{
public static void main (String args[]) {
new PanelTest();
}
public PanelTest() {
this.setPreferredSize(new Dimension(800,200));
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(1,2));
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(1,2));
JTextField textField1 = new JTextField();
textField1.setPreferredSize(new Dimension(500, 100));
JTextField textField2 = new JTextField();
textField2.setPreferredSize(new Dimension(300, 100));
panel1.setMinimumSize(new Dimension(800, 100));
panel1.add(textField1);
panel1.add(textField2);
JTable table = new JTable();
//...
JScrollPane jps1 = new JScrollPane(table);
jps1.setPreferredSize(new Dimension(200, 300));
JTextField textField3 = new JTextField(10);
JScrollPane jps2 = new JScrollPane(textField3);
panel2.add(jps1);
panel2.add(jps2);
setLayout(new BorderLayout());
add(panel1, BorderLayout.NORTH);
add(panel2, BorderLayout.SOUTH);
this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
使用 GridBagLayout:
public PanelTest() {
this.setPreferredSize(new Dimension(800,200));
this.setMinimumSize(new Dimension(800,200));
JPanel panel1 = new JPanel();
panel1.setLayout(new GridBagLayout());
JPanel panel2 = new JPanel();
panel2.setLayout(new GridBagLayout());
JTextField textField1 = new JTextField();
textField1.setPreferredSize(new Dimension(500, 100));
JTextField textField2 = new JTextField();
textField2.setPreferredSize(new Dimension(300, 100));
panel1.setMinimumSize(new Dimension(800, 100));
GridBagConstraints gbc = new GridBagConstraints();
// gbc.insets = new Insets(5,100,5,1);
gbc.gridx=0;
gbc.gridy=0;
panel1.add(textField1, gbc);
gbc.gridx=1;
panel1.add(textField2, gbc);
JTable table = new JTable();
//...
JScrollPane jps1 = new JScrollPane(table);
jps1.setPreferredSize(new Dimension(600, 300));
jps1.setMinimumSize(new Dimension(600, 300));
JTextField textField3 = new JTextField();
gbc = new GridBagConstraints();
// gbc.insets = new Insets(5,100,5,1);
gbc.gridx=0;
gbc.gridy=0;
panel2.add(jps1, gbc);
gbc.gridx=1;
panel2.add(textField3, gbc);
setLayout(new BorderLayout());
add(panel1, BorderLayout.NORTH);
add(panel2, BorderLayout.SOUTH);
this.setVisible(true);
this.setVisible(true);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
【问题讨论】:
-
考虑提供一个 runnable example 来证明您的问题。 这不是代码转储,而是你正在做的一个例子,它突出了你遇到的问题。这将导致更少的混乱和更好的响应
-
很难想象你想得到什么样的布局,而且重现你当前的代码来分析问题。所以需要可运行的例子。
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度。
-
我已经编辑了上面的问题并添加了一些代码。谢谢
标签: java swing layout-manager grid-layout border-layout