我在代码中生成一些 JComponent 并使用 GridBag 布局来排列它们。我的布局由 12 行和 3 列组成,每行由一个 JSlider、一个 JCheckBox 和一个 JLabel 组成。这是我用来生成 UI 的代码:
final int NUM_MOTORS = 12;
// This is the panel I'm adding the components to.
pnlMotorSliders.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
for (int i = 0; i < NUM_MOTORS; ++i) {
c.gridy = i;
// Create the slider
JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 10, 4085, 10);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.weightx = 0.9;
pnlMotorSliders.add(slider, c);
// Create the checkbox
JCheckBox checkBox = new JCheckBox();
checkBox.setOpaque(true);
checkBox.setBackground(Color.blue);
c.fill = GridBagConstraints.NONE;
c.gridx = 1;
c.weightx = 0.1;
pnlMotorSliders.add(checkBox, c);
// Create the current label
JLabel label = new JLabel("0");
label.setBorder(BorderFactory.createLineBorder(Color.red));
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 2;
c.weightx = 0.2;
pnlMotorSliders.add(label, c);
}
我遇到的问题是,当我在任何 JLabels 中设置文本时,它们会更改其宽度并影响布局的其余部分,即使我设置的文本宽度看起来比JLabel 的宽度。以下两个屏幕截图演示了我的意思(红色和蓝色边框用于调试目的):
我已将底部 JLabel 上的文本设置为“-12”。尽管 JLabel 看起来比文本宽得多,但它已经改变了其大小,影响了布局的其余部分。
为什么会发生这种情况?我可以采取什么措施来防止这种情况发生?
您可以通过设置最小、首选和最大尺寸来固定标签的尺寸:
label.setMinimumSize(width, height);
label.setPreferedSize(width, height);
label.setMaximumSize(width, height);
还要确保将 GridBagConstraints#fill 设置为 NONE,尽管我不确定这是否仍然有必要(我认为是)。
编辑:顺便说一句,要摆脱聚焦组件周围那些令人讨厌的虚线,您可以将其设置为不可聚焦:
slider.setFocusable(false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)