Matlab图回调移动

时间:2017-05-26 20:18:59

标签: matlab callback

我正在搜索一个在MATLAB图形移动时通知的函数,即当图形改变其位置时。

在MATLAB中,从一开始就有一个回调,当一个数字被“调整大小”时触发,但这没有帮助。

任何想法甚至解决方案?

此致 多梅尼科

2 个答案:

答案 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)

编辑于06/08/2017

在前两段中不要使用我的初始解决方案。它没有用。

无需通过移动图形窗口找到关于触发的回调函数。尝试使用此回调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及以上。我希望它对某些人有用。

相关问题