Java - 跟踪新列表项以便以后删除?

时间:2013-10-21 08:32:38

标签: java list

这似乎是一个非常微不足道的问题,但我无法想出一个简单的解决方案。我确定有一个。

我有一个复选框菜单项(可以选择或不选择的菜单项)。每当它被选中时,我希望它创建一个新对象并将其添加到某个列表中。当取消选择时,我希望从列表中删除该对象。该对象是动态创建的,所以我没有参考它。

我的问题是:如何在取消选择时删除对象?

final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem("My Item");                                
menuItem.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent ae) {
        if (menuItem.isSelected()) {
            someList.add(new someClass());                              
        }
        else {
            someList.remove(??);
        }
    }
});

我想扩展JCheckBoxMenuItem类并向其添加someClass字段,因此我将始终引用新创建的对象。它应该在技术上有效,但似乎不是最优雅的解决方案......

4 个答案:

答案 0 :(得分:2)

在这种情况下,我建议使用Map。您可以将复选框的相应值(例如checkbox1)作为键,将新创建的对象作为值。取消选中该复选框后,您可以获取checkbox名称和(在本例中为checkbox1)并将其从Map中删除。

答案 1 :(得分:1)

根据提供的信息,我将使用我的coustom Action对象来存储创建的对象。这是一个例子(当然非常简单,因为它只创建了一个String,但它证明了目的):

JCheckBoxMenuItem item = new JCheckBoxMenuItem(new AbstractAction("...") {
    // Store the object here.
    private String someObject;

    public void actionPerformed(ActionEvent e) {
        JCheckBoxMenuItem source = (JCheckBoxMenuItem) e.getSource();
        if (source.isSelected()) {
            someObject = "Object " + source.getText(); // trivial.
            someList.add(someObject);
        }
        else {
            someList.remove(someObject);
            someObject = null;
        }
    }
});

答案 2 :(得分:0)

我认为您在检查时会在菜单中添加一个新项目,并且在取消选中时添加的条目将被删除。是这样的吗?

答案 3 :(得分:0)

我认为你需要ArrayList.clear()

    someList.clear()

如果要从列表中删除列表中的所有元素clear()方法。

@Override
    public void actionPerformed(ActionEvent ae) {
        if (menuItem.isSelected()) {
            someList.add(new someClass());                              
        }
        else {
            someList.clear();
        }
    }