带按钮的 GridBagLayout
GridBagLayout with buttons
我正在尝试绘制一个带有按钮的面板,看起来像这样:
我这样创建 "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"?
有什么帮助吗?
编辑1:
增加面板大小或在按钮上设置更长的文本不会改变任何内容:
编辑2:
为按钮 "A2" 和 "A3" 设置 weightx=1 有助于:
这对我来说是可以接受的,尽管如果按钮 "A4" 的宽度与按钮 "A0" 和 "A1"
的宽度相同会更好
将 A2 和 A3 的 weightx 设置为 1.0。
although it would be nice if button "A4" would have the same width as button "A0" and "A1"
您不能让一个单元格占据另一个单元格的一部分 space。
因此您需要通过创建 4 个(不可见的)虚拟组件来 "fake" 它。这允许您定义 4 列的网格。
那么 A2 的网格宽度为“2”,A3 的网格宽度为“3”。其他的网格宽度为 1。因此现在每行的总单元格宽度为 4 以匹配虚拟单元格。
查看:Why does this GridBagLayout not appear as planned? 此方法的示例。
或者更简单的选择是使用 Relative Layout。它允许你给组件一个相对大小。所以你需要两个面板。在第一个组件中,组件的相对大小为 1、1、2,第二个组件的相对大小为 3、1。
我正在尝试绘制一个带有按钮的面板,看起来像这样:
我这样创建 "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"?
有什么帮助吗?
编辑1: 增加面板大小或在按钮上设置更长的文本不会改变任何内容:
编辑2: 为按钮 "A2" 和 "A3" 设置 weightx=1 有助于:
这对我来说是可以接受的,尽管如果按钮 "A4" 的宽度与按钮 "A0" 和 "A1"
的宽度相同会更好将 A2 和 A3 的 weightx 设置为 1.0。
although it would be nice if button "A4" would have the same width as button "A0" and "A1"
您不能让一个单元格占据另一个单元格的一部分 space。
因此您需要通过创建 4 个(不可见的)虚拟组件来 "fake" 它。这允许您定义 4 列的网格。
那么 A2 的网格宽度为“2”,A3 的网格宽度为“3”。其他的网格宽度为 1。因此现在每行的总单元格宽度为 4 以匹配虚拟单元格。
查看:Why does this GridBagLayout not appear as planned? 此方法的示例。
或者更简单的选择是使用 Relative Layout。它允许你给组件一个相对大小。所以你需要两个面板。在第一个组件中,组件的相对大小为 1、1、2,第二个组件的相对大小为 3、1。