我正在搜索一个在MATLAB图形移动时通知的函数,即当图形改变其位置时。
在MATLAB中,从一开始就有一个回调,当一个数字被“调整大小”时触发,但这没有帮助。
任何想法甚至解决方案?
此致 多梅尼科
答案 0 :(得分:1)
较新的'SizeChangedFcn'
回调或不再推荐的'ResizeFcn'
回调似乎都没有响应图中的动作,只有调整大小 。一个解决方案as suggested by excaza in a comment是创建一个property listener,它将回调绑定到给定对象属性的更改。例如:
hFigure = figure(...); % Create a figure
hListener = addlistener(hFigure, 'Position', 'PostSet', @your_fcn);
your_fcn
将是您创建的一个函数,它将执行移动图形时您想要执行的任何操作。此函数应为written to accept at least 2 arguments:调用回调的对象的句柄和事件数据的结构(通常为空)。例如:
function your_fcn(hSource, eventData)
% Your code ...
end
答案 1 :(得分:0)
无需通过移动图形窗口找到关于触发的回调函数。尝试使用此回调WindowButtonUpFcn
,在您按下图中的鼠标按钮后释放鼠标按钮时执行。
这种方法非常简单。只需在" WindowButtonUpFcn"中实现一个功能。 Windows回调,用于检测图中Position
属性中前两个元素的变化。
我测试了自己。就像@Domenico提到的那样,我最初的方法并不奏效。所以,我环顾四周寻找类似的解决方案。我终于在 undocumentedmatlab 的post上找到了它。
基本上,您必须能够在Java控件中访问回调以触发正确的事件。
考虑以下实现
a = figure;
pause(0.2) % Wait for the figure construction complete.
jFig = get(a, 'JavaFrame'); % get JavaFrame. You might see some warnings.
jWindow = jFig.fHG2Client.getWindow; % before 2011a it could be `jFig.fFigureClient.getWindow`. Sorry I cannot test.
jbh = handle(jWindow,'CallbackProperties'); % Prevent memory leak
set(jbh,'ComponentMovedCallback',{@(~,~)(fprintf('Check\n'))});
经过测试,它适用于2014b及以上。我希望它对某些人有用。