2012-05-05 186 views
0

我目前正在研究一个简单的2D游戏库,仅供自我教育。直到知道一切都按预期工作。
Java处理自定义事件

现在我打算在移动与由“gameflow”(例如定时器)触发的事件或实体itselves。我想知道是否有可能拥有像'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) { } 
} 

我发现,我只能在侦听器添加到ComponentsEntity类不是从一个Component分别JComponent的。

我读了一些关于监听器,但我不明白如何处理它,因为我需要他们对于现在的点。

考虑到我的问题现在:

  • 是否有关于这些类的任何不好的事情?
  • 我怎样才能最好/最简单的方法添加这些听众给我Entity类?

在此先感谢。

编辑:

像你说的我已经添加的所有方法。因此,现在我有两个List对象,分别称为eventListenersmotionListeners,每个对象都有其自己的添加和删除功能。

我有关于迭代进一步的问题,使用下面的代码:

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 ... 
} 

如何处理在这一点上的事件?这是我真的没有线索的正确方式......上面的代码只是直观的。

回答

1

您可以添加监听到任何你喜欢的对象,所提供的对象有一个方法,它允许添加(和删除)的监听器。只需将addXxxListener()/removeXxxListener()方法添加到您的对象。

这些方法应该简单地将侦听器添加到侦听器集合或从侦听器集合中删除侦听器,并且对象应该遍历该集合并在适当时调用onXxx()方法。

+0

一个需要注意的了解:当你pocess事件,处理程序可以调用添加/删除方法,然后你会得到一个'ConcurrentModificationException'。您必须迭代侦听器列表的副本。 –

+0

感谢您的帮助。我添加了这些添加和删除方法。但是我没有得到这份清单中我必须介入的部分。你在说什么名单?对不起这个问题,但我是新来的这部分在Java中。 –

+0

addListener方法的原理是将侦听器添加到对象的内部列表中。 removeListener方法的原理是从此内部列表中删除侦听器。触发事件的原理是遍历侦听器列表,并调用其onXxx()方法。听众没有什么不可思议的。 –