现在我问自己: 是否有我可以使用的事件的标准类,或者我是否必须自己编写新的事件?
我知道有ara java.awt.Event和AWTEvent。但我不是直接在GUI级别工作。此外,我们在GUI级别使用Swing。如果将Swing和AWT混合起来是个好主意,那么我并不感到害羞。
THX
答案 0 :(得分:4)
它古老而简单,但你可以在java.util中使用Observer / Obserable:
java.util中
public class Observable extends Object
此类表示可观察的 对象或模型视图中的“数据” 范例。它可以被子类化 代表一个对象 应用程序想要观察。
可观察对象可以有一个或 更多观察员。观察者可以是任何人 实现接口的对象 观察员。在一个可观察的实例之后 更改,一个应用程序调用 Observable的notifyObservers方法 导致所有观察者都是 通过电话通知变更 他们的更新方法。
有关详细信息,请尝试http://www.javaworld.com/javaworld/jw-10-1996/jw-10-howto.html。
答案 1 :(得分:2)
Java中的事件没什么特别之处。如果您的事件不是GUI事件,那么您使用自己的类而不是将它们与java.awt.Events
混合就不那么令人困惑了。
答案 2 :(得分:2)
如果您使用摇摆,可以查看EventBus:
Event Bus是一个单进程发布/订阅事件路由库,带有Swing扩展。 EventBus功能齐全,具有非常好的API文档和测试覆盖率(80 +%)。它已部署在许多生产环境中,包括金融,工程和科学应用。
答案 3 :(得分:2)
我一直使用EventObject作为自定义事件的基类。以下是JavaDoc所说的内容:
应从中派生所有事件状态对象的根类。
所有事件都是用。构建的 引用对象,“源”, 这在逻辑上被认为是 事件所在的对象 问题最初发生在。
答案 4 :(得分:1)
Swing应用程序中的一种标准解决方案是维护事件源自的类中的事件侦听器列表。当事件发生时,您遍历列表并通知每个侦听器事件。所以它可以是这样的(为了简洁我省略了访问修饰符和一些类型声明):
class SomeClassInWhichTheEventOccurs {
List<MyListener> listeners;
void addListener(listener) { listeners.add(listener); }
void removeListener(listener) { listeners.remove(listener); }
void fireEvent(someEventParameters) {
foreach (listener in listeners) listener.eventOccured();
}
void someMethodInWhichTheEventOccurs() {
...
fireEvent(someEventParameters);
}
}
事件参数可以是任何东西:您可以创建自己的事件类,重用java.awt.Event,或传递任意类型的一些参数。
答案 5 :(得分:0)
Swing基于AWT,所以你必须混合它。将AWT重量级组件与Swing轻量级组件混合出现问题。不要使用AWT重量级组件。
只是被告知事情发生了变化javax.swing.event.ChangeListener
没问题。实际上,只要您不使用假定bean模型的库,就可以忽略事件类并使用没有事件对象的观察者。