我正在使用GridBag布局在代码中生成一些J组件并排列它们。我的布局由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);
}
我遇到的问题是,当我设置任何一个JLabel中的文本时,它们会改变宽度并影响布局的其余部分,即使我设置的文本宽度明显小于JLabel的宽度。下面的两个屏幕截图演示了我的意思(红色和蓝色边框是为了调试而添加的):
更改JLabel文本之前的布局: ![](https://istack.dev59.com/Skl3U.webp)
更改底部JLabel文本后的布局。请注意,标签已变大。 ![](https://istack.dev59.com/tdLIg.webp)
我将底部JLabel上的文本设置为“-12”。即使JLabel的宽度似乎比文本宽得多,它仍然改变了大小,影响了布局的其余部分。
这是为什么?我该怎么做才能防止这种情况发生?