Специальный метод должен вызываться после любого выполнения AbstractAction
Пожалуйста, извините за неопределенный заголовок вопроса, но обычно я не делаю такого рода вещи. Итак, у меня есть следующая проблема:
Я разрабатываю всплывающее меню для конкретного приложения, в котором каждый пункт меню связан с определенным действием:
public class CanvasMenu extends JPopupMenu {
public CanvasMenu(){
this.add(new AbstractAction("Do some operation") {
@Override
public void actionPerformed(ActionEvent arg0) {
doSomeStuff1();
cleanup(); // has to be done after every menu operation
}
});
this.add(new AbstractAction("Other operation") {
@Override
public void actionPerformed(ActionEvent e) {
doSomeOtherStuff();
cleanup(); // has to be done after every menu operation
}
});
}
}
Я где-то читал, что AbstractAction
используется для таких задач, где вы хотите добавить пункты меню и связать их с каким-либо действием. На самом деле я хочу не только два таких действия, но и несколько десятков из них.
Проблема заключается в cleanup
вещь. cleanup
должно быть после того, как любое из этих действий было выбрано. Это означает, что если я продолжу описанным выше образом, мне придется написать cleanup()
для каждого AbstractAction
,
Есть ли какой-либо (простой / элегантный / красивый) способ или шаблон, чтобы избежать написания cleanup()
снова и снова? Т.е. возможно ли придумать что-то, что получит только действие, и после его выполнения автоматически вызовет cleanup
?
1 ответ
Это один из шаблонов:
abstract class ActionWithCleanup extend AbstractAction {
@Override
public final void actionPerformed(ActionEvent arg0) {
myAction();
cleanup(); // has to be done after every menu operation
}
public abstract void myAction();
}
...
this.add(new ActionWithCleanup("Do some operation") {
@Override
public void myAction() {
doSomeStuff1();
}
});