我在MATLAB中非常合适,目前我对每个单元都有回调函数。 我已经尝试了一段时间来设置回调列和行名称,但没有成功。更具体地说,如果用户点击特定列名称,是否可以调用函数?
如果您需要更多信息,请告诉我......我将不胜感激任何帮助。 提前谢谢!
答案 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 SO和this other article on undocumentedmatlab.com。