函数句柄使用`set`函数MATLAB

时间:2016-10-26 12:45:45

标签: matlab user-interface matlab-guide function-handle

我在MATLAB应用程序中使用GUI。 我使用uitable对象。然后我发现有趣的undocumented feature如何对其数据进行排序,选择整行等等。

我这样做:

% create jhandle to my uitable object
juiTable = findjobj(handles.uitable1,'class','UIScrollPane');
jtable = juiTable(1).getComponent(0).getComponent(0);
%... some my action like this:
jtable.setRowSelectionAllowed(true);
%...

%and now lets try use callback for selected cell in uitable:
juiFunHandle = handle(jtable, 'CallbackProperties');

set(juiFunHandle, 'MousePressedCallback', @CellSelectionCallback);
set(juiFunHandle, 'KeyPressedCallback', @CellSelectionCallback); 

完美无缺。

现在问:如何将多个参数放到CellSelectionCallback? 我希望这个功能做一些动作(使某些按钮处于活动状态等)。 为此,我尝试将GUI handles添加到其中。但是如何?

我的CellSelectionCallback功能:

function CellSelectionCallback(juiTable, varargin)
% get it from the example
row = get(juiTable,'SelectedRow')+1;
fprintf('row #%d selected\n', row);

P.S。我看到了varargin。那么我可以使用多个参数吗?如何使用我的set函数??

1 个答案:

答案 0 :(得分:1)

默认情况下,MATLAB回调传递两个输入参数(生成回调的objec和一些事件数据)。如果要将更多(或更少)参数传递给回调,可以使用匿名函数接受这两个输入,然后使用所需的输入调用回调。

在您的情况下,您可以编写匿名函数,以便将handles对象作为附加输入传递给回调函数

set(juiFunHandle, 'MousePressedCallback', ...
    @(src, evnt)CellSelectionCallback(src, evnt, handles));

然后你的回调看起来像:

function CellSelectionCallback(jtable, evntdata, handles)