这似乎是一个非常微不足道的问题,但我无法想出一个简单的解决方案。我确定有一个。
我有一个复选框菜单项(可以选择或不选择的菜单项)。每当它被选中时,我希望它创建一个新对象并将其添加到某个列表中。当取消选择时,我希望从列表中删除该对象。该对象是动态创建的,所以我没有参考它。
我的问题是:如何在取消选择时删除对象?
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字段,因此我将始终引用新创建的对象。它应该在技术上有效,但似乎不是最优雅的解决方案......
答案 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();
}
}