This code sets focus on the table if the cell that was clicked is not editable. Setting focus on the table is what causes it to move to the top of the page. Based on this code, I do not see any viable workaround.
I was never able to find a solution. As a workaround, I set autoHeightRows to -1 and used panelStretchLayout as the container of the table. Not the ideal solution but better than having the table jump around.
You could try to have the same row height to prevent jumping on scrolling. The effect is much less if you have same row height.
I fixed my jumping table by setting autoHeightRows to -1 as previously described. I then wrapped the table in a panelGroupLayout and set an inlineStyle of height:55% !important. I believe that the tables jump since focusing the table row sets the table height to 100%. So fixing the height of the table will keep it from expanding when a row is clicked. Pretty hackish but I got it to work even on IE8.