- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚开始使用 Swing 学习 GUI,并不完全了解 actionPerformed
方法的工作原理。考虑以下代码:
//code to create a button and change its text when clicked
public class simplegui implements ActionListener {
JButton button;
public static void main(String[] args) {
simplegui gui=new simplegui();
gui.go();
}
public void go() {
JFrame frame=new Frame();
button=new JButton("click Me");
button.addActionListener(this);
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
button.setText("I've been clicked!");
}
}
难道不应该在调用类的方法之前为类创建对象(静态方法除外)吗?
当按钮被点击时,actionPerformed
方法被调用,但是如何呢?在哪里打电话?我已经实现了接口(interface)ActionListener
,但是知道当 Action 发生时应该将“ActionEvent”对象发送到“actionPerformed”方法的代码在哪里?它存在于 Button 类中吗? Button 类中是否存在 addActionListener
方法?
当我点击按钮时,系统调用 Action 是如何执行的,执行gui.actionPerformed()
的代码在哪里?
直到现在,我一直遵循 Java 的 OO、静态等概念,但整个事件驱动编程令人困惑。
最佳答案
每个事件都由一个对象表示,该对象提供有关事件的信息并标识事件源。事件源通常是组件或模型,但其他类型的对象也可以是事件源。
在这里,你注册的监听器,也就是说,
button.addActionListener(this);
被添加到监听器列表中,当 JVM 接收到事件(在本例中为单击)时,它会调用列表中所有监听器的适当方法。
这是怎么发生的?好吧,我认为你应该阅读 java 中的Callback
机制。
您还可以使用回调机制创建您的自己的监听器。考虑以下代码:
该代码用于模拟信用卡应用程序。在下面的代码中,pinChanged()
方法在 changePin()
方法被调用。
public interface PinChangeListener {
public void pinChanged();
}
public class CreditCard {
public PinChangeListener pinChangeListener;
private int pin;
public changePin(int pin) {
this.pin = pin;
if (pinChangeListener != null) {
pinChangeListener.pinChanged();
}
}
}
要将回调/监听器连接到信用卡,您只需实现 PinChangeListener 方法:
creditCard.pinChangeListener = new PinChangeListener() {
public void pinChanged() {
System.out.println("The pin has been changed");
}
};
类似地,当您将监听器附加到按钮时,JVM 会检测到点击(您可能不想深入了解如何检测点击!)和 actionPerformed()
JVM 会为您调用附加的监听器。希望一切顺利。
关于java - 如何在没有显式调用的情况下调用 'actionPerformed' 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592125/
我是一名优秀的程序员,十分优秀!