Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make JScrollPane work properly with nested JPanels?

I'm building a Swing application in Java using NetBeans and I have a problem with layout. My main frame contains a JScrollPane which contains a JPanel called contentPanel which in turn contains a JPanel called listPanel. The listPanel is empty when the program starts, but when the user interacts with the program an unpredictable number of smaller JPanels are added to it. I've used the NetBeans GUI-builder to snap the top edge of listPanel to the top of contentPanel, and the same with the bottom edges.

The problem I have is that when more components are added to listPanel the vertical scrollbar doesen't appear on my scrollpane. The verticalScrollBarPolicy of my scrollpane is set to AS_NEEDED and its viewportView is set to contentPanel. What I think I need to do is to make contentPanel grow when more items are added to listPanel.

like image 927
Viktor Dahl Avatar asked Oct 15 '25 15:10

Viktor Dahl


1 Answers

The problem I have is that when more components are added to listPanel the vertical scrollbar doesen't appear on my scrollpane.

The scrollbar will appear when the preferred size of the component added to the scrollpane is greater than the size of the scrollpane. When you add components dynamically you need to tell the scrollpane something has changed. So you basic code should be:

panel.add( subPanel );
panel.revalidate();

Or, because you are adding a panel to the sub panel, you may need to revalidate the scrollpane (I don't remember):

panel.add( subPanel );
scrollPane.revalidate();   

The key is the revalidate() which tell the layout manager to recalculate its size.

like image 54
camickr Avatar answered Oct 18 '25 09:10

camickr



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!