Java 从JList中删除所选项目

Java 从JList中删除所选项目,java,swing,jlist,Java,Swing,Jlist,有人能告诉我从我的JList中删除所选项目的短方法吗 我在谷歌和这里搜索,但我找到了很多方法。我应该使用哪种方式?列表组件由列表模型支持。因此,从列表视图中删除项目的唯一推荐方法是将其从模型中删除(并刷新视图)。正如@Andreas\D所说,以数据为中心、更抽象的列表模型是解决方案。这可能是一个错误。您应该在JList中显式设置模型。 所以(感谢@kleopatra的评论): DefaultListModel中有几个remove…方法。 顺便说一下,这是一个好问题,因为API(ListModel

有人能告诉我从我的
JList
中删除所选项目的短方法吗


我在谷歌和这里搜索,但我找到了很多方法。我应该使用哪种方式?

列表组件由列表模型支持。因此,从列表视图中删除项目的唯一推荐方法是将其从模型中删除(并刷新视图)。

正如@Andreas\D所说,以数据为中心、更抽象的列表模型是解决方案。这可能是一个错误。您应该在JList中显式设置模型。 所以(感谢@kleopatra的评论):

DefaultListModel中有几个
remove…
方法。
顺便说一下,这是一个好问题,因为API(ListModel)中没有立即的解决方案。

一旦从模型中删除元素,它也将从列表中删除。有关更多信息,请参阅本文。由于列表由模型支持,因此如果对模型执行任何操作,它也会反映在列表上。您只需刷新视图。

获取JList的模型(很可能是一个对象),并通过其
removeElement(object obj)
方法从模型中删除所选项。请参阅本部分的标准Javatopic@JoopEggen:如果你是这么问的话,我不是落选的选民,但我不同意你的看法,因为我认为有一个简单的答案。您从JList(而不是索引)中获取所选对象,如果不为null,则调用模型的one remove方法获取对象:
removeElement(obj)
@JoopEggen:但我几乎投了反对票,这并不是因为问题的“简单性”或缺乏简单性,但是由于原始海报没有显示他的任何代码,所以他试图解决这个问题。如果他没有向我们展示任何东西,我们怎么能猜出他做错了什么?@hovercraftfullofels:同意,但如果一个人不能从JList+ListModel跳到AbstractListModel,然后再跳到DefaultListModel,那就是一个可以理解的拦截器。如果他使用的是DefaultListModel(很可能他是),那么就不需要刷新视图,因为这应该是自动完成的。这或多或少是对一般问题的一般性回答。我不会得到索引,而是所选项目本身,然后调用模型的removeElement方法,该方法接受一个对象参数。同意:ListModel是所有视图集合接口中最小的(既不可变也不可修改)-但这不是OPs的问题:他/她表示已经阅读了教程章节(其中显示的示例与此处相同-减去选中的检查)注意:JList的默认模型不是DefaultListModel,您必须显式设置它。
DefaultListModel model = (DefaultListModel) jlist.getModel();
int selectedIndex = jlist.getSelectedIndex();
if (selectedIndex != -1) {
    model.remove(selectedIndex);
}