在 Java 中,“自定义事件”通常指基于观察者模式(Listener / EventObject)实现自己的事件机制,或者在 GUI(如 Swing/AWT)中扩展事件模型。下面我从通用 Java 自定义事件和GUI 中的自定义事件两个方面说明。
EventObject)import java.util.EventObject;
public class UserLoginEvent extends EventObject {
private String username;
public UserLoginEvent(Object source, String username) {
super(source);
this.username = username;
}
public String getUsername() {
return username;
}
}
import java.util.EventListener;
public interface UserLoginListener extends EventListener {
void onUserLogin(UserLoginEvent event);
}
import java.util.*;
public class LoginManager {
private List<UserLoginListener> listeners = new ArrayList<>();
public void addUserLoginListener(UserLoginListener listener) {
listeners.add(listener);
}
public void removeUserLoginListener(UserLoginListener listener) {
listeners.remove(listener);
}
public void login(String username) {
System.out.println(username + " 登录");
UserLoginEvent event = new UserLoginEvent(this, username);
fireEvent(event);
}
private void fireEvent(UserLoginEvent event) {
for (UserLoginListener listener : listeners) {
listener.onUserLogin(event);
}
}
}
public class Main {
public static void main(String[] args) {
LoginManager manager = new LoginManager();
manager.addUserLoginListener(event -> {
System.out.println("监听到登录:" + event.getUsername());
});
manager.login("Alice");
}
}
✅ 优点:解耦、可扩展、符合 Java 事件规范
如果你使用 Spring,可以更简单:
public class OrderCreatedEvent extends ApplicationEvent {
public OrderCreatedEvent(Object source) {
super(source);
}
}
applicationEventPublisher.publishEvent(new OrderCreatedEvent(this));
@EventListener
public void handleOrderCreated(OrderCreatedEvent event) {
// 处理逻辑
}
public class MyButton extends JButton {
public MyButton(String text) {
super(text);
}
}
然后为组件定义自己的 EventListener 和 fireXxx() 方法(原理同上)。
✅ 事件命名:XxxEvent
✅ 监听器命名:XxxListener
✅ 事件源负责 fireEvent()
✅ 避免在事件中放过重逻辑
如果你是:
可以告诉我,我可以给你更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。