只需双击即可编辑表格单元格

Tim*_*ear 2 matlab matlab-uitable

只需单击即可编辑表格单元格,我希望仅在双击时进行编辑.单击即可选择单元格.

我使用以下属性uitable:

set(hTable, 'Data',data,...
    'ColumnEditable', edit,...
Run Code Online (Sandbox Code Playgroud)

the*_*alk 5

首先,您需要在默认情况下将单元格editabiliy设置为false:

set(hTable,'ColumnEditable', [false false ...]);   %accordingly your number of columns
Run Code Online (Sandbox Code Playgroud)

并介绍一个CellSelectionCallback:

set(hTable,'CellSelectionCallback',@cellSelect);
Run Code Online (Sandbox Code Playgroud)

它在同一个脚本中调用以下函数

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
Run Code Online (Sandbox Code Playgroud)

还有一个CellEditCallback:

set(hTable,'CellEditCallback',@cellEdit);
Run Code Online (Sandbox Code Playgroud)

调用

function cellEdit(src,~)
state = [false false ...];
set(src,'ColumnEditable', state)
end
Run Code Online (Sandbox Code Playgroud)

最小的例子

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
Run Code Online (Sandbox Code Playgroud)

正如你所知,这并不总是有效.因为你有类似我之前使用弹出菜单的问题.这是完全相同的问题:ColumnEditable只是一个行向量而不是矩阵.我不得不处理ColumnFormat属性,这也只是一个行向量.如果双击功能对您非常重要,您可以参考以下两个答案:

是否可以防止弹出一个合适的弹出菜单?或者:如何通过单击一个单元格返回行和列索引来获取回调?

如何取消选择适合的单元格/如何禁用单元格选择突出显示?

线程基本上建议uitable为每一行创建唯一的,以便每一行都有一个唯一的ColumnEditable属性.到目前为止,这是唯一的解决方案.

我担心没有简单的解决方案.除了其他答案的复杂解决方法之外,我无法为您提供进一步的帮助.或者只是使用上面简单的一个,并有一些小缺点.