【问题标题】:How to remove selected items from JList如何从 JList 中删除选定的项目
【发布时间】:2014-05-09 18:00:10
【问题描述】:

当用户单击按钮时,我试图从 JList 中删除选定的项目。

目前我有这样的事情:

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

当我单击按钮删除项目时,我收到此错误:

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

如何修复此错误,我的代码是否会删除多个项目?

【问题讨论】:

  • clickActionPerformed 属于哪个类?您需要将ActionListener 添加到您的按钮,然后覆盖actionPerformed。您确定在您向我们展示的地方获得了 index-out-of-bounds 异常吗?

标签: java jlist


【解决方案1】:

如果您从选定的最高索引开始删除到最低索引,则可以从 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);
    

    }

    【讨论】:

      【解决方案3】:
      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());
      
                  }
              });
      

      【讨论】:

        【解决方案4】:

        我想您正在使用某种 ListModel 来构造 JList?如果是这种情况,您可以执行以下操作:

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

        那么您只需要在单击“黑名单按钮”时执行此操作:

        list.remove(JList.getSelectedIndex());
        

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 2014-11-14
          • 2016-07-07
          • 1970-01-01
          • 1970-01-01
          • 2015-11-16
          • 1970-01-01
          • 2011-07-09
          相关资源
          最近更新 更多