Прежде всего, вам необходимо зарегистрировать обратный вызов для объекта заголовка таблицы. Это объект 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
Hi Florian, Спасибо за быстрый ответ! Я не очень хорошо знаком с Java, я просмотрел ссылки, которые вы разместили, но я все еще немного не уверен, как использовать JTable в MATLAB. Можете ли вы предложить мне ссылку? благодаря – YKa