Вы можете не осознавать, что на самом деле в вашей программе установлены два флажка!
Я предполагаю, что ваш класс выглядит примерно так:
public class Checklist extends JFrame {
private JCheckBox one;
public Checklist() {
JCheckBox one = new JCheckBox("CT scan performed");
one.addItemListener(new CheckBoxListener());
this.add(one);
}
}
У вас есть две копии "одного"", частный JCheckBox one", который принадлежит Checklist, и "JCheckBox one = ..." в вашем конструкторе.Затем вы заметите, что когда вы вызываете
one.addItemListener(new CheckBoxListener());
this.add(one);
, вы фактически используете временное «одно» в конструкторе, которое НЕ совпадает с «одним» в верхней части вашего класса!
Теперь, когда вы звоните
if(e.getSource() == one)
, вы теперь используете «один» в верхней части вашего класса, который НЕ является флажком, который вы видите в своем окне!
Вот почему удаление этого «JCheckBox» заставляет вашу программу работать - теперь «один» в вашем конструкторе такой же, как «один» в верхней части вашего класса.
Чтобы сделать это более понятным,следующий код - это то, что вы ДЕЙСТВИТЕЛЬНО делаете в своем неработающем примере:
public class Checklist extends JFrame {
private JCheckBox one;
public Checklist() {
JCheckBox anotherOne = new JCheckBox("CT scan performed");
anotherOne.addItemListener(new CheckBoxListener());
this.add(anotherOne);
}
}
...
if(e.getSource() == one) //not equal to anotherOne!