添加新项目后,Java JList无法正确响应

时间:2016-04-12 17:57:45

标签: java

我使用JList时遇到问题,我需要你的帮助!我被困了一天。

  • 这是我的JList:

    DefaultListModel lm = new DefaultListModel<>();
    
    // add "a", "b", "c" to lm
    ...
    
    list = new JList(lm);
    
  • 我的初始JList:

    |a|
    |b|
    |c|
    
  • 如果用户双击任何项目,我将创建一个新项目&#34; d&#34;并将其添加到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|
    
  • 问题是:从现在开始,当我双击a,b,c或d中的任何项目添加新项目时(例如,添加&#34; e&#34;到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 个答案:

答案 0 :(得分:3)

您不应该使用list重新分配new JList,只需删除该行。

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