2014-03-30 52 views
2

我試圖從用戶單擊按鈕時從JList中刪除選定的項目。如何從JList中刪除選定的項目

目前,我有這樣的事情:

private void clickActionPerformed(java.awt.event.ActionEvent evt) { 
    myList.remove(myList.getSelectedIndex()); 
} 

當我按一下按鈕,刪除的項目,我得到這個錯誤:

java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3 

如何解決這個錯誤,並我的代碼甚至刪除多個項目?

+0

爲了不'clickActionPerformed'屬於什麼階級?你需要添加一個'ActionListener'到你的按鈕,然後覆蓋'actionPerformed'。你確定在你向我們展示的地方得到索引超出界限的例外嗎? – user1803551

回答

1
Object[] oo=new Object[] { "Clark", "Skill" }; 
     for(Object o :oo) 
      model.addElement(o); 
     final JList list = new JList(model); 

     JButton btnDelete = new JButton("Delete"); 
     btnDelete.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 

       if(list.getSelectedIndex()>=0) 
       model.remove(list.getSelectedIndex()); 

      } 
     }); 
+0

不起作用... – user2525364

1

我想你正在使用某種ListModel來構造JList?如果多數民衆贊成的情況下,你可以做到以下幾點:

DefaultListModel list = new DefaultListModel(); 
list.add("foo"); 

,那麼你只需要做到這一點你的「黑名單按鈕」被點擊時:

list.remove(JList.getSelectedIndex()); 
4

您可以從您的DefaultListModel刪除多個項目如果您開始從最高選定索引刪除到最低。事情是這樣的:

@Override 
public void actionPerformed(ActionEvent e) { 

    switch(e.getActionCommand()){ 
    case "Remove": { 
     int index = this.list[0].getSelectedIndices().length - 1; 

     while (this.list[0].getSelectedIndices().length != 0) { 
      this.defaultListModel[0].removeElementAt(this.list[0].getSelectedIndices()[index--]); 
     } 
    } 
... 
2

嘗試刪除對象,而不是指數:

private JList<MyObject> list; 
private DefaultListModel<MyObject> myobjectListModel; 
public FabricaCoches() 
{ 
.... 
myobjectListModel = new DefaultListModel<MyObject>(); 
list = new JList<MyObject>(myobjectListModel); 
.... 
} 
@Override 
public void actionPerformed(ActionEvent arg0) 
{ 
    // get a list with selected objects 
    List<MyObject> selectedItems = list.getSelectedValuesList(); 

    for (MyObject o: selectedItems) 
     myobjectListModel.removeElement(o); 

}