我在代碼中生成一些JComponents並使用GridBag佈局來排列它們。我的佈局由12行和3列組成,每行由JSlider,JCheckBox和JLabel組成。下面的代碼我用生成UI:如何在文本更改時阻止JLabel更改其大小?
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爲「-12」。儘管JLabel看起來比文本寬得多,但它已經改變了它的大小,影響了其餘的佈局。
爲什麼會發生這種情況,我該怎麼做才能防止它發生?
如果您防止標籤擴展以適應其文本,則可能會變得無法閱讀;更多[這裏](http://stackoverflow.com/q/7229226/230513)。 – trashgod