我有这段代码:
public class Window extends JFrame {
public Window(){
...
JButton button = new JButton("OK");
getContentPane().add(button);
ButtonHandler handler = new ButtonHandler();
button.addActionListener(handler);
...
}
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent event){
if (event.getSource() == button){ // <--- "button can not be resolved"
System.out.println("Hello");
}
}
}
我在Eclipse中遇到了这个错误。我刚刚在一本书中找到了一个(简化的)例子,不知道什么是错的。需要知识眼睛! :)
答案 0 :(得分:3)
button
个对象在课程ButtonHandler
中不可见;它是Window
构造函数的本地。您可以将其设为Window
中的字段,或从ActionEvent
中找出预期的命令。有关详情,请参阅tutorial。
附录:例如
if ("OK".equals(event.getActionCommand())) { ...
答案 1 :(得分:2)
避免让ActionListener操作依赖于按下的按钮。如果对不同的按钮有不同的操作,则为每个操作定义一个单独的ActionListener。
这样你的听众就不需要检查按下了什么按钮。
public void actionPerformed(ActionEvent event){
System.out.println("Hello");
}
答案 2 :(得分:1)
没有让按钮处理程序知道哪个按钮正在响应,但这会阻止您使用相同的对象。
创建一个新的构造函数,它将按钮对象作为键
//...
ButtonHandler handler = new ButtonHandler(button);
//...
然后
private class ButtonHandler implements ActionListener {
private JButton button;
ButtonHandler( JButton button) { this.button = button; }
public void actionPerformed(ActionEvent event){
if (event.getSource() == button){ // <--- "button can not be resolved"
System.out.println("Hello");
}
}