表のセルはクリックだけで編集できるので、ダブルクリックだけで編集できるようにしたいです。単純なクリックでセルが選択されます。
私はこのプロパティを使用していますuitable
:
set(hTable, 'Data',data,...
'ColumnEditable', edit,...
表のセルはクリックだけで編集できるので、ダブルクリックだけで編集できるようにしたいです。単純なクリックでセルが選択されます。
私はこのプロパティを使用していますuitable
:
set(hTable, 'Data',data,...
'ColumnEditable', edit,...
最初に、セルの編集可能性をデフォルトで 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
が、これも単なる行ベクトルです。ダブルクリック機能が本当に重要な場合は、次の 2 つの回答を参考にしてください。
適切なポップアップ メニューが表示されないようにすることは可能ですか? または: セルをクリックしてコールバックを取得し、行と列のインデックスを返す方法は?
uitableでセルを選択解除する方法/セル選択の強調表示を無効にする方法は?
スレッドは基本的に、すべての行に一意のプロパティuitable
を持たせるために、すべての行に一意のものを作成することを提案していColumnEditable
ます。それが今のところ唯一の解決策です。
簡単な解決策はないのではないかと心配しています。他の回答の複雑な回避策を除いて、これ以上の支援はできません。または、上記の単純なものを使用して、小さな欠点を受け入れてください.