我使用Matlab GUIDE在Matlab编写了一个GUI程序。 在工具栏上创建了一个工具并编写了一个右键单击回调函数,如下所示,但是当我在GUI上右键单击该工具时,没有响应。
function MyTool_ButtonDownFcn(hObject, eventdata, handles)
waitfor(msgbox('Hello button down function','Hello button down'));
disp('Hello disp');
从属性检查器中,ButtonDownFcn的值为:
@(hObject,eventdata)main('MyTool_ButtonDownFcn',hObject,eventdata,guidata(hObject))
我尝试使用另一个带回调功能的按钮进行调试,以执行'keyboard'。
function bugfindbutton_ClickedCallback(hObject, eventdata, handles)
keyboard
这确认了与该工具的MyTool_ButtonDownFcn(hObject, eventdata, handles)
相关联的函数ButtonDownFcn
的存在,并且不会被任何其他函数删除。但右键单击该工具既不提供msgbox也不提供命令窗口输出。
我想在“MyTool”切换按钮(工具栏上的自定义工具)上单击鼠标右键以执行MyTool_ButtonDownFcn
功能。我该怎么办?
答案 0 :(得分:0)
uitoggletool
和uipushtool
个对象会忽略ClickedCallback
。您应该使用h = uitoggletool( ...
'CData', rand(16, 16, 3), ...
'OnCallback', @(s,e)disp('on'), ...
'OffCallback', @(s,e)disp('off'));
% Get the underlying java object using findobj
jtoggle = findjobj(h);
% Specify a callback to be triggered on any mouse release event
set(jtoggle, 'MouseReleasedCallback', @(s,e)callback(h,e))
function callback(src, evnt)
if evnt.getButton() == 3
disp('Right Click!')
end
% Get the handles struct
handles = guidata(src);
% Modify the handles
handles.value = 2;
% Save the handles
guidata(src, handles);
end
属性来设置回调。但是,该回调只会在鼠标左键单击时执行,并且不会在鼠标右键单击时触发。
如果确实需要将回调绑定到鼠标右键,则可以使用文件交换中的findjobj
实用程序访问基础Java对象并分配自定义回调
{{1}}