今天在做项目的时候使用到了JScrollPane类,往里面放置一个布局格式为GridLayout的JPanel容器,结果JScrollPane容器的上下和左右滚动条死活不出来,于是上网查找了一下解决方案,只要设置了容器的PreferredSize属性,然后在添加到JScrollPane容器中,只要容器的大小超出JScrollPane容器的大小,滚动条出现了,之后再翻查了一下API,PreferredSize这个属性是设置组件的首选大小,如果这个值不设置则有UI提供大小。测试代码如下:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class CourtCtrl extends JPanel
{

	public CourtCtrl()
	{
		super();
		
		/**设置场地容器的大小*/
		this.setSize(190, 250);
		this.setPreferredSize(new Dimension(190,250));
		
		/**设置场地容器的布局*/
		this.setLayout(null);
		
		/**创建场地容器的内层容器*/
		JPanel inJPanel = new JPanel();
		inJPanel.setLayout(null);
		inJPanel.setSize(168, 228);
		inJPanel.setLocation(this.getWidth()/2 - inJPanel.getSize().width/2, 
				this.getHeight()/2 - inJPanel.getSize().height/2);
		inJPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
		
		this.add(inJPanel);
	}
	
	/**测试*/
	public static void main(String[] args)
	{
		/**测试窗体*/
		JFrame jf = new JFrame();
		jf.setSize(500, 500);
		
		JPanel jp = new JPanel();
		jp.setLayout(new GridLayout(10,10));
		for(int i = 0; i < 100; i++)
		{
			CourtCtrl court = new CourtCtrl();
			jp.add(court);
		}
		
		/**创建一个带滚动条的容器*/
		JScrollPane scrollPanel = new JScrollPane(jp);
		
		jf.add(scrollPanel);
		jf.setVisible(true);
	}
	
}

效果图:

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐