从 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 中删除所选项目的主要内容,如果未能解决你的问题,请参考以下文章