我正在使用 MATLAB 2014auitable
和'CellEditCallback'
,我通过单击我的 uitable 中的一个单元格来创建一个新图形。问题是用户可能同时选择多个单元格,然后我的程序将打开与所选单元格一样多的数字。
所以我想知道是否可以禁用合适的单元格多选。如果没有,您有什么建议可以解决我的问题吗?
我正在使用 MATLAB 2014auitable
和'CellEditCallback'
,我通过单击我的 uitable 中的一个单元格来创建一个新图形。问题是用户可能同时选择多个单元格,然后我的程序将打开与所选单元格一样多的数字。
所以我想知道是否可以禁用合适的单元格多选。如果没有,您有什么建议可以解决我的问题吗?
我知道这已经 3 岁了,但我找到了一个简单的解决方案,它对我有用,不会干扰回调 - 更重要的是不需要回调来“取消选择”。我想有人会从中受益。
我正在使用 MATLAB2017a,但要利用的功能位于底层 JAVA 对象中,因此应该适用于旧版本(直到 2008 年)。
您只需访问底层 Java 表对象并将选择模式更改为 SINGLE_SELECTION。为此,我们都需要感谢 Yair 在访问底层 Java 表对象方面所做的工作,更重要的是在 MATLAB 文件交换中共享它(搜索“findjobj”——注意中间的字母“J”!)。
uitable
此方法适用于您通过函数或通过在guide
编辑器上实现它来实例化 MATLAB uitable 的情况。findjobj
您只需将句柄传递给 matlab 表对象(注意:它与底层 java 表对象之间存在区别!)从 MATLAB 文件交换到上述函数并在 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 中直接取消选择 uitable 上的单元格 - 但我找到了一种无需单元格选择即可用新表格覆盖当前表格的方法。我的代码