Вопрос по java, swing – Как посчитать количество проверенных JCheckboxes?

3

У меня есть 11 различных флажков в моем JFrame, и я хочу иметь возможность получать число всякий раз, когда проверяется, сколько всего проверено. Я знаю, как настроить ItemListener и посмотреть, если один проверен, но я не уверен, как я мог бы проверить все из них ..

РЕДАКТИРОВАТЬ:

cblist - это ArrayList, содержащий 11 JCheckBoxes. Я дал каждому JCheckBox прослушиватель элементов, и вот класс, используемый при нажатии флажков ...

private class CheckClass implements ItemListener{
      public void itemStateChanged(ItemEvent event){
         for(cblist.isChecked){
             ingnum++;
         }

      }
  }

В цикле for, как проверить все элементы ArrayList ... Я понимаю, что мой синтаксис сейчас неверен.

@bartvbl: ваш комментарий мне кажется правильным. Почему бы не опубликовать его как таковой, чтобы мы могли проголосовать за него? Hovercraft Full Of Eels
Если вы просто заботитесь о количестве выбранных JCheckBoxes, просто определите целочисленный счетчик и добавьте этот оператор if для каждого ItemListener или ActionListener. Каждый раз, когда установлен флажок, счетчик увеличивается, каждый раз, когда флажок снимается, он уменьшается. if (jCheckBox1.isSelected ()) counter ++; еще счетчик--; Costis Aivalis
Вы можете дать каждому из этих ItemListeners ссылку на объект, который вы создаете и который имеет два метода; один, который увеличивает количество выбранных флажков, и один, который уменьшает его. Всякий раз, когда пользователь выбирает или снимает флажок, вы можете вызывать соответствующий метод этого класса. Тогда вам нужно только создать метод для считывания числа из этого класса, и вы сделали =) Bartvbl

Ваш Ответ

4   ответа
2

countChecked и сделать рамкуimplements ItemListener

для всехJCheckBox в твоем кадреchkBox.addItemListener(this) и обрабатывать события

public class MyFrame extends JFrame implements ItemListener{

private int countChecked = 0;
private JPanel contentPane;
    public MyFrame() {
    contentPane = new JPanel();
    setContentPane(contentPane);
    JCheckBox chckbx = new JCheckBox("New check box");
    contentPane.add(chckbx, BorderLayout.CENTER);
    chckbx.addItemListener(this);
}

@Override
public void itemStateChanged(ItemEvent ie) {
    if(ie.getSource().getClass() == JCheckBox.class)
    {
        if(ie.getStateChange() == ie.SELECTED)
            countChecked++;
        else if(ie.getStateChange() == ie.DESELECTED)
            countChecked--;
    }

} 
}
2

не самое лучшее) состоит в том, чтобы сохранить все отмеченные флажки в списке.

Так что слушатель для всего JCheckBoxex будет выглядеть так:

void stateChanged(ChangeEvent e){
    if( CheckBox is checked){
       // add the checkbox in the list.
    } else {
        // remove CheckBox in the list.
     }
}

Чтобы узнать, сколько проверено checkBox, просто посчитайте размер списка.

С уважением.

6

ArrayList<JCheckBox> и, при желании, просто переберите список, чтобы увидеть, какие флажки установлены.

Другое возможное решение: если у вас есть табличная структура, используйте JTable, который содержит логические значения в своей модели, затем при желании выполните итерацию по строкам TableModel, чтобы увидеть, какие строки содержат значения Boolean.TRUE.

@JesusSqueegee: вы бы использовали простой цикл for, который получает каждый экземпляр JCheckBox из ArrayList, проверяет его выбор черезisSelected() Метод (познакомьтесь с API - он должен быть вашим лучшим другом прямо сейчас) в блоке if, и если true, он увеличивает переменную int counter. Попробуйте, и давайте посмотрим, что вы придумали.
Большое спасибо, но мой вопрос на самом деле еще проще, ха-ха. Я понимаю этот процесс, но не понимаю, какой синтаксис используется для проверки каждого элемента в ArrayList. Wilson
не важно, понял. Спасибо! Wilson
@JesusSqueegee: я думал, что только что сказал вам это - вы перебираете ArrayList с циклом for - это не что иное, как самая простая Java. Уточните пожалуйста - что именно вас смущает? Пожалуйста, покажите, что вы пытались изменить в качестве исходного вопроса.
Как будет выглядеть мой код, чтобы проверить все JCheckboxes в массиве списков или нет, выбраны ли они? Я не уверен, как написать код, который будет проверять каждый элемент в AL. Wilson
1

ActionPerformed & quot; прослушиватель событий для всех ваших флажков & amp; вызовите этот метод внутри метода обработчика событий, чтобы получить количество отмеченных флажков:

int countCheckedCheckBoxes(){
    Component[] cs = getRootPane().getComponents();
    int checkNums = 0;
    for(Component c : cs){
        if(c instanceof JCheckBox){
            if(((JCheckBox)c).isSelected()){
                checkNums++;
            }
        }
    }
    return checkNums;
}

getRootPane должен вернуть вашей главной панели, какие компоненты расположены на ней.

Похожие вопросы