我做了一个简单的GridBagLayout
,它在单元格(0,0),(1,0)和(0,1)中添加了按钮。
JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
panelMain.add(new JButton("0,0"),c);
c.gridx = 1;
c.gridy = 0;
panelMain.add(new JButton("1,0"),c);
c.gridx = 0;
c.gridy = 1;
panelMain.add(new JButton("0,1"),c);
我很高兴看到结果用户界面:
我想在未连接到现有单元格的单元格中添加JButton
。我希望它被一个空的空间分开。当我尝试这个时,新的JButton
会被集中在其他人旁边。这是补充:
JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
panelMain.add(new JButton("0,0"),c);
c.gridx = 1;
c.gridy = 0;
panelMain.add(new JButton("1,0"),c);
c.gridx = 0;
c.gridy = 1;
panelMain.add(new JButton("0,1"),c);
c.gridx = 3;
c.gridy = 0;
panelMain.add(new JButton("3,0"),c);
输出:
JButton("3,0")
显示在单元格(2,0)处。我是否需要在单元格(2,0)中使用空JPanel
作为占位符?更重要的是,为什么会发生这种情况?
答案 0 :(得分:3)
除非在2,0
中放置了一个组件,否则布局不知道gridx = 2
的宽度应该是多少。当您完成UI时,如果放置任何组件,它应该看起来很好。例如:
在其他情况下,您可以添加空JPanel
,背景颜色与容器的背景颜色匹配。
答案 1 :(得分:2)
我是否需要在单元格(2,0)中使用空的JPanel作为占位符?
您可以使用“insets”网格包约束来为组件之间提供空间。阅读How to Use GridBagLayout上的Swing教程,了解有关插入约束的更多信息。
或者,如果您想拥有一个占位符,那么您可以使用Box.createHorizontalStrut(...)
轻松指定宽度。
更重要的是,为什么会发生这种情况?
除非单元格中有组件,否则单元格没有大小。每个细胞彼此独立,那么你期望细胞(2,0)的大小是多少?