2016-04-12 4 views
0

У меня проблема с JList, и мне нужна ваша помощь! Я застрял в течение дня.Java JList не отвечает правильно после добавления нового элемента

  • Это мой JList:

    DefaultListModel lm = new DefaultListModel<>(); 
    
    // add "a", "b", "c" to lm 
    ... 
    
    list = new JList(lm); 
    
  • Мой первоначальный JList:

    |a| 
    |b| 
    |c| 
    
  • Если пользователь дважды щелкает все детали, я буду создавать новый пункт "d" и добавьте его в JList и обновите дисплей JList

    list.addMouseListener(new MouseAdapter() { 
        public void mouseClicked(MouseEvent evt) { 
         if (evt.getClickCount() == 1) 
         { 
          lm.add(..., ...); 
          list = new JList(lm); 
         } 
    
  • Теперь у меня есть свой обновленный JList:

    |a| 
    |b| 
    |c| 
    |d| 
    
  • Проблема заключается в том: теперь, когда я дважды щелкните любой элемент а, Ь, с, или г, чтобы добавить новый элемент (например, , добавьте «e» в конец JList), ничего не происходит. Мой JList больше не отвечает.

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 
    at java.util.ArrayList.elementData(Unknown Source) 
    at java.util.ArrayList.get(Unknown Source) 
    at mainprocess.Main$4.valueChanged(Main.java:376) 
    at javax.swing.JList.fireSelectionValueChanged(Unknown Source) 
    at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source) 
    at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source) 
    at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source) 
    at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(Unknown Source) 
    at javax.swing.JList.setValueIsAdjusting(Unknown Source) 
    at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(Unknown Source) 
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) 
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
    Exception in thread "AWT-EventQueue-0"  java.lang.ArrayIndexOutOfBoundsException 
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException 
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException 
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException 
    

Может кто-нибудь помочь?

+1

Я не могу представить, что это закончится хорошо, когда вы восстановите все значение 'list' while * внутри события *, прикрепленного к этому списку. Есть ли способ изменить элементы, содержащиеся в списке, не переделав новый 'JList'? – mellamokb

ответ

4

Вы не должны переназначать list с помощью new JList, просто удалите эту линию.

if (evt.getClickCount() == 1) 
    { 
     lm.add(..., ...); 
    } 
+0

Спасибо, миллион! – Liar

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