paint和paintComponent方法的关系
来源:互联网 发布:淘宝学院官网 编辑:程序博客网 时间:2024/05/16 10:18
关键词:swing,paint,paintComponent,paintBorder
paint :绘制容器。
paintComponents : 绘制此容器中的每个组件。
由此不难看出,二者就是房子与家具的关系。
但是该类中并不包含paintBorder方法,由此我想,该方法应该是位于扩展包中,很幸运,在javax.Swing包中的JComponent类中,找到了paint,paintComponent和paintBorder三个方法,我想这应该就是小朱宇要问的,查看API,有如下解释:
paint :由 Swing 调用,以绘制组件。此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。子类可以始终重写此方法。只想特殊化 UI(外观)委托的 paint 方法的子类只需重写 paintComponent。
paintComponent :如果 UI 委托为非 null,则调用该 UI 委托的 paint 方法。向该委托传递 Graphics 对象的副本,以保护其余的 paint 代码免遭不可取消的更改
paintBorder :绘制组件的边框。
paintChildren :绘制此组件的子组件。
由此可以看出,在Swing 中,组件绘制 paint() 方法会依次调用 paintComponent(),paintBorder(),paintChildren() 三个方法。根据方法名就可以看出,paintComponent() 绘制组件本身,paintBorder() 绘制组件的边框,paintChildren() 绘制组件的子组件,所以Swing 编程时,如果继承 JComponent 或者其子类需要重绘的话,只要覆写 paintComponent() 而不是 paint(),方法 paintBorder(),paintChildren() 一般默认即可。
如下面的程序我们写了一个类ZPanle继承自JPanel,我们只要重写protected void paintComponent(Graphics g) 就可以得到不同的显示效果。
paint :绘制容器。
paintComponents : 绘制此容器中的每个组件。
由此不难看出,二者就是房子与家具的关系。
但是该类中并不包含paintBorder方法,由此我想,该方法应该是位于扩展包中,很幸运,在javax.Swing包中的JComponent类中,找到了paint,paintComponent和paintBorder三个方法,我想这应该就是小朱宇要问的,查看API,有如下解释:
paint :由 Swing 调用,以绘制组件。此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。子类可以始终重写此方法。只想特殊化 UI(外观)委托的 paint 方法的子类只需重写 paintComponent。
paintComponent :如果 UI 委托为非 null,则调用该 UI 委托的 paint 方法。向该委托传递 Graphics 对象的副本,以保护其余的 paint 代码免遭不可取消的更改
paintBorder :绘制组件的边框。
paintChildren :绘制此组件的子组件。
由此可以看出,在Swing 中,组件绘制 paint() 方法会依次调用 paintComponent(),paintBorder(),paintChildren() 三个方法。根据方法名就可以看出,paintComponent() 绘制组件本身,paintBorder() 绘制组件的边框,paintChildren() 绘制组件的子组件,所以Swing 编程时,如果继承 JComponent 或者其子类需要重绘的话,只要覆写 paintComponent() 而不是 paint(),方法 paintBorder(),paintChildren() 一般默认即可。
如下面的程序我们写了一个类ZPanle继承自JPanel,我们只要重写protected void paintComponent(Graphics g) 就可以得到不同的显示效果。
package com.zakisoft.frame02; import java.awt.Graphics; import java.awt.Image; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JPanel; public class ZPanel extends JPanel { private static final long serialVersionUID = 6702278957072713279L; private Icon wallpaper; public ZPanel() { System.out.println("f:ZPanel()"); } protected void paintComponent(Graphics g) { if (null != wallpaper) { processBackground(g); } System.out.println("f:paintComponent(Graphics g)"); } public void setBackground(Icon wallpaper) { this.wallpaper = wallpaper; this.repaint(); } private void processBackground(Graphics g) { ImageIcon icon = (ImageIcon) wallpaper; Image image = icon.getImage(); int cw = getWidth(); int ch = getHeight(); int iw = image.getWidth(this); int ih = image.getHeight(this); int x = 0; int y = 0; while (y <= ch) { g.drawImage(image, x, y, this); x += iw; if (x >= cw) { x = 0; y += ih; } } } }
- paint和paintComponent方法的关系
- paint和paintComponent方法的关系
- Swing paint和paintComponent方法的关系
- paint和paintComponent方法的关系
- paint和paintComponent方法的关系
- paint和paintComponent方法的关系
- java中paint,paintComponent和paintBorder方法之间的关系
- java中paint,paintComponent和paintBorder方法之间的关系
- paint方法和paintComponent的区别
- paint().paintComponent()方法的区别
- paint()方法与paintComponent()方法的区别
- JFC 中绘制方法 paint(Graphics g) 和 paintComponent(Graphics g) 的区别
- JFC 中绘制方法 paint(Graphics g) 和 paintComponent(Graphics g) 的区别(转)
- 【paint和paintComponent的区别,兼谈Canvas和JPanel】
- paint()与paintComponent()的区别
- 关于repaint,paint,paintComponent...的问题
- Swing之paint与paintComponent的区别
- Swing之paint与paintComponent的区别
- Python - for()循环 详解 及 代码
- Java 正确的做字符串编码转换
- 使用C编译器编写shellcode
- C++基础学习笔记----第十三课(操作符重载-下)
- C# 获取xlsx表名
- paint和paintComponent方法的关系
- Android读写文件
- 火星文 wa
- thinkphp验证码更改
- [LeetCode]Path Sum,解题报告
- CF 370
- eclipse在线安装SVN出错
- No bean named 'userService' is defined 问题解决 maven ssh
- 利用jacob完成文档格式的转换(PDF)