我有一个小问题,我敢肯定这是一个愚蠢的错误,但是我去了。
我有一个GUI,其中除其他对象外还包含JComboBox和JButton。 ComboBox(在我的代码中称为orderTypeChoices)包含名为“ OrderType”的“枚举”中的对象名称。 这是我的列举:
public enum OrderType {
BUILD_SCREENING_CENTER,
INCREASE_TAXES,
RESEARCH_MEDICINE,
RESEARCH_VACCINE
}
在我的代码中,有一个称为executeOrder的方法,该方法根据OrderType执行其他代码。我非常确定错误不在这里。 上下文是我需要在JComboBox中检查选择了哪个项目,因此当我单击按钮时,executeOrder将使用选择的项目。
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String orderName = (String) cloudPandemic.orderTypeChoices.getSelectedItem();
for (OrderType orderType : OrderType.values()) {
if (orderType.name().equals(orderName)) {
System.out.println(orderType.name());
cloudPandemic.executeButton.addActionListener(e1 -> cloudPandemic.simulation.executeOrder(OrderType.valueOf(orderName)));
break;
}
}
}
};
this.cloudPandemic.orderTypeChoices.addActionListener(actionListener);
因此,我添加了2个ActionListeners(一个添加到ComboBox,另一个添加到Button)。我将String的项目名称存储在String中,并检查枚举中的对象之一是否与namewise匹配。如果是这样,我向按钮添加一个ActionListener,在其中使用executeExecute方法。但是,我注意到它趋于累积:如果我选择第一个项目,它将起作用,如果我选择另一个项目,它将在该项目和我选择的第一个项目上执行,依此类推。
我想知道我是否错过了什么,因为我不知道为什么ActionPerformed执行过去的Actions。
预先感谢, 票价。