• 【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);
        }
    }

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

  • 相关阅读:
    angular 前端路由不生效解决方案
    LinqMethod 实现 LeftJoin
    Newtonsoft.Json 序列化踩坑之 IEnumerable
    Newtonsoft.Json 指定某个属性使用特定的时间格式
    [svc]Linux中Swap与Memory内存简单介绍
    [svc]Linux vmstat命令实战详解
    [svc]ansible自动化模块
    [svc]ssh+gg二步认证
    [svc][cpu][jk]cpu的核心查看及什么是cpu的负载
    [vt][xen]xenserver初始安装增加第二块硬盘&xen图形界面安装vm&设置xen里vm开机启动
  • 原文地址:https://www.cnblogs.com/HDK2016/p/8470249.html
Copyright © 2020-2023  润新知