JMonkeyEngine3——NiftyGui EventBus Notification
前言
在NiftyGui中,可以通过绑定事件监听器来处理事件,还有一种通过EventBus的方式来订阅相关事件的发生回调。
使用EventBus Notification
NiftyGui的EventBus订阅,遵循以下几个步骤:
- xml中screen必须绑定一个ScreenController
- 在ScreenController中为指定id的control(NiftyGui组件)订阅相关事件执行函数
- 相关事件执行函数的统一格式写法是:
1 @NiftyEventSubscriber(id="相关组件id") 2 public final void FunctionName(final String id, final 相关组件的事件对象){ 3 // 处理订阅 4 }
那么,我们怎么知道一个组件会收到哪个事件对象呢?举个例子,我们使用一个<control name="button">,则查询button这个组件的wiki:https://github.com/nifty-gui/nifty-gui/wiki/Button,可知button这种组件(control)会收到的事件对象类是ButtonClickedEvent这个对象:

则我们可以在ScreenController中定义如下函数为id为button0的button组件(control)订阅事件:
1 @NiftyEventSubscriber(id="button0") 2 public final void onTextFieldChange(final String id, final ButtonClickedEvent event){ 3 // 处理相关逻辑 4 }
同理,如果我们要知道TextField这个组件(control)收到的是哪个事件对象,则根据wiki可知是TextFieldChangedEvent这个类对象:

所以我们可以在ScreenController中定义如下函数为id为textField0的textField组件(control)订阅事件:
1 @NiftyEventSubscriber(id="textField0") 2 public final void onTextFieldChange(final String id, final TextFieldChangedEvent textFieldChangedEvent){ 3 // 处理相关事件 4 }
其他组件的订阅类似如此。
注意事项
对于有些组件(control),在添加<interact/>时可能与相关EventBus事件订阅会冲突,所以只能删除<interact/>元素或删除EventBus事件执行函数订阅,也就是说二选一。

浙公网安备 33010602011771号