在滚动条上使用setValue时,uitable标头中的损坏

时间:2013-01-28 06:32:15

标签: java matlab jscrollpane matlab-uitable visual-glitch

我正在尝试在MATLAB中创建一个表格,我可以通过编程方式更改滚动位置。我创建了一个uitable并解压缩了Java UITablePeer对象的句柄(此处指定为htable)。

然后我使用以下方法获取UIScrollbarPane对象的句柄:

hscroll = htable.getParent.getParent.getVerticalScrollBar

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

before

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

hscroll.setValue(10)

在此之后,表格如下所示:

After

如您所见,表格顶部已损坏。我尝试使用refresh函数或repaint方法,但它们似乎没有帮助; “修复”这个的唯一方法是移动另一个窗口(通过拖动或Alt-Tabbing),使表格完全被覆盖,当我切换回表格时就可以了。显然,这不是一个真正的最佳解决方案。

有人可以提出预防或解决此问题的方法吗?

由于

1 个答案:

答案 0 :(得分:4)

以下是我的实施(改编自this code):

% 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