Почему ActionPerformed выполняется несколько раз? - PullRequest
0 голосов
/ 16 июня 2019

У меня небольшая проблема, и я уверен, что это глупая ошибка, но здесь я иду.

У меня есть GUI, содержащий среди других объектов JComboBox и JButton.ComboBox (называемый в моем коде orderTypeChoices) содержит имена объектов в «перечислении» с именем OrderType.Это мое перечисление:

public enum OrderType {
BUILD_SCREENING_CENTER,
INCREASE_TAXES,
RESEARCH_MEDICINE,
RESEARCH_VACCINE

}

В моем коде есть метод executeOrder, который выполняет другой код, в зависимости от OrderType.Я почти уверен, что ошибки здесь нет.Контекст заключается в том, что мне нужно проверить в JComboBox, какой элемент выбран, поэтому, когда я нажимаю на кнопку, executeOrder будет использовать то, что выбрано как Item.

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 и другой для кнопки).Я сохраняю в строке String имя элемента и проверяю в своем перечислении, совпадает ли один из объектов в нем по имени.Если это так, я добавляю ActionListener к кнопке, в которой я использую метод executeOrder.Однако я заметил, что он имеет тенденцию накапливаться: если я выберу сначала один элемент, он будет работать, если я выберу другой элемент, он будет выполняться как для этого элемента, так и для первого элемента, который я выбрал и т. Д.

Мне было интересно, что я что-то пропустил, потому что не понимаю, почему ActionPerformed выполняет прошлые действия.

Заранее спасибо, Тарифы.

...