java - 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, 0, 0, 5);
add(streetLabel, gridBagConstraints);
gridBagConstraints.gridy = 0;
gridBagConstraints.gridx = 1;
gridBagConstraints.anchor = GridBagConstraints.LINE_START;
gridBagConstraints.insets = new Insets(0, 0, 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 , 0, 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, 0, 0);
gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_END;
add(cancelBtn, gridBagConstraints);
不太好。
解决方案
我建议您删除所有使用weightx
and weighty
。他们没有按照你的想法做。
仅当网格中有额外空间时,权重才适用。它们不适用于您的表格。
另外,gridBagConstraints.gridwidth = 0;
没有意义;如果网格中有东西,它不能跨越零个单元格。gridwidth 和 gridheight 必须是正数(或像REMAINDER或RELATIVE这样的特殊值)。
实现目标的一个好方法是在 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, 0, 0, 5);
add(buttonPanel, gridBagConstraints);
请注意使用GridBagConstraints.REMAINDER
使面板水平跨越所有单元格。
推荐阅读
- continuous-integration - 由于 node-gyp,在 GitHub CI 上使用 yarn 安装依赖项失败
- ethereum - 如何与已部署的 ERC20(openzeppelin ERC20 合约)代币交互,将代币从用户地址 X 转移到地址 Y?
- java - springboot应用程序中的多杰克逊日期格式配置
- java - 从 Integer.parseInt() 获取“NumberFormatException”,可能来自误解
- installation - Visual Studio 2019 安装项目 - 包括 Access Database Engine Redistributable 2016/2010
- amazon-web-services - 仅在 CentOS 上安装 redis-cli
- json - 如何从代码中访问 launchUrl 属性(launchSettings.json)?
- interrupt - 为什么 MaxTouch amtel_mxt_ts 驱动程序无法在 Yocto BeagleBone am335x 上注册中断?
- python - 在 python 中获取画布坐标 - 特别是对于 mac
- kotlin - 如何在 kotlin 中随流观察属性?