码迷,mamicode.com
首页 > 编程语言 > 详细

【Java】解析JScrollPane类的使用

时间:2018-02-25 20:47:11      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:rgs   span   dimens   就是   详细   post   key   wstring   ack   

在这篇博文中,笔者介绍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类的使用

标签:rgs   span   dimens   就是   详细   post   key   wstring   ack   

原文地址:https://www.cnblogs.com/HDK2016/p/8470249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!