По имени вы, кажется, имеете в виду сохранение экземпляра кнопки в локальной переменной вашего непосредственного метода. Попытка избежать этого может затруднить чтение вашего кода. Но чтобы ответить на ваш вопрос:
Самый очевидный способ - использовать старую, но недавно популярную идиому с двойными скобками.
alphabetPanel.add(new JButton("<html><center>" + (char)i) {{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}});
Обратите внимание, что в этом случае, поскольку я не окончательный, его нельзя будет использовать из анонимного внутреннего класса. Либо присвойте его другой (окончательной) переменной, либо переформулируйте цикл.
Другой путь - пройти через Действие. (Обычно я бы рекомендовал избегать действий, поскольку они являются хэш-таблицей бедного человека. Однако ButtonModel «хорош».)
alphabetPanel.add(new JButton(new AbstractAction("<html><center>" + (char)i) {
public void actionPerformed(ActionEvent event) {
...
}
}));
Тогда, конечно, есть библиотека, специфичная для приложения:
Form alphabetForm = new Form(alphabetPanel);
for (char c='A'; c <= 'Z'; ++c) {
alphabetForm.button("<html><center>" + c, new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}