1

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

我有一个复选框菜单项(可以选择或不选择的菜单项)。Whenever it's selected I want it to create and add a new object to a certain 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

4 回答 4

2

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

于 2013-10-21T08:38:09.160 回答
1

根据提供的信息,我将使用我的自定义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;
        }
    }
});
于 2013-10-21T09:06:40.317 回答
0

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

于 2013-10-21T08:37:38.113 回答
0

我认为你需要ArrayList.clear()

    someList.clear()

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

@Override
    public void actionPerformed(ActionEvent ae) {
        if (menuItem.isSelected()) {
            someList.add(new someClass());                              
        }
        else {
            someList.clear();
        }
    }
于 2013-10-21T08:39:11.543 回答