Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JList中删除所选项目_Java_Jlist - Fatal编程技术网

Java 如何从JList中删除所选项目

Java 如何从JList中删除所选项目,java,jlist,Java,Jlist,当用户单击按钮时,我试图从JList中删除所选项目 目前我有这样的想法: private void clickActionPerformed(java.awt.event.ActionEvent evt) { myList.remove(myList.getSelectedIndex()); } @Override public void actionPerformed(ActionEvent e) { switch(e.getActionCommand()){ cas

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

目前我有这样的想法:

private void clickActionPerformed(java.awt.event.ActionEvent evt) {
   myList.remove(myList.getSelectedIndex());
}
@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--]);
        }
    }
...  
单击按钮删除项目时,出现以下错误:

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

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

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

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

            }
        });
DefaultListModel list = new DefaultListModel();
list.add("foo");
然后,您只需在单击“黑名单按钮”时执行此操作:

list.remove(JList.getSelectedIndex());

如果开始从所选索引的最高处删除到最低处,则可以从DefaultListModel中删除多个项目。大概是这样的:

private void clickActionPerformed(java.awt.event.ActionEvent evt) {
   myList.remove(myList.getSelectedIndex());
}
@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--]);
        }
    }
...  

尝试删除对象而不是索引:

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);
私有JList列表;
私有DefaultListModel myobjectListModel;
公共建筑
{
....
myobjectListModel=新的DefaultListModel();
列表=新的JList(myobjectListModel);
....
}
@凌驾
已执行的公共无效操作(操作事件arg0)
{
//获取包含选定对象的列表
List selectedItems=List.getSelectedValuesList();
对于(MyObject o:selectedItems)
myobjectListModel.removeElement(o);

}

单击ActionPerformed属于哪个类别?您需要在按钮中添加一个
ActionListener
,然后覆盖
actionPerformed
。你确定你在给我们看的地方得到了索引越界异常吗?