【Java】解析JScrollPane类的使用
在这篇博文中,笔者介绍JScrollPane类的使用,JScrollPane类可以为组件添加滚动条。在这里笔者不会详细介绍该类的方法有哪些,因为在API上已经写得一清二楚了。在这篇博文中,笔者重点介绍JScrollPane依据属性来添加滚动条的。
看下面这个案例:
JFrame frame=new JFrame("ScrollPanel测试"); JPanel panel=new JPanel();
System.out.println(panel.getPreferredSize().toString()); for(int i=0;i<6;i++){ panel.add(new JButton("按钮"+i));
System.out.println(panel.getPreferredSize().toString()); } frame.add(new JScrollPane(panel)); frame.setPreferredSize(new Dimension(400,400));//宽400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
6个按钮的宽度超过了400,结果出现了滚动条。但是我们同时也会发现一个规律,就是preparedSize一直在扩大,直到超过了400才出现滚动条的。
再看接下来的案例:
static JTextArea area=null; public static void main(String[] args) { JFrame frame=new JFrame("ScrollPanel测试"); area=new JTextArea(); area.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { System.out.println(area.getPreferredSize().toString()); } @Override public void keyPressed(KeyEvent e) { } }); frame.add(new JScrollPane(area)); frame.setPreferredSize(new Dimension(400,400));//宽400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
通过这个案例也可以发现,每输入一个文字,preparedSize就在扩大,直到超过400,才出现滚动条的。
这样以来就是验证了JScrollPanel是按照容器的preparedSize来决定是否出现滚动条的。
例如:
public class JScrollPaneTest { public static void main(String[] args) { JFrame frame=new JFrame("ScrollPanel测试"); MyPanel panel=new MyPanel(); frame.add(new JScrollPane(panel)); frame.setPreferredSize(new Dimension(400,400));//宽400,高400 frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class MyPanel extends JPanel{ @Override public void paint(Graphics g) { super.paint(g); g.drawString("hello", 500, 500);//在500,500处写入文字 } }
上面的程序为,主窗口的大小设置为高400,宽400。在主窗口中添加了MyPanel的实例,该实例类继承自JPanel,并且重写了paint方法,在坐标为(500,500)处写下文字。运行结果,并非你相信的那样会出现滚动条,然后我们再把MyPanel实例的preparedSize打印一下,会发现PreparedSize的宽为10,高为10。到现在我们就弄清楚了,原来MyPanel实例的大小比主窗口的大小要小,所以不会出现滚动条。因此这样修改MyPanel类就可以了:
class MyPanel extends JPanel{ @Override public void paint(Graphics g) { super.paint(g); g.drawString("hello", 500, 500);//在500,500处写入文字 } @Override public Dimension getPreferredSize() { return new Dimension(600,600); } }
然后就可以看到滚动条了。
分类:
JAVA
标签:
java
, jscrollpane
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异