Tuesday, October 29, 2013

Using JScrollPane in Java and getting the contents to actually scroll

This has almost nothing to do with Tivoli, but I hit this stupid problem every few years, and it takes me 30 minutes to figure out the solution each time. So I thought I would post it here:

When creating a fat GUI in Java, you may have a portion of your window that is a JScrollPane, which has a ViewPort and a ViewPortView (often a JPanel) . A common need is to add components to your JPanel (the ViewPortView). However, when you do this, you'll notice that whatever you do with the JScrollPane's scrollbars, it won't scroll in one or both directions. Well, the problem is that the addition of new components does NOT increase the value of the ViewPortView's PreferredSize attribute. So as you add more components, you need to manually update this attribute with code similar to:

myJScrollPane.getViewPort().getView().setPreferredSize(myNewDimension);

I've tried setViewSize(), and that doesn't seem to do anything - setPreferredSize is what you've got to do.


No comments: