简体   繁体   English

如何从JList中删除所选项目

[英]How to remove selected items from JList

I am trying to remove selected items from a JList when the user clicks a button. 我试图在用户单击按钮时从JList中删除所选项目。

At the moment I have something like this: 目前我有这样的事情:

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

When I click the button to remove the items, I get this error: 当我单击按钮删除项目时,我收到此错误:

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

How do I fix this error, and does my code even remove multiple items? 如何修复此错误,我的代码甚至删除了多个项目?

You can delete multiple items from your DefaultListModel if you start deleting from the highest selected index to the lowest. 如果从最高选择索引开始删除到最低值,则可以从DefaultListModel中删除多个项目。 Something like this: 像这样的东西:

@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--]);
        }
    }
...  

Try removing objects rather than indices: 尝试删除对象而不是索引:

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);

} }

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());

            }
        });

I suppose you are using some kind of a ListModel to construct the JList? 我想你正在使用某种ListModel来构造JList? If thats the case you can just do the following: 如果是这种情况,您可以执行以下操作:

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

then you just need to do this when your "Blacklist-Button" was clicked: 那么当你点击“黑名单 - 按钮”时你只需要这样做:

list.remove(JList.getSelectedIndex());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM