只需单击即可编辑表格单元格,我希望仅在双击时进行编辑。单击即可选择单元格。
我使用uitable
的这个属性:
set(hTable, 'Data',data,...
'ColumnEditable', edit,...
答案 0 :(得分:5)
首先,您需要在默认情况下将单元格editabiliy设置为false:
set(hTable,'ColumnEditable', [false false ...]); %accordingly your number of columns
并介绍CellSelectionCallback
:
set(hTable,'CellSelectionCallback',@cellSelect);
在同一个脚本中调用以下函数
function cellSelect(src,evt)
getstate = get(src,'ColumnEditable'); %gets status of editability
index = evt.Indices; %index of clicked cell
state = [false false ...]; %set all cells to default: not editable
state(index) = ~getstate(index); %except the clicked one, was it
%already false before set it true
set(src,'ColumnEditable', state) %pass property to table
end
还有CellEditCallback
:
set(hTable,'CellEditCallback',@cellEdit);
调用
function cellEdit(src,~)
state = [false false ...];
set(src,'ColumnEditable', state)
end
最小示例
function minimalTable
h = figure('Position',[600 400 402 100],'numbertitle','off','MenuBar','none');
defaultData = {'insert number...' , 'insert number...'};
uitable(h,'Units','normalized','Position',[0 0 1 1],...
'Data', defaultData,...
'ColumnName', [],'RowName',[],...
'ColumnWidth', {200 200},...
'ColumnEditable', [false false],...
'ColumnFormat', {'numeric' , 'numeric'},...
'CellSelectionCallback',@cellSelect);
end
function cellSelect(src,evt)
getstate = get(src,'ColumnEditable');
index = evt.Indices;
state = [false false];
state(index) = ~getstate(index);
set(src,'ColumnEditable', state)
end
function cellEdit(src,~)
state = [false false];
set(src,'ColumnEditable', state)
end
正如你所知,这并不总是有效。因为你有类似我之前使用弹出菜单的问题。这是完全相同的问题:ColumnEditable
只是行向量而不是矩阵。我不得不处理ColumnFormat
属性,它也只是一个行向量。如果双击功能对您非常重要,您可以参考以下两个答案:
How to deselect cells in uitable / how to disable cell selection highlighting?
线程基本上建议为每一行创建一个唯一的uitable
,以便每一行都有一个唯一的ColumnEditable
属性。到目前为止,这是唯一的解决方案。
我担心没有简单的解决方案。除了其他答案的复杂解决方法之外,我无法为您提供进一步的帮助。或者只是使用上面简单的一个,并忍受一些小缺点。
答案 1 :(得分:2)
虽然这个帖子已经老了,但我认为对某些用户来说仍然很有价值。 我用R2010b 32bit测试了以下内容。
我只需双击即可完成编辑,只需设置
即可FILE_FLAG_NO_BUFFERING
并定义其功能如下
set(hTable,'CellSelectionCallback',@tableCellSelectCB,'ColumnEditable',true)
其中function tableCellSelectCB(~,~)
try
h.jtable.getCellEditor().stopCellEditing();
catch
end
end
指的是你的uitable的基础java对象。
这样,我甚至可以选择单个和多个单元格,而无需进入编辑模式。双击单个单元格,我可以编辑其内容。
我希望在表格的其余部分中有顶部的复选框和不可编辑的(非直接至少)数据。您可以轻松修改上述内容:
h.jtable