我正在尝试绘制一个带按钮的面板,看起来像这样:
我像这样创建“buttonPanel”:
buttonPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.gridx = 0; gbc.gridy = 0;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A0"), gbc);
gbc.gridx = 1; gbc.gridy = 0;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A1"), gbc);
gbc.gridx = 2; gbc.gridy = 0;
gbc.gridwidth = 2; gbc.gridheight = 2;
buttonPanel.add(new JButton("A2"), gbc);
gbc.gridx = 0; gbc.gridy = 2;
gbc.gridwidth = 3; gbc.gridheight = 2;
buttonPanel.add(new JButton("A3"), gbc);
gbc.gridx = 3; gbc.gridy = 2;
gbc.gridwidth = 1; gbc.gridheight = 2;
buttonPanel.add(new JButton("A4"), gbc);
但结果如下:
当按钮“A3”的gridwidth = 3时,它应该到达按钮“A2”的中间位置?
任何帮助?
EDIT1: 增加面板大小或在按钮上设置更长的文本不会改变任何内容:
EDIT2: 为按钮“A2”和“A3”设置weightx = 1有助于:
这对我来说是可以接受的,但如果按钮“A4”与按钮“A0”和“A1”具有相同的宽度会很好
答案 0 :(得分:2)
为A2和A3设置weightx为1.0。
答案 1 :(得分:1)
虽然按钮“A4”的宽度与按钮“A0”和“A1”的宽度相同会很好
你不能让一个细胞占据另一个细胞的部分空间。
所以你需要通过创建4个(不可见的)虚拟组件来“伪造”它。这允许您定义4列的网格。
然后A2的网格宽度为“2”,A3的网格宽度为“3”。其他行的网格宽度为1.因此现在每行的总单元格宽度为4,以匹配虚拟单元格。
请查看:Why does this GridBagLayout not appear as planned?以获取此方法的示例。
或者更简单的选择是使用Relative Layout。它允许您为组件提供相对大小。所以你需要两个面板。在第一个组件中,组件的相对大小为1,1,2,第二个组合为3.1。