博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】解析JScrollPane类的使用
阅读量:4698 次
发布时间:2019-06-09

本文共 2730 字,大约阅读时间需要 9 分钟。

在这篇博文中,笔者介绍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);    }}

然后就可以看到滚动条了。

 

转载于:https://www.cnblogs.com/HDK2016/p/8470249.html

你可能感兴趣的文章
Mono For Android离线激活
查看>>
20135302魏静静Linux内核分析第二周学习总结
查看>>
XML文件中<return_code><![CDATA[SUCCESS]]></return_code>中CDATA的用法
查看>>
《重构:改善既有代码的设计》重构的方法整理
查看>>
HBase工程师线上工作经验总结----HBase常见问题及分析
查看>>
FICO_月末关帐
查看>>
获取包含中文字符串的长度、截取包含中文的字符串
查看>>
unity编辑器学习,创建自己的窗口
查看>>
Microsoft Build 2015
查看>>
使用EntityFrameWork 5.0增删查改(&分页,连表)
查看>>
ios block常见的错误(三)——并发编程的block引用
查看>>
Arcgis Server发布的带有透明度的地图服务,调用时不显示透明度问题
查看>>
Android Loader详解(官方文档翻译)
查看>>
[Java]ArrayList源码分析
查看>>
Mybatis中javaType和jdbcType对应关系
查看>>
Master Concept provides Professional Service for server and storage virtualization.
查看>>
客户端javascript笔记
查看>>
工作笔记——前端分页数据回显
查看>>
test小结
查看>>
Apache 调用不同的 PHP 版本
查看>>