2015-06-29 5 views
1

У меня есть java JPanel с 16 JCheckBoxes, и я хочу, чтобы пользователь выбирал хотя бы один, прежде чем отправлять форму. Единственный способ, которым я это знаю, - это огромный оператор if, который смотрит на логическое значение метода isSelected(), но это кажется неэффективным. Так что мне было интересно, есть ли более быстрый способ проверить, не сняты ли все ящики.Быстрый выбор, если все флажки не выбраны

+0

Правильно, и у меня есть слушатель. Мне было интересно, есть ли более быстрый способ проверить логическое использование слушателей. Я не хочу проходить и проверять каждую кнопку. –

ответ

4

Вы не нуждаетесь в заявлении if. Вы можете сделать это с большой логическое выражение с помощью ||:

boolean somethingChecked = box1.isSelected() 
    || box2.isSelected() 
    || ...; 

или, если коробки находятся в массиве (более предпочтительно), цикл:

boolean somethingSelected = false; 
for (JCheckBox box : boxes) { 
    if (box.isSelected()) { 
     somethingSelected = true; 
     break; 
    } 
} 

В качестве альтернативы, вы можете использовать ItemListener прилагается к каждому JCheckBox, чтобы отслеживать количество проверяемых коробок:

int selectionCount; 
ItemListener boxListener = new ItemListener() { 
    @Override public void itemStateChanged(ItemEvent e) { 
     if (e.getStateChange() == ItemEvent.SELECTED) { 
      selectionCount++; 
     } else { 
      selectionCount--; 
     } 
    } 
}; 

(Обратите внимание, что если это все, что ItemListener делает, петь le экземпляр может быть прикреплен ко всем ячейкам.) selectionCount должен быть инициализирован на количество первоначально проверенных ящиков. Затем в соответствующей точке (точках) в вашем коде вы можете просто проверить, больше ли selectionCount больше нуля.

3

Это будет делать трюк я считаю:

public boolean validatePanel(JPanel panel) { 
    for (Component component : panel.getComponents()) { 
     if(component instanceof JCheckBox){ 
      JCheckBox c = (JCheckBox) component; 
      if(c.isSelected()){ 
      return true; 
      } 
     } 
    } 
    return false; 
} 

Этот метод получает JPanel и получить все компоненты на ней. Затем проверьте все, тогда, если это флажок, он передаст компонент в CheckBox, чтобы получить доступ к методу isSelected. Если какой-либо флажок установлен, он вернет true, если он закончит foreach, не возвращая ни одного истинного, это означает, что флажок не выбран.

Смежные вопросы