我正在使用MATLAB 2014a uitable
和'CellEditCallback'
,我创建了一个新的数字,点击我的uitable中的一个单元格。问题是用户可能同时选择多个单元格,然后我的程序将打开与所选单元格一样多的数字。
所以我想知道是否可以禁用uitable cell multiple selection。如果没有,您有什么建议可以解决我的问题吗?
我知道这已经有3年了,但我找到了一个对我有用的简单解决方案,它不会干扰回调 - 更重要的是不需要回调来“取消选择”。我想有人会从中受益。
我正在使用MATLAB2017a,但杠杆功能是在底层的JAVA对象中,所以应该使用旧版本(低至2008年)。
您只需访问基础Java表对象并将选择模式更改为SINGLE_SELECTION。为此,我们都要感谢Yair关于accessing the underlying Java table object的工作,更重要的是要在MATLAB文件交换中共享它(搜索“findjobj” - 注意中间的字母“J”!)。
这个方法适用于通过uitable
函数或通过在guide
编辑器上实现它来实例化MATLAB的天气。你只需要将matlab表对象的句柄传递给matlab表对象(注意:它与底层java表对象有区别!)到上面提到的来自MATLAB文件交换的findjobj
函数,并在JAVA中配置表。
因此,我们想要调整的基础JAVA功能就是这个
http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/JList.html#setSelectionMode(int)
这是我在64位Windows机器上使用MATLAB 2017a验证的示例代码:
% create a figure instance
h_fig = figure();
% Instantiate MATLAB's uitable
h_m_table = uitable( h_fig, ...
'Data', magic(3), ...
'ColumnName', {'A','B','C'} );
% if you already created a table using MATLAB's GUIDE editor, simply pass
% in the "tag" name property, which should be in the "handles" structure by
% default. If you didn't edit that field it's "uitable1" by default so:
%
% h_m_table = handles.uitable1 % replace 'uitable1' with tag name
% Get java scroll pane object
j_scrollpane = findjobj(h_m_table);
% Get java table object
j_table = j_scrollpane.getViewport.getView;
% (optional) Make entire ROW highlighted when user clicks on any row(s)
j_table.setNonContiguousCellSelection(false);
j_table.setColumnSelectionAllowed(false);
j_table.setRowSelectionAllowed(true);
% Set selction mode to SINGLE_SELECCTION
j_table.setSelectionMode(0);
现在你得到一个带有表格的图形,你可以通过点击一次只选择一行。
我发现这个线程和findjobj在App Designer上不起作用,所以我需要做更多的搜索。我从未找到过在App Designer中直接取消选择某个单元格的方法 - 但是我找到了一种方法来覆盖当前表格,而不使用单元格选择。我的代码