使用paint画图应加上super.paint(g)
来源:互联网 发布:matlab数据相关性分析 编辑:程序博客网 时间:2024/04/30 11:45
paint(g)函数会重绘图像,要加上super.paint(g),表示在原来图像的基础上,再画图。如果不加super.paint(g),重绘时,会将原有的绘制清空,再根据paing(g)函数绘制。
如下代码:
package aa;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import javax.swing.*;class Mypan extends JPanel{private static final long serialVersionUID = 1L;public Dimension d=null;public void setDimension(Dimension dim){d=dim;}public void paint(Graphics g){//super.paint(g);g.setColor(Color.GREEN);for(int i=0;i<=d.width/20;i++)g.drawLine(0+20*i, 0, 0+20*i, d.height);for(int j=0;j<d.height/20;j++)g.drawLine(0, 0+20*j, d.width, 0+20*j);}}public class Test extends JPanel{private static final long serialVersionUID = 1L;private JFrame jf=new JFrame("Test");private Mypan contenpan=new Mypan();public Test(){jf.setSize(496,498);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setContentPane(contenpan);jf.setVisible(true);contenpan.setLayout(null);contenpan.d=contenpan.getSize();contenpan.setBackground(Color.blue);}public static void main(String[] args) {// TODO Auto-generated method stubnew Test();}}运行结果:
将super.paint(g);前的注释去掉,运行结果为:
再看看以下程序:
package aa;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import javax.swing.*;class Mypan extends JPanel{private static final long serialVersionUID = 1L;public Dimension d=null;public void setDimension(Dimension dim){d=dim;}public void paint(Graphics g){super.paint(g);g.setColor(Color.GREEN);for(int i=0;i<=d.width/20;i++)g.drawLine(0+20*i, 0, 0+20*i, d.height);for(int j=0;j<d.height/20;j++)g.drawLine(0, 0+20*j, d.width, 0+20*j);}}public class Test extends JPanel{private static final long serialVersionUID = 1L;private JFrame jf=new JFrame("Test");private Mypan contenpan=new Mypan();public Test(){jf.setSize(496,498);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setContentPane(contenpan);jf.setVisible(true);contenpan.setLayout(null);contenpan.d=contenpan.getSize();contenpan.setBackground(Color.BLUE);contenpan.add(this);this.setBounds(20, 20, contenpan.d.width-40, contenpan.d.height-40);this.setBackground(Color.YELLOW);}public void paint(Graphics g){super.paint(g);g.setColor(Color.RED);g.fillRect(10*20, 10*20, 60, 20);}public static void main(String[] args) {// TODO Auto-generated method stubnew Test();}}运行结果:
如果将Mypan类中paint(g)函数中的super.paint(g)注释掉,结果为:
仅仅画了线,却没有把contenpan上加的this(contenpan.add(this))面板组件画上去。就是没有super.paint(g)的缘故。
我曾经有这样一个疑问:为什么this所代表的面板加在了contenpan面板上,为什么没有将contenpan面板上所画的线覆盖住。
原因是画线语句在super.paint(g)的后面,他是先画contenpan面板(包含this面板),再画直线的,所以直线没有被覆盖。
- 使用paint画图应加上super.paint(g)
- Android画图paint的使用
- JAVA重写paint画图
- android画图之paint
- 7 Paint 画图形
- Android中Paint画图
- [Java] AWT 画图方法 public void paint(Graphics g)
- Paint使用
- Paint 使用
- paint
- Paint
- paint
- Paint
- Paint
- Paint
- paint
- paint
- paint
- android UI设计的一些心得与问题解决
- SQL Server 将表中数据,转化成SQL Insert语句
- [Android源码分析]蓝牙打开分析--苦尽甘来之再次回到jni之上
- The coproc keyword
- 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
- 使用paint画图应加上super.paint(g)
- 让SQL server中有两个相同的数据库,这里只是内容是一样的,但文件名不一样
- XIP
- LINUX中断机制与信号(http://linux.chinaitlab.com/soft/878170.html)
- 大数据时代下的我们
- [龟秀]WC CB CH爬宠个体 名字解释
- freemarker教程
- php和c++socket通讯(基于字节流,二进制)
- 使用Audio Toolbox framework调用系统声音