Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中向java组件添加java侦听器?_Java_Matlab - Fatal编程技术网

如何在Matlab中向java组件添加java侦听器?

如何在Matlab中向java组件添加java侦听器?,java,matlab,Java,Matlab,要将java组件添加到MatlabGUI中,我使用未记录的函数javacomponent: [handles.myWidget, handles.hMyWidget] = javacomponent('com.mycompany.MyClass', [90,10,460,400], gcf); 同时,要添加事件侦听器回调,我需要调用addlistener: handles.myWidgetListeners = addlistener( myhandle, 'MouseClickedCallb

要将java组件添加到MatlabGUI中,我使用未记录的函数
javacomponent

[handles.myWidget, handles.hMyWidget] = javacomponent('com.mycompany.MyClass', [90,10,460,400], gcf);
同时,要添加事件侦听器回调,我需要调用addlistener:

handles.myWidgetListeners = addlistener( myhandle, 'MouseClickedCallback', @mouseClicked_Callback);
javacomponent
返回的句柄都不适合
addlistener
,因此我需要使用以下内容再创建一个句柄:

myhandle = handle(handles.myWidget, 'CallbackProperties');
那么,这是真的吗,我需要为一个组件保留四个手柄,以便与之完全配合使用


是否可以缩短此代码?

虽然您概述的所有步骤都是为通过
javacomponents
创建的Java swing事件分配MATLAB回调的要求,但您不必存储创建的所有四个句柄

[jwidget, hwidget] = javacomponent('myclass', [0 0 100 100], gcf);
hwidget = handle(hwidget, 'CallbackProperties');
您不需要同时维护
hwidget
handle(hwidget,'CallbackProperties')
的结果,因为它们在功能上是等效的

另一个选项是在创建java对象时不使用
javacomponent
,然后从中获取“CallbackProperties”句柄

jwidget = com.mycompany.myclass();
hwidget = handle(jwidget, 'CallbackProperties');
此外,就侦听器而言,您不必显式地将其存储为变量并在GUI中跟踪它。相反,您可以简单地将其存储在小部件本身中,然后如果需要禁用它,您可以用相同的方式获取它

listener = addlistener(hwdiget, 'MouseClickedCallback', @mouseclick);
set(hwidget, 'UserData', listener);