从 JList 中删除所选项目

Posted

技术标签:

【中文标题】从 JList 中删除所选项目【英文标题】:Delete selected item from JList 【发布时间】:2012-03-13 05:52:44 【问题描述】:

谁能告诉我从我的JList 中删除所选项目的简便方法?

我在google和here上搜索过,但我发现了很多方法。我应该使用哪种方式?

【问题讨论】:

获取 JList 的模型(可能是 DefaultListModel 对象)并通过其 removeElement(Object obj) 方法从模型中删除选定的项目。 在这个主题上查看标准 Java Swing tutorial @JoopEggen:如果这就是你的要求,我不是反对者,但我不同意你的观点,因为我认为有一个简单的答案。您从 JList(不是索引)中获取所选对象,如果不是 null,则调用模型的一个获取对象的 remove 方法:removeElement(obj) @JoopEggen:但我几乎投了反对票,不是因为问题的“简单性”或缺乏问题,而是因为原始发帖人没有显示他的任何代码尝试解决这个问题。如果他什么都不告诉我们,我们怎么能猜出他做错了什么? @HovercraftFullOfEels:同意,但是如果不能从 JList+ListModel 跳转到 AbstractListModel 再到 DefaultListModel,这是一个可以理解的阻碍。 【参考方案1】:

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

【讨论】:

如果他使用的是 DefaultListModel(很有可能他是),则无需刷新视图,因为这应该自动完成。 这或多或少是对一般问题的一般回答。【参考方案2】:

正如@Andreas_D 所说,以数据为中心,更抽象的 ListModel 是解决方案。这可以是DefaultListModel。您应该在 JList 中显式设置模型。 所以(感谢@kleopatra 的评论):

DefaultListModel model = (DefaultListModel) jlist.getModel();
int selectedIndex = jlist.getSelectedIndex();
if (selectedIndex != -1) 
    model.remove(selectedIndex);

DefaultListModel 中有几个remove... 方法。 顺便说一句,这是一个很好的问题,因为 API (ListModel) 中没有直接的解决方案。

【讨论】:

我不会获取索引,而是获取所选项目本身,然后调用模型的 removeElement 方法,该方法采用 Object 参数。 同意:ListModel 是所有视图集合接口中最小的一个(既不可变也不可修改)——但这不是 OP 的问题:她/他声明已阅读教程章节(显示相同像你在这里做的样本 - 减去被选中的检查)注意:JList 的默认模型是不是 DefaultListModel,你必须明确设置它。【参考方案3】:

从模型中删除元素后,它也会从列表中删除。您可以参考这篇JList 文章了解更多信息。由于列表由模型支持,如果您对模型执行任何操作,它也会反映在列表中。你只需要刷新视图。

【讨论】:

以上是关于从 JList 中删除所选项目的主要内容,如果未能解决你的问题,请参考以下文章

将所选项目滚动到 JList 的顶部

从 JList 中删除一行

禁用 JList 中的项目

刷新 JFrame 中的 JList

Flex 4 从火花 DropDownList 中删除所选项目

JList 右键单击​​显示菜单(使用、删除、取消)