IndexOutOfBoundsException при отмене выбора JCheckBox Java - PullRequest
0 голосов
/ 11 мая 2018

У меня есть функция, которая возвращает список выбранных элементов в моем приложении, и я получил 4 JCheckBoxes. У каждого из них есть этот код, чтобы заполнить его из списка объектов, которые у меня есть:

List<Answer> list = new ArrayList<>();
...
jCheckBox1.setText(list.get(0).toString());
jCheckbox1.setActionCommand(String.ValueOf(list.get(0).getid());

Это работает, но проблема в моем itemListener, в котором я использую список выбранных элементов.

List<Answer> selected = new ArrayList<>();

Мой товарСлушатель:

ItemListener item = new ItemListener(){
     @Override
     public void itemStateChanged(ItemEvent e) {
        if (e.getSource() instanceof JCheckBox){
             JCheckBox mycheck = (JCheckBox) e.getSource();

             if (mycheck.isSelected()){                
               selected.add(Integer.parseInt(mycheck.getActionCommand()));
             } else {
               selected.remove(Integer.parseInt(mycheck.getActionCommand()));
             }
};

У меня есть функция, которая возвращает размер для решения проблемы, но, очевидно, проблема в том, что я отменил выбор JCheckBox. Например: если я выбрал 3, функция размера возвращает 3, но если я отменил выбор одного из них и выполнил функцию, возникла ошибка.

Спасибо за помощь.

журнал ошибок:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:657)
    at java.util.ArrayList.remove(ArrayList.java:496)
    at frames.QuizFrame$1.itemStateChanged(QuizFrame.java:128)
    at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2050)
    at javax.swing.AbstractButton$Handler.itemStateChanged(AbstractButton.java:2355)
    at javax.swing.DefaultButtonModel.fireItemStateChanged(DefaultButtonModel.java:455)
    at javax.swing.JToggleButton$ToggleButtonModel.setSelected(JToggleButton.java:272)
    at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:289)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
...