Jak powstrzymać JLabel przed zmianą rozmiaru po zmianie tekstu?

Generuję niektóre JComponents w kodzie i wykorzystuję układ GridBag, aby je rozmieścić. Mój układ składa się z 12 wierszy i 3 kolumn, przy czym każdy wiersz składa się z JSlider, JCheckBox i JLabel. Oto kod, którego używam do generowania interfejsu użytkownika:

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

Problem, jaki mam, polega na tym, że kiedy ustawiam tekst w którymkolwiek z etykiet JLab, zmieniają one swoją szerokość i wpływają na resztę układu, nawet jeśli szerokość tekstu, którą ustawiam, wydaje się być znacznie mniejsza niż szerokość JLabel. Poniższe dwa zrzuty ekranu pokazują, co mam na myśli (czerwone i niebieskie obramowania służyły do ​​debugowania):

Ustawiłem tekst na dole JLabel na „-12”. Nawet jeśli JLabel wydaje się być znacznie szerszy niż tekst, zmienił swój rozmiar, wpływając na resztę układu.

Dlaczego tak się dzieje i co mogę zrobić, aby temu zapobiec?

questionAnswers(4)

yourAnswerToTheQuestion