我在 MATLAB 中有一个 uitable,目前我对每个单元格都有回调函数。我一直在尝试为列名和行名设置回调,但没有成功。更具体地说,如果用户单击特定的列名,是否可以调用函数?
如果您需要更多信息,请告诉我......我将不胜感激。提前致谢!
我在 MATLAB 中有一个 uitable,目前我对每个单元格都有回调函数。我一直在尝试为列名和行名设置回调,但没有成功。更具体地说,如果用户单击特定的列名,是否可以调用函数?
如果您需要更多信息,请告诉我......我将不胜感激。提前致谢!
首先,您必须向表头对象注册回调。它是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
仅使用标准的 MATLAB 接口似乎是不可能的uitable
。
JTable
但是,您可以按照undocumentedmatlab.com 上的描述访问底层 Java 。使用该JTable
实例,您应该能够安装适当的事件处理程序,请参阅SO 上的这个问题和undocumentedmatlab.com 上的其他文章。