Corruption in custom header when using setValue on scrollbar

I am trying to create a table in MATLAB where I can programmatically change the scroll position. I created a uitable and retrieved the Java object handle UITablePeer (designated here as htable ).

Then I got a handle to the UIScrollbarPane object using:

 hscroll = htable.getParent.getParent.getVerticalScrollBar 

At this point, the figure looks like this (my actual table is more complicated, this is exactly what I did as an example):

before

The box in the lower left corner of the table is pushbutton . When his callback starts, he uses the setValue method to change the location of the scroll bar, for example.

 hscroll.setValue(10) 

After that, the table looks like this:

After

As you can see, the top of the table is damaged. I tried using the refresh or repaint , but they don't seem to help; the only way to fix it is to move another window (by dragging or Alt-Tabbing) so that the table is completely closed, and when I go back to the table, that’s OK. Obviously, this is not an optimal solution.

Can someone suggest a way to prevent or fix this?

thanks

+7
source share
1 answer

Here is my implementation (adapted from 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 

The table is displayed correctly (without glitches) every time I tried it:

scrolled_table

+4
source

All Articles