/*
1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法
2.由JComponent.java源代码中可以看见其中的paint()方法中调用paintComponent, paintChildren, paintBorder等方法;
所以该类中的paint方法会影响子组件的绘制, 而paintComponent方法只会影响该组件本身 3.paint方法 和 paintComponent方法都是对一个组件进行渲染的(组件创建并显示之后),并不是产生和显示该组件的! 4.swing 组件和 awt组件 paint方法的不同:awt组件的paint方法有自动刷新背景颜色的功能, 而swing组件一定要调用super.paint()
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BkGnd extends Frame{
public BkGnd(){
setTitle("更换背景!");
setSize(new Dimension(600, 600));
setLayout(new FlowLayout());
myPanelOne panel = new myPanelOne();
panel.setBackground(Color.yellow);
panel.setPreferredSize(new Dimension(500, 500));
myPanelTwo pl = new myPanelTwo();
pl.setPreferredSize(new Dimension(400, 400));
pl.setBackground(Color.blue);
panel.add(pl);
add(panel);
addWindowListener(new MyClosingListener());
}
public static void main(String args[]){
BkGnd myFrame = new BkGnd();
myFrame.setVisible(true);
}
} /*
//第一种情况: 如果没有super.paint(g);则该面板上的组件将不能正常显示
//如果加上super.paint(g);那么首先通过该方法将该面板上的组件显示出来,然后在执行super.paint(g);下面的绘图语句。会导致将该面板上的组件覆盖
//父类的paint方法来负责调用paintComponent, paintChildren, paintBorder, update方法
class myPanelOne extends JPanel{
public void paint(Graphics g){
super.paint(g);
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);
}
} class myPanelTwo extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);
}
} */ /*
//第二种就可以的到正常预想的结果
class myPanelOne extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);//用于绘制自身面板的背景
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);
}
} class myPanelTwo extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);
}
} */ //重写Component类中的paint()方法的子类,super.paint(g) 不会影响其子组件。
//第三种的效果等同于第二种的效果(正常的预想的结果)
class myPanelOne extends Panel{
public void paint(Graphics g){
//super.paint(g);//加和不加都一样
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 400, 400, this);
}
} class myPanelTwo extends Panel{
public void paint(Graphics g){
g.drawImage(new ImageIcon("zjy1.jpg").getImage(), 0, 0, 200, 200, this);
}
} /*
*/ class MyClosingListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}

  

java中paint方法和paintComponent方法的不同的更多相关文章

  1. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  2. java中equals方法和contentEquals方法区别

    java中,String类里提供了两种字符串的比较方式(算上“==”应该是三种) String line1 = new String("0123456789"); String l ...

  3. Java中get()方法和set()方法如何使用?

    在java中,为了保证数据的安全性,我们会把数据定义为private等(私有.封装),如果想要调用就会用到set()方法与get方法或者构造函数方法.这里说的是第一种方法,set()与get(),既然 ...

  4. Java 中 sleep 方法和 wait 方法的区别?

    虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...

  5. 线程中sleep方法和wait方法有什么区别?(转)

    本文转自https://www.cnblogs.com/linkstar/p/6043846.html 线程中sleep方法和wait方法有什么区别?   如果你没有接触过java的多线程,那么多对于 ...

  6. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  7. ThinkPHP 中M方法和D方法详解----转载

    转载的地址,http://blog.163.com/litianyichuanqi@126/blog/static/115979441201223043452383/ 自己学到这里的时候,不能清除的分 ...

  8. ThinkPHP 中M方法和D方法的具体区别(转)

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  9. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

随机推荐

  1. 特征哈希(Feature Hashing)

    [本文链接:http://www.cnblogs.com/breezedeus/p/4114686.html,转载请注明出处] 我的博客主营地迁至github,欢迎朋友们有空去看看:http://br ...

  2. nil、Nil、NULL和NSNull的理解

    http://blog.sina.com.cn/s/blog_4930f8e60101h71b.html 其实早就想研究一下nil.Nil.NULL和NSNull之间的区别,只是工作上除了nil,其它 ...

  3. 6410移植android4.4.2笔记(持续更新)

    如之前的android编译笔记里面描述,目前已经可以编译出armv7-neon的android镜像了,也就是说目前的环境以及aosp可以支持定制android程序了. 昨天晚上在device下面已经粗 ...

  4. 64位WIN7下安装MPICH2

    1.首先,下载32位的MPICH2,(注意哦,是32位,不是64位) http://202.117.4.228/files/B117000000042632/www.mcs.anl.gov/resea ...

  5. 对bit、byte、TByte、Char、string、进制的认识

    在学校老师就教1byte = 8bit,一个Byte在内存中占8个房间.每个房间都有门牌号.找到内存中的内容就找门牌号,寻址什么的,虽然在听,但是脑袋里一头雾水,到现在只知道会用就行,但原理也不是那么 ...

  6. 《理解 ES6》阅读整理:函数(Functions)(三)Function Constructor & Spread Operator

    增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个 ...

  7. poj 1702 三进制问题

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3906   Accepted: 1924 Description Eva h ...

  8. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  9. 人人都是 DBA(VII)B 树和 B+ 树

    B 树(B-Tree)是为磁盘等辅助存取设备设计的一种平衡查找树,它实现了以 O(log n) 时间复杂度执行查找.顺序读取.插入和删除操作.由于 B 树和 B 树的变种在降低磁盘 I/O 操作次数方 ...

  10. json-smart 使用示例(推荐fastjson)

    关于json库,请使用fastjson,这是我用过的最好用的json库! 地址:https://github.com/alibaba/fastjson ======================== ...