微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GridBagLayout和JButton

如何解决GridBagLayout和JButton

我没有找到答案,或者我听不懂并回答。我正在尝试做的是显示2个按钮,每一行以一两个空格隔开。当我使用标签和文本字段执行此操作时,它可以完美运行,但使用按钮则没有这种运气,

gridBagConstraints.weighty = 0.1;
gridBagConstraints.weightx = 1;

gridBagConstraints.gridy = 0;
gridBagConstraints.gridx = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.anchor = GridBagConstraints.LINE_END;
gridBagConstraints.insets = new Insets(0,5);
add(streetLabel,gridBagConstraints);

gridBagConstraints.gridy = 0;
gridBagConstraints.gridx = 1;
gridBagConstraints.anchor = GridBagConstraints.LINE_START;
gridBagConstraints.insets = new Insets(0,0);
add(streetField,gridBagConstraints);

太棒了!

gridBagConstraints.weighty = 2.0;
gridBagConstraints.weightx = 1;

gridBagConstraints.gridy = 4;
gridBagConstraints.gridx = 1;
gridBagConstraints.anchor = GridBagConstraints.FirsT_LINE_START;

gridBagConstraints.insets = new Insets(0,5);
add(addBtn,gridBagConstraints,0);

gridBagConstraints.weighty = 2.0;
gridBagConstraints.weightx = 0.1;

gridBagConstraints.gridy = 4;
gridBagConstraints.gridx = 1;
gridBagConstraints.gridwidth = 0;
gridBagConstraints.insets = new Insets(0,0);
gridBagConstraints.anchor = GridBagConstraints.FirsT_LINE_END;
add(cancelBtn,gridBagConstraints);

不太好。

enter image description here

解决方法

我建议您删除对weightxweighty的所有使用。他们没有按照您的想法做。

仅当网格中有多余空间时才应用权重。它们不适用于您的表格。

此外,gridBagConstraints.gridwidth = 0;没有意义;如果网格中有东西,则不能跨越零单元格。 gridwidth和gridheight必须为正(或REMAINDERRELATIVE之类的特殊值)。

实现目标的一个好方法是在GridBagLayout内嵌套具有不同布局的JPanel,该布局仅包含您的按钮:

JPanel buttonPanel = new JPanel();
buttonPanel.add(addBtn);
buttonPanel.add(cancelBtn);

gridBagConstraints.gridy = 4;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_START;

gridBagConstraints.insets = new Insets(0,5);
add(buttonPanel,gridBagConstraints);

请注意,使用GridBagConstraints.REMAINDER可使面板水平跨所有单元格。

,

尽管可能只用一个GridBagLayout就能完成整个视图,但我还是结合了布局以简化工作。

enter image description here

  • 红色区域将是带有BorderLayout的面板。绿色和蓝色分别是CENTERPAGE_END中的面板。
  • 带有 GREEN 边框的面板将带有GridBagLayout
  • 蓝色带边框的面板将带有FlowLayout
,

GridBagConstraints.weighty的最大值为1。如果该值大于1,则程序会将其重置为0。如果希望该值大于0且小于1,则可以使用十进制(即0.5)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。