eyl*_*eyl 7 java matlab jscrollpane visual-glitch matlab-uitable
我试图在MATLAB中创建一个表,我可以编程方式更改滚动位置.我创建了一个uitable并解压缩了Java UITablePeer对象的句柄(此处指定为htable).
然后我UIScrollbarPane使用以下方法获取对象的句柄:
hscroll = htable.getParent.getParent.getVerticalScrollBar
Run Code Online (Sandbox Code Playgroud)
此时,图形看起来像这样(我的实际表格更复杂,这只是我做的一个例子):

桌子左下角的方框是pushbutton.当触发回调时,它使用该setValue方法更改滚动条位置,例如
hscroll.setValue(10)
Run Code Online (Sandbox Code Playgroud)
在此之后,表格如下所示:

如您所见,表的顶部已损坏.我尝试过使用这个refresh函数或repaint方法,但它们似乎没有帮助; "修复"这个的唯一方法是移动另一个窗口(通过拖动或Alt-Tabbing),使表格完全被覆盖,当我切换回表格时就可以了.显然,这不是一个真正的最佳解决方案.
有人可以建议一种方法来预防或解决这个问题吗?
谢谢
这是我的实现(改编自此代码):
% 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
Run Code Online (Sandbox Code Playgroud)
每次我尝试时,该表都会正确显示(没有故障):
