• JFrame中的paint()方法


    看下面的代码,

    public class super_paint extends JFrame{
        private JButton jt;
        public super_paint()
        {
            jt=new JButton("Hello");
            jt.setSize(20,10);
              
            Container container=getContentPane();
            this.add(jt);
            
        }
        @Override
        public void paint(Graphics g) {
            // TODO Auto-generated method stub
            super.paint(g);
            g.setColor(Color.red);
            g.draw3DRect(10,10,100,100,true);
            g.setColor(Color.green);
            g.fillOval(50,10,60,60);
             g.drawString("A myFrame object", 10, 50 );
        }
    
    
    }

    测试类如下:

    public class super_paint_Test {
        public static void main(String[] args)
        {
            JFrame t=new super_paint();
            t.setSize(300,300);
            t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             
            t.setVisible(true);
        }    
    
    }

    是显示时只会显示按钮,不会显示我们paint方法中的所画的内容,当窗口尺寸改变时就会调用paint()方法就可以看得我们paint()方法中的内容

    我们把构造函数 public super_paint() 中的内容去掉后,paint()方法中的内容运行时就可以显示正常了。

    Java中每次重绘都会调用paint方法。 

    public void paint(Graphics g) {
        //
    super.paint(g);
        Color c 
    = g.getColor();
        g.setColor(
    new Color(50,150,50));
        g.fillOval(tankPos.x, tankPos.y, tankWid, tankHei);
        g.setColor(c);
    }

    如果使用awt包里面的Frame类来构建窗口的话,上面的方法没有问题,但如果用他的子类swing里的JFrame的话,每次重绘,只是重绘窗口边框和paint方法里的东西,窗口的背景并没有被绘制出来,所以会看到窗口里显示的是下一层窗口里要显示的东西,是“透明”的。而且,如果你写的程序是动画效果时,repaint后上一帧的图像不会自动被清除,而是跟下一帧图像重叠。也就说明他的父类对象Frame可以完成工作(刷新屏幕)没有做。
    所以,我们要先调用其父对象也就是java.awt.Frame的paint方法,
    super.paint(Graphics g);
    这样就OK了.
    或者,我们也可以手工在paint里加上刷新屏幕的代码:
    g.setColor(this.getBackground());
    g.fillRect(0, 0, 窗口宽,窗口高);

    可以进一步参看http://www.dreamincode.net/forums/topic/80369-what-does-the-superpaintcomponentg-do/

    http://www.360doc.com/content/07/0911/13/7635_735929.shtml

    http://wenwen.soso.com/z/q238340956.htm

  • 相关阅读:
    Java SSM 框架相关基础面试题
    JPanel JScrollPanel
    Spring MVC 的 Converter 和 Formatter
    JDesktopPane JInternalFrames
    Spring MVC 中的 forward redirect Flash属性
    Java Swing 中使用 EventQueue
    Java 中转换为String类型的四种方法
    Eclipse 安装使用 M2Eclipse 插件
    正则表达式
    Spring MVC 数据绑定和表单标签库
  • 原文地址:https://www.cnblogs.com/youxin/p/2711216.html
Copyright © 2020-2023  润新知