Como você impede que um JLabel altere seu tamanho quando o texto é alterado?

Estou gerando alguns JComponents no código e usando o layout GridBag para organizá-los. Meu layout consiste em 12 linhas e 3 colunas, com cada linha consistindo de um JSlider, um JCheckBox e um JLabel. Aqui está o código que estou usando para gerar a interface do usuário:

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);
}

O problema que estou tendo é que quando eu definir o texto em qualquer um dos JLabels, eles mudam sua largura e afetam o resto do layout, mesmo que a largura do texto que eu estou definindo pareça ser muito menor do que o largura do JLabel. As duas capturas de tela a seguir demonstram o que quero dizer (as bordas vermelha e azul eram para fins de depuração):

Eu configurei o texto no JLabel inferior para "-12". Embora o JLabel pareça ser muito mais amplo que o texto, ele alterou seu tamanho, afetando o restante do layout.

Por que isso está acontecendo e o que posso fazer para evitar isso?

questionAnswers(4)

yourAnswerToTheQuestion