По имени, вы, кажется, означает хранение экземпляра кнопки в локальной переменной вашего непосредственного метода. Попытка избежать этого, скорее всего, сделает ваш код более трудным для чтения. Но ответ на ваш вопрос:
Наиболее очевидным способом является использование старой, но вновь популярной идиомы с двойной привязкой.
alphabetPanel.add(new JButton("<html><center>" + (char)i) {{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}});
Обратите внимание, что в этом случае, поскольку я не является окончательным, он не будет использоваться из анонимного внутреннего класса. Либо присвойте его другой (конечной) переменной, либо переформулируйте цикл.
Другой маршрут - пройти через действие. (Обычно я предлагаю избегать действий, как они этого нужна просто бедняка Hashtable 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) {
...
}
});
}
для по какой-то причине я думал, что работающий прослушиватель работает так, что после его создания он каким-то образом останавливается там в коде до тех пор, пока не будет выполнено действие, но я думаю, что это побеждает всю его цель. Я изменил его, и он работал точно так, как я этого хотел. Благодаря! P.S. html был чрезмерным – Tomek 2008-11-12 00:10:28