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

问题描述 投票:1回答:2

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

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

matlab selection cell matlab-uitable
2个回答
1
投票

我知道这已经有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);

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


0
投票

我发现这个线程和findjobj在App Designer上不起作用,所以我需要做更多的搜索。我从未找到过在App Designer中直接取消选择某个单元格的方法 - 但是我找到了一种方法来覆盖当前表格,而不使用单元格选择。我的代码

© www.soinside.com 2019 - 2024. All rights reserved.