gpt4 book ai didi

java - 是否可以编写自己的对象来发出 ActionEvents?

转载 作者:行者123 更新时间:2023-11-30 04:32:48 26 4
gpt4 key购买 nike

我看过网上的java教程,它们似乎都关心捕获其他已编写的组件发出的ActionEvents。是否可以编写自己的对象,这些对象有自己的一组标准来触发actionEvents,然后可以被注册为监听器的其他类捕获?

举个例子:如果我想要一个正在数羊的对象在 100 只羊被计入所有注册为监听器的 sleep 对象时发出一个 actionEvent。

有没有办法做到这一点,有在线教程吗?

非常感谢任何帮助。

最佳答案

是的,一旦有人向您展示如何创建自己的监听器,这非常简单。

首先,创建您自己的 EventObject。这是我的一个项目的示例。

import gov.bop.rabid.datahandler.bean.InmateDataBean;

import java.util.EventObject;

public class InmatePhotoEventObject extends EventObject {

private static final long serialVersionUID = 1L;

protected InmateDataBean inmate;

public InmatePhotoEventObject(Object source) {
super(source);
}

public InmateDataBean getInmate() {
return inmate;
}

public void setInmate(InmateDataBean inmate) {
this.inmate = inmate;
}

}

这个类没有什么特别之处,除了它扩展了 EventObject 之外。您的构造函数由 EventObject 定义,但您可以创建任何您想要的方法。

其次,定义一个 EventListener 接口(interface)。

public interface EventListener {

public void handleEvent(InmatePhotoEventObject eo);

}

您将使用您创建的EventObject。您可以使用任何您想要的方法名称。这是将作为对监听器的响应而编写的代码的接口(interface)。

第三,编写一个 ListenerHandler。这是我在同一项目中的作品。

import gov.bop.rabid.datahandler.bean.InmateDataBean;
import gov.bop.rabid.datahandler.main.EventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventListener;
import gov.bop.rabid.datahandler.main.InmatePhotoEventObject;

import java.util.ArrayList;
import java.util.List;

public class InmatePhotoListenerHandler {

protected List<EventListener> listeners;

public InmatePhotoListenerHandler() {
listeners = new ArrayList<EventListener>();
}

public void addListener(EventListener listener) {
listeners.add(listener);
}

public void removeListener(EventListener listener) {
for (int i = listeners.size() - 1; i >= 0; i--) {
EventListener instance = listeners.get(i);
if (instance.equals(listener)) {
listeners.remove(i);
}
}
}

public void fireEvent(final InmatePhotoEventObject eo,
final InmateDataBean inmate) {
for (int i = 0; i < listeners.size(); i++) {
final EventListener instance = listeners.get(i);
Runnable runnable = new Runnable() {
public void run() {
eo.setInmate(inmate);
instance.handleEvent(eo);
}

};
new Thread(runnable).start();
}
}

public static void main(String[] args) {
System.out.println("This line goes in your DataHandlerMain class "
+ "constructor.");
InmatePhotoListenerHandler handler = new InmatePhotoListenerHandler();
System.out.println("I need you to put the commented method in "
+ "DataHandlerMain so I can use the handler instance.");

// public InmatePhotoListenerHandler getInmatePhotoListenerHandler() {
// return handler;
// }

System.out.println("This line goes in the GUI code.");
handler.addListener(new InmatePhotoEventListener());

System.out.println("Later, when you've received the response from "
+ "the web service...");
InmateDataBean inmate = new InmateDataBean();
inmate.setIntKey(23);
handler.fireEvent(new InmatePhotoEventObject(handler), inmate);
}
}

此类中的 main 方法向您展示如何使用 ListenerHandler。类中的其余方法是标准的。您将使用自己的 EventObject 和 EventListener。

关于java - 是否可以编写自己的对象来发出 ActionEvents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14243657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com