Поскольку единственное отличие заключается в значении action
, вы можете поместить код в метод. (Также @Override не требуется, и +=
здесь полезно.)
public void setup(
final AbstractButton button,
final int action
) {
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
proposition += action;
EventQueue.invokeLater(new Runnable() {
public void run() {
updatePropositionPanel();
}
});
}
});
}
Возможно, что invokeLater
бессмысленно, так как вы все равно будете в потоке рассылки событий AWT (EDT).
Если вы добавляете много действий общего назначения, то вы можете упростить их, используя интерфейс, с которым не связан бессмысленный объект события.
Если вы хотите быть хакером, вы можете добавить слушателя в конструктор подкласса.
new ActionHandler(button) { public void action() {
proposition += action;
updatePropositionPanel();
}});
Надеюсь, JDK7 сделает синтаксис Java для такого рода вещей менее подробным. Java, однако, всегда будет несколько многословным.