【问题标题】:Function handle using `set` function MATLAB使用 `set` 函数 MATLAB 的函数句柄
【发布时间】:2016-10-26 12:45:45
【问题描述】:

我在 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);

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    然后你的回调看起来像:

    function CellSelectionCallback(jtable, evntdata, handles)
    

    【讨论】:

    • 啊,当然!就像普通的匿名函数一样使用它!顺便说一句,我可以使用function CellSelectionCallback(juiTable, varargin),然后使用varargin{2}
    • @Mikhail_Sam 当然你也可以这样做,我只是更喜欢显式输入而不是varargin,所以我已经展示了它作为一种替代方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多