Java处理自定义事件

Java处理自定义事件,java,events,listener,Java,Events,Listener,我目前正在开发一个简单的2d游戏库,只用于自学。 直到知道一切都按预期进行。 现在我正在计划由“游戏流”(例如计时器)或其自身实体触发的动作和事件。我想知道是否可以有像“EntityEventListener”和“EntityMotionListener”这样的自定义事件。然后我看了一下MouseListener及其父类。然后我为每个侦听器编写了一个侦听器接口和一个适配器类,如下所示: public interface AppEntityEventListener extends EventLi

我目前正在开发一个简单的2d游戏库,只用于自学。 直到知道一切都按预期进行。

现在我正在计划由“游戏流”(例如计时器)或其自身实体触发的动作和事件。我想知道是否可以有像“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()方法。听众没有什么神奇的。啊,好吧,我知道了。非常感谢。我更新了上面的帖子,因为我还有一个问题。你也可以看看这个?太好了,谢谢。