如何禁用多个单元格选择?

时间:2014-08-19 05:17:26

标签: matlab selection cell matlab-uitable

我正在使用MATLAB 2014a uitable'CellEditCallback',我通过点击我的uitable中的单元格来创建一个新图形。问题是用户可能同时选择多个单元格,然后我的程序将打开与所选单元格一样多的数字。

所以我想知道是否可以禁用uitable cell multiple selection。如果没有,你有什么建议可以解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

我知道这已经有3年了,但我找到了一个对我有用的简单解决方案,它不会干扰回调 - 更重要的是,不需要回调来“取消选择”。我想有人会从中受益。

我正在使用MATLAB2017a,但要利用的功能是在底层的JAVA对象中,所以应该使用旧版本(低至2008年)。

您只需访问基础Java表对象并将选择模式更改为SINGLE_SELECTION。为此,我们都要感谢Yair在accessing the underlying Java table object上的工作,更重要的是在MATLAB文件交换中共享它(搜索“findjobj” - 注意中间的字母“J”!)。

此方法适用于通过uitable函数或通过guide编辑器实现MATLAB来实例化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);

现在你得到一个带有表格的图形,你可以通过点击一次只选择一行。

答案 1 :(得分:0)

我找到了该线程,而findjobj在App Designer上不起作用,因此我需要进行更多搜索。我从未在App Designer中找到直接取消选择uitable单元格的方法-但我找到了一种无需单元格选择即可用新表覆盖当前表的方法。 我的代码