事件和监听器的实现涉及以下组件:
类中声明事件名称来定义事件事件
块。例如,这个类创建了一个名为ToggledState
:
classdefToggleButton <处理属性状态= false结束事件ToggledState结束结束
的OnStateChange
方法调用通知
触发的ToggledState
事件。将作为事件来源的对象的句柄和事件的名称传递给通知
.
classdefToggleButton <处理属性状态= false结束事件ToggledState结束方法函数OnStateChange (obj newState)如果newState ~ = obj。国家obj。状态= newState; notify(obj,“ToggledState”);结束结束结束结束
在接到电话后通知
触发事件,MATLAB®向为该事件和源对象定义的所有侦听器广播消息。有两种方法可以创建侦听器:使用句柄类handle.addlistener
或handle.listener
方法。
如果您希望侦听器在常规变量范围之外持久存在,请使用addlistener
创建它。事件源对象保存对侦听器对象的引用。当事件源对象被销毁时,MATLAB销毁侦听器。
的侦听器ToggleState
事件:
lh = addlistener (obj,“ToggleState”, @RespondToToggle.handleEvnt);
addlistener
这些论点:
obj
—作为事件来源的对象
ToggleState
—作为传递的事件名称字符
向量
@RespondToToggle.handleEvnt
-回调函数的句柄(参见下面的定义)定义监听器)。
使用handle.listener
方法在希望管理侦听器的生命周期且不希望事件源和侦听器对象之间耦合时创建侦听器。MATLAB不破坏创建的监听器handle.listener
事件源被销毁时。但是,当您的代码在使用handle.listener
.
的handle.listener
方法需要与handle.addlistener
:事件命名对象、事件名称和回调函数句柄。handle.listener
返回监听器对象的句柄。
lh =侦听器(obj,'EventName
'@callbackFunction)
例如,这段代码使用ToggleState
前面讨论的事件:
lh =侦听器(obj,“ToggleState”@RespondToToggle.handleEvnt)
监听器回调函数必须接受至少两个参数,MATLAB会自动将其传递给回调函数。以下是必要的参数:
事件的来源,也就是说,obj
在号召中addlistener
或event.listener
.
一个事件。EventData
对象的子类事件。EventData
,例如ToggleEventData
描述的对象,定义相关的数据.
定义回调函数以接受源对象和事件数据参数。
函数callbackFunction(evtdata src)……结束
有关回调语法的更多信息,请参见侦听器回调的语法.
的RespondToToggle
类定义侦听的对象ToggleState
事件中定义的ToggleButton
类。
classdefRespondToToggle <处理方法函数addlistener = RespondToToggle(toggle_button_obj)“ToggledState”, @RespondToToggle.handleEvnt);结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (“ToggledState是真的”)其他的disp (“ToggledState是假的”)结束结束结束结束
类RespondToToggle
在其构造函数中添加侦听器。在本例中,类定义了回调函数(handleEvnt
)作为一个静态方法,接受两个必需参数:
src
-触发事件的对象的句柄(即aToggleButton
对象)
evtdata
——一个事件。EventData
对象
例如,这段代码创建了两个类的对象:
结核病= ToggleButton;rtt = RespondToToggle(结核病);
每当你打电话给OnStateChange
的方法ToggleButton
对象,通知
触发事件。在本例中,回调函数显示状态
属性:
tb.OnStateChange(真正的)
ToggledState是真的
tb.OnStateChange(假)
ToggledState是假的
通过调用删除
对其处理。例如,如果类RespondToToggle
将监听器句柄保存为属性后,可以删除监听器。
classdefRespondToToggle <处理属性ListenerHandle监听器句柄的属性结束方法函数hl = addlistener(toggle_button_obj),“ToggledState”, @RespondToToggle.handleEvnt);obj。ListenerHandle =霍奇金淋巴瘤;%保存监听器句柄结束结束方法(静态)函数handleEvnt (src, ~)如果src。国家disp (“ToggledState是真的”)其他的disp (“ToggledState是假的”)结束结束结束结束
的实例中可以删除侦听器RespondToToggle
类。例如:
结核病= ToggleButton;rtt = RespondToToggle(结核病);
的对象rtt
正在听ToggleState
由对象触发的事件结核病
.要删除侦听器,请调用删除
在包含监听器句柄的属性上。
删除(rtt.ListenerHandle)
要暂时关闭监听器,请参见暂时停用的听众.
假设您希望将切换按钮的状态作为事件的结果传递给侦听器回调。属性的子类化可以向默认事件数据添加更多数据事件。EventData
类并添加包含此信息的属性。然后你可以将这个对象传递给handle.notify
方法。
的子类保存和加载对象事件。EventData
,如ToggleEventData
,使ConstructOnLoad
子类的Class属性。
classdef(ConstructOnLoad) ToggleEventData <事件。EventData属性NewState结束方法函数data = ToggleEventData(newState)NewState = NewState;结束结束结束
调用通知
可以使用ToggleEventData
构造函数创建必要的实参。
evtdata = ToggleEventData (newState);通知(obj,“ToggledState”, evtdata);