2

我在 MATLAB 中有一个 uitable,目前我对每个单元格都有回调函数。我一直在尝试为列名和行名设置回调,但没有成功。更具体地说,如果用户单击特定的列名,是否可以调用函数?

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

4

2 回答 2

1

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

我创建了为列名单击事件注册回调函数的演示。该回调函数用于修改点击的列名。它在 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
于 2015-10-05T04:54:51.220 回答
0

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

JTable但是,您可以按照undocumentedmatlab.com 上的描述访问底层 Java 。使用该JTable实例,您应该能够安装适当的事件处理程序,请参阅SO 上的这个问题undocumentedmatlab.com 上的其他文章

于 2013-05-24T06:27:15.227 回答