2016-04-12 16 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| 
    
  • 問題がある:今、私は新しい項目を追加するために、B、C、Dのいずれかの任意の項目をダブルクリックしたときから(例えばJListの最後に "e"を追加する)、何も起こりません。私の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' 'の値全体を再構築するときも終了になるだろうと想像することはできません。新しい 'JList'を作り直すことなく、リストに含まれる項目を変更する方法はありますか? – mellamokb

答えて

4

listnew JListに再割り当てしないでください。その行を削除してください。

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

ありがとうございます! – Liar

関連する問題