0

使用 java 版本 9 我有一些测试代码可以从通过将引用传递给 DefaultListModel 创建的列表中删除一个项目。这就是我所做的。

  1. 创建一个 DefaultListModel 对象
  2. 通过调用 addElement 向其中添加 8 个元素 (A..H)
  3. 通过调用 removeElement 删除项目
  4. 创建一个 Jlist 将我的 DefaultListModel 的引用传递给它
  5. 列表框显示所有 8 个项目,没有任何内容被删除。代码

     philosophers = new DefaultListModel<String>();
     philosophers.addElement( "A" );
     philosophers.addElement( "B" );
     philosophers.addElement( "C" );
     philosophers.addElement( "D" );
     philosophers.addElement( "E" );
     philosophers.addElement( "F" );
     philosophers.addElement( "G" );
     philosophers.addElement( "H" );
     philosophers.removeElement(1);
     lista = new JList<String>( philosophers );      
    
4

1 回答 1

2

当您遇到问题时,请点击 JavaDocs ...

DefaultListModel#removeElement

公共布尔删除元素(对象 obj)
删除

此列表中参数的第一次(最低索引)出现。

参数:
obj - 要移除的组件

这里有趣的一点是,参数是一个Object,而不是一个索引。这意味着,使用 Java 的自动装箱,您实际上是在尝试删除Integer(1)模型中不存在的 a 。

相反,如果你做了类似的事情philosophers.removeElement("B");,你可能会有更多的运气。

但是,如果我们多读一点 JavaDocs,我们会发现

DefaultListModel#remove

公共 E 删除(整数索引)
删除元素

此列表中的指定位置。返回从列表中删除的元素。

如果索引超出范围 (index < 0 || index >= size()),则引发 ArrayIndexOutOfBoundsException。

参数:
index - 要移除的元素的索引

啊,这听起来更像是你所追求的

于 2018-05-27T22:09:32.007 回答