Uitable设置回调到列名

时间:2013-05-23 23:37:37

标签: matlab user-interface callback matlab-uitable

我在MATLAB中非常合适,目前我对每个单元都有回调函数。 我已经尝试了一段时间来设置回调列和行名称,但没有成功。更具体地说,如果用户点击特定列名称,是否可以调用函数?

如果您需要更多信息,请告诉我......我将不胜感激任何帮助。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

首先,您必须注册回调到表头对象。它是JTableHeader对象,您可以使用findjobj函数进行访问。

我创建了用于为列名单击事件注册回调函数的demo。 此回调函数用于修改单击的列名称。它在Matlab R2015a上进行了测试。

要运行此演示,请下载findjobj文件,并放入相同的文件夹。然后运行下面的代码。

function TableDemo()
% Demonstration of clickable columnname.
% In this example, we use the click event to modify column name.
figure('menubar','none','numbertitle','off', 'Name', 'DEMO');
myTable = uitable('Data', magic(4), 'ColumnName',{'A','B','C','D'}, 'ColumnWidth',{50});


% Accessing underlying java object.
jscrollpane = findjobj(myTable);
jtable = jscrollpane.getViewport.getView;
jheader= jtable.getTableHeader(); % Here, you got JTableHeader object.
h=handle(jheader, 'callbackproperties');

% Set a matlab function as MouseClickedCallback
set(h, 'MouseClickedCallback', {@onHeaderClick, jtable, myTable});

end

function onHeaderClick(src, evt, jtable, hTable)
if(get(evt, 'ClickCount') > 1)
    disp('header double clicked');

    % Get view index from current mouse point, and convert it to
    % model index. Then add 1 because Matlab index starts from 1.
    index = jtable.convertColumnIndexToModel(src.columnAtPoint(evt.getPoint())) + 1;

    prompt={'Column Name'};
    title='Enter column names';
    numLines=1;
    defaultAnswer=hTable.ColumnName(index);
    options.Resize='on';
    options.WindowStyle='modal';
    newName=inputdlg(prompt,title,numLines,defaultAnswer,options);
    if ~isempty(newName)
        hTable.ColumnName(index) = newName;
    end
end
end

答案 1 :(得分:0)

仅使用uitable的标准MATLAB接口似乎是不可能的。

但是,您可以访问基础Java JTable described on undocumentedmatlab.com。使用JTable实例,您应该能够安装适当的事件处理程序,请参阅this question on SOthis other article on undocumentedmatlab.com