Как реализовать слушатель действия с общими перечислениями? - PullRequest
0 голосов
/ 27 мая 2019

Я в процессе рефакторинга своего приложения, и мой учитель рекомендовал заменить код, сгенерированный построителем GUI, на более общий.

Сейчас у каждого JMenuItem есть свой собственный слушатель действий.То, чего я пытаюсь добиться, - это своего рода универсальная функция управления для каждого пункта меню с использованием перечислений в одном слушателе действий.Код ниже должен дать вам общее представление.clE является ключом enum, и я считаю, что enum должен реализовать интерфейс для чтения его метки.

Я провел небольшое исследование и уверен, что это что-то простое, но я пока не могу полностью понять это.Заранее спасибо!

public class JECheckBox<E extends ENUM_Label_INTF<?>> extends JCheckBox {

     private final E clE;

     // +++++++ CONSTRUCTOR +++++++++
     public JECheckBox(final E clE) {
         super( ((GetLabelINTF) clE).GetLabel() );
         this.clE = clE;
     }

     public E GetKey() {
         return clE;
     }
}

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Я полагаю, что enum должен реализовать интерфейс для чтения своей метки.

Если вы хотите прочитать текст флажка, то вы создаете универсальный слушатель, выполняя что-то вроде:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        JCheckBox checkbox = (JCheckBox)e.getSource();
        System.out.println( checkbox.getText() );
    }
};

Теперь вы можете добавить действие к каждой проверкеbox.

Обратите внимание, Action является более универсальным ActionListener.Прочитайте раздел из учебника по Swing на Как использовать действия для получения дополнительной информации и примеров.

0 голосов
/ 27 мая 2019

Не показывайте, что вы подразумеваете под общими перечислениями. Попробуйте дать каждому элементу меню (или любому компоненту) свое имя, используя component.setName (SomeEnum.soneValue.toString ()). Затем получите имя в слушателе действия и выполните переключение (SomeEnum.valueOf (name).

...