在这篇博文中,笔者介绍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】解析JScrollPane类的使用的更多相关文章

  1. Java集合---Array类源码解析

    Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...

  2. MinerUrl.java 解析页面后存储URL类

    MinerUrl.java 解析页面后存储URL类 package com.iteye.injavawetrust.miner; /** * 解析页面后存储URL类 * @author InJavaW ...

  3. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

  4. Java 8 Optional 类深度解析

    Java 8 Optional 类深度解析 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只 ...

  5. Java虚拟机,类文件结构深度解析

    Java类文件结构 Java虚拟机不和包括Java在内的任何语言绑定,只与 "Class文件" 这种特定的二进制文件所关联, Class文件中包含了Java虚拟机指令集合符号表以及 ...

  6. java.lang.Void类源码解析_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerEx ...

  7. java 解析URL里的主域名及参数工具类

    java 解析URL里的协议及参数工具类,解析URL中的主域名,并统一把协议修改成http或去掉协议 public class UrlDomainUtils { private static fina ...

  8. JAVA JSON解析:类XPATH解析JSON

    目前JAVA解析JSON的方式有很多种,json-lib啊,GJSON啊,等等都可以解析,但通常是将JSON转换为对象或者是LIST或者是MAP,对于我们测试人员来说,其实我们并不需要里面的全部信息, ...

  9. 解析java.math.BigInteger类——构造函数

    最早由于做作业,结识了java的BigInrger类.读着读着,越来越觉得有趣.后来作业做完,也不忍丢下它,索性把全部代码研究一遍. 开始的时候,一个上午时间最多读懂2个方法.但是还是有滋有味的坚持了 ...

随机推荐

  1. SSAS知识回放之订单数据分析

    1:目标 基于已经做好的DW,利用SSAS实现一个多维数据模型的创建,通过浏览可以简单的实现订单数据的分析 2:步骤 2.1:添加数据源 如下图所示,创建一个数据仓库层的数据源连接 2.2:添加数据源 ...

  2. ASP入门(四)-VBScript的流程控制语句

    VBScript条件语句 我们可以使用四种条件语句 If - Then - 语句 If - Then - Else 语句 If - Then - ElseIf 语句 Select - Case 语句 ...

  3. 【转】java方法参数传递方式--按值传递、引用传递

    java的方法参数传递方式有两种,按值传递和引用传递 1.按值传递 参数类型是int,long等基本数据类型(八大基本数据类型),参数传递的过程采用值拷贝的方式 代码片段1: public class ...

  4. javascript中this的妙用

    this是javascript语言的一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用. this总是指向对象,并且为调用函数的那个对象: //调用普通函数 function f ...

  5. How to check WWN and Multipathing on Windows Server

    There are many ways to find the World Wide Name (WWN) of fibre channel HBA connected to windows serv ...

  6. 使用Selenium+PhantomJS实现网页内容加载(包括网页后期Ajax出来的结果)

    一.需求 需要Nuget下面的库: 二.代码 class Program { static void Main(string[] args) { TestPhantomJsDriver(); } pr ...

  7. Extjs的各版本下载

    Extjs的版本繁多,本文收集了Extjs各个版本的下载链接,包括官网和非官网的,以及各种汉化版api,欢迎大家下载分享. Extjs最新版下载链接:http://www.sencha.com/pro ...

  8. 深度学习-Caffe中启用MatlabSupport编译出错的解决方案

    一.如果编译前打算生成支持Matlab的库,则设置MatlabSupport为true之后. 二.记得添加Matlab的安装路径.我的是:D:\Application\DevTools\Matlab ...

  9. 你所了解到的Web攻击技术

    (1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击.(2)SQL注入攻 ...

  10. C#实现发布订阅模式

    首先给出项目的结构 IPublish.cs的源码: namespace NsWebChat.PublishSubscribe { /// <summary> /// 发布事件基础接口 // ...