通过命名,你似乎意味着该按钮实例存储在您的直接方法的局部变量。试图避免这种情况可能会使您的代码更难以阅读。但要回答你的问题:
最明显的方法是使用旧的,但最近流行的双大括号成语。
alphabetPanel.add(new JButton("<html><center>" + (char)i) {{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
...
}
});
}});
注意,在这种情况下,i是不是最终也不会从匿名内部类使用。将其分配给另一个(最终)变量或重新构建循环。
另一条路线是通过一个Action。 (通常我会建议避免行动,因为它们仅仅指刚穷人的哈希表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