Java GridBagLayout行跨度问题
我在GridBagLayout上遇到了一个奇怪的问题。我将其简化为一个简单的示例,包含4个面板、2个列和3行。面板具有首选尺寸,以使其成为方形1和4或矩形2和3Java GridBagLayout行跨度问题,java,gridbaglayout,Java,Gridbaglayout,我在GridBagLayout上遇到了一个奇怪的问题。我将其简化为一个简单的示例,包含4个面板、2个列和3行。面板具有首选尺寸,以使其成为方形1和4或矩形2和3 Expected Real result --------------- --------------- | 1 | 3 | | 1 | 3 | | | | | | |
Expected Real result
--------------- ---------------
| 1 | 3 | | 1 | 3 |
| | | | | |
| | | | | |
|------| | |------| |
| 2 | | : space| |
| | | |------| |
| |------| | 2 |------|
| | 4 | | | space:
| | | | |------|
| | | | | 4 |
--------------- | | |
| | |
---------------
: extra space :
...............
按照面板编号的顺序添加面板会产生一个糟糕的结果,实际上不是预期的结果,而将添加顺序更改为1-3-2-4会产生一个好结果。
水平转置它会得到类似的结果。
我不明白为什么添加顺序很重要,也不明白为什么行在面板之间有额外的空间重叠
我的逻辑遗漏了什么?
如何在不增加订单考虑的情况下实现预期结果
我试过MigLayout和它的单元格放置功能:它落在同一个洞里,顺序不会改变任何东西
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestLayout
{
public static void main(String[] args)
{
JFrame frame = new JFrame("test gridbag");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridBagLayout());
Dimension rectDim = new Dimension(100, 200);
Dimension carDim = new Dimension(100, 100);
JPanel panel1 = new JPanel();
panel1.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel1.add(new JLabel("1"));
panel1.setPreferredSize(carDim);
GridBagConstraints c1 = new GridBagConstraints();
c1.gridx = 0;
c1.gridy = 0;
c1.gridheight = 1;
contentPane.add(panel1, c1);
JPanel panel2 = new JPanel();
panel2.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel2.add(new JLabel("2"));
panel2.setPreferredSize(rectDim);
GridBagConstraints c2 = new GridBagConstraints();
c2.gridx = 0;
c2.gridy = 1;
c2.gridheight = 2;
contentPane.add(panel2, c2);
JPanel panel3 = new JPanel();
panel3.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel3.add(new JLabel("3"));
panel3.setPreferredSize(rectDim);
GridBagConstraints c3 = new GridBagConstraints();
c3.gridx = 1;
c3.gridy = 0;
c3.gridheight = 2;
contentPane.add(panel3, c3);
JPanel panel4 = new JPanel();
panel4.setBorder(BorderFactory.createLineBorder(Color.BLACK));
panel4.add(new JLabel("4"));
panel4.setPreferredSize(carDim);
GridBagConstraints c4 = new GridBagConstraints();
c4.gridx = 1;
c4.gridy = 2;
c4.gridheight = 1;
contentPane.add(panel4, c4);
// TODO change add order to 1-3-2-4 for expected result
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
仅供将来使用-使用第三方布局管理器-MigLayout是我的最爱