Существует небольшая вероятность того, что изменения в ваших флажках не будут видны, потому что вы запрашиваете их из другого потока (например, основного) вместо потока отправки событий (EDT). Качели не потокобезопасны. Когда вы устанавливаете флажки, значения устанавливаются в EDT, но другие потоки могут сохранять старое состояние в памяти и не проверять, было ли оно обновлено. Итак, первое, что вам нужно сделать, это убедиться, что когда вы проверяете состояния своих флажков, вы делаете это из EDT, используя вызов SwingUtilities.invokeAndWait()
или SwingUtilities.invokeLater()
.
Для получения дополнительной информации о том, почему это происходит, найдите Thread Thread в Java.
(Кроме того, не поддавайтесь искушению использовать синхронизацию для решения проблемы, иначе вы можете зайти в тупик в вашем графическом интерфейсе).
Один последний совет: использование нового синтаксиса Java for-loop делает код более легким для чтения и записи, а также более эффективным в некоторых случаях. Ваш код ...
for(int i = 0; i < checkBoxes.size() ; i++){
myPanel.add(checkBoxes.elementAt(i));
}
... может превратиться в ...
for(JCheckBox c : checkBoxes) {
myPanel.add(c);
}
Это работает с массивами и всем, что является Iterable
(включая Collection
).