Java处理自定义事件
我目前正在开发一个简单的2d游戏库,只用于自学。 直到知道一切都按预期进行。Java处理自定义事件,java,events,listener,Java,Events,Listener,我目前正在开发一个简单的2d游戏库,只用于自学。 直到知道一切都按预期进行。 现在我正在计划由“游戏流”(例如计时器)或其自身实体触发的动作和事件。我想知道是否可以有像“EntityEventListener”和“EntityMotionListener”这样的自定义事件。然后我看了一下MouseListener及其父类。然后我为每个侦听器编写了一个侦听器接口和一个适配器类,如下所示: public interface AppEntityEventListener extends EventLi
现在我正在计划由“游戏流”(例如计时器)或其自身实体触发的动作和事件。我想知道是否可以有像“EntityEventListener”和“EntityMotionListener”这样的自定义事件。然后我看了一下MouseListener及其父类。然后我为每个侦听器编写了一个侦听器接口和一个适配器类,如下所示:
public interface AppEntityEventListener extends EventListener
{
void onCreated(Event e);
void onDeleted(Event e);
void onStepped(Event e);
void onSelected(Event e);
}
public abstract class AppEntityEventAdapter implements AppEntityEventListener
{
@Override public void onCreated(Event e) { }
@Override public void onDeleted(Event e) { }
@Override public void onStepped(Event e) { }
@Override public void onSelected(Event e) { }
}
我检测到我只能将侦听器添加到组件
,而实体
类不是分别从组件
派生的JComponent
我读了一些关于听众的书,但我不知道该如何处理,因为我现在需要他们
考虑到我现在的问题是:
- 这些课程有什么不好的地方吗
- 如何将这些侦听器以最佳/最简单的方式添加到我的
实体
类
提前谢谢
编辑:
我已经添加了你所说的所有方法。现在我有了两个名为eventListeners
和motionListeners
的List
对象,每个对象都有自己的添加和删除功能
我还有一个关于迭代的问题,使用以下代码:
private void iterateListeners()
{
for (Object obj : eventListeners.toArray())
{
AppEntityEventListener l = (AppEntityEventListener) obj;
Event e = new Event(this, Event.ACTION_EVENT, this);
l.onCreated(e);
l.onDeleted(e);
l.onSelected(e);
l.onStepped(e);
}
// ... other listener ...
}
此时如何处理该事件?这是正确的方式吗我真的不知道。。。上面的代码非常直观。您可以将侦听器添加到您喜欢的任何对象,只要该对象具有允许添加(和删除)侦听器的方法。只需向对象添加addXxxListener()/removeXxxListener()
方法
这些方法只需在侦听器集合中添加/删除侦听器,对象应在该集合中迭代,并在适当时调用onXxx()
方法 您可以向任何喜欢的对象添加侦听器,只要该对象具有允许添加(和删除)侦听器的方法。只需向对象添加addXxxListener()/removeXxxListener()
方法
这些方法只需在侦听器集合中添加/删除侦听器,对象应在该集合中迭代,并在适当时调用onXxx()
方法 看看框架潮汐是否能帮助你。使用tide,您可以创建自己的事件,引发并处理这些事件。看看框架tide是否可以帮助您。使用tide,您可以创建自己的事件,引发并处理这些事件。需要注意的一点是:当您处理事件时,处理程序可以调用add/remove方法,然后您会得到一个ConcurrentModificationException
。您必须遍历侦听器列表的副本。谢谢您的帮助。我添加了这些添加和删除方法。但是我没有得到这个列表中的部分,我必须通过交互。你说的是哪张单子?很抱歉问这个问题,但我对java中的这一部分不熟悉。addListener方法的原理是将侦听器添加到对象的内部列表中。RemovelListener方法的原理是从这个内部列表中删除侦听器。触发事件的原理是遍历侦听器列表,并调用它们的onXxx()方法。听众没有什么神奇的。啊,好吧,我知道了。非常感谢。我更新了上面的帖子,因为我还有一个问题。你也可以看看这个?太好了,谢谢。有一点需要注意:当你处理一个事件时,处理程序可以调用add/remove方法,然后你会得到一个ConcurrentModificationException
。您必须遍历侦听器列表的副本。谢谢您的帮助。我添加了这些添加和删除方法。但是我没有得到这个列表中的部分,我必须通过交互。你说的是哪张单子?很抱歉问这个问题,但我对java中的这一部分不熟悉。addListener方法的原理是将侦听器添加到对象的内部列表中。RemovelListener方法的原理是从这个内部列表中删除侦听器。触发事件的原理是遍历侦听器列表,并调用它们的onXxx()方法。听众没有什么神奇的。啊,好吧,我知道了。非常感谢。我更新了上面的帖子,因为我还有一个问题。你也可以看看这个?太好了,谢谢。