How do I make JScrollPane work properly with nested JPanels?

。_饼干妹妹 提交于 2019-12-13 14:11:59

问题


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.


回答1:


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.




回答2:


Use a different LayoutManager. One that will allow for vertical growth like BoxLayout. Also remember that you can use multiple layouts and nest them inside of each other for different effects.



来源:https://stackoverflow.com/questions/5193162/how-do-i-make-jscrollpane-work-properly-with-nested-jpanels

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!