使用setValue在滚动条上时,uitable标题发生错误。

7

我正在尝试在MATLAB中创建一张表格,并且希望能够通过程序更改滚动条位置。我创建了一个uitable,并提取了Java UITablePeer对象的句柄(这里被指定为htable)。

然后我使用以下代码获取了UIScrollbarPane对象的句柄:

hscroll = htable.getParent.getParent.getVerticalScrollBar

此时,图表看起来像这样(我的实际表格更复杂,这只是我做的一个例子):

before

表格左下角的框是一个 pushbutton。当它的回调被触发时,它使用 setValue 方法来改变滚动条的位置,例如:

hscroll.setValue(10)

在这之后,表格看起来像这样: After 可以看到,表格的顶部变得损坏了。我尝试过使用“刷新”函数或“重绘”方法,但它们似乎没有帮助;唯一的“修复”方法是移动另一个窗口(通过拖动或Alt-Tab),以完全覆盖表格,当我切换回表格时,它就会正常显示。显然,这不是一个最优解决方案。
有人能建议一种防止或修复这种情况的方法吗?
谢谢。
1个回答

4

这是我的实现(改编自这段代码):

% create a sample table with random data
figure('Menubar','none', 'Position',[400 400 250 300])
h = uitable('Units','normalized', 'Position',[0 0 1 1], ...
    'ColumnName',{'1','2'}, 'Data',num2cell(rand(50,2)>0.5));

% get Java handles
jScroll = findjobj(h, 'class','UIScrollPane');
jView = jScroll.getViewport();
jTable = jView.getView();

% scroll to specified row (make it the top row)
row = 20 - 1;        % 20th row (zero-based index)
jView.setViewPosition(java.awt.Point(0, row * jTable.getRowHeight()))
jScroll.repaint()    % workaround for any visual glitches

每次我尝试时,表格都正确显示(没有故障):

scrolled_table


很高兴看到一个可行的解决方案,但我很好奇当提问者尝试以他们提到的方式做时,您是否怀疑出了什么问题。 - Dennis Jaheruddin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接