paint和paintComponent方法的关系
关键词: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) 就可以得到不同的显示效果。
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方法的关系相关推荐
- java中paint方法和paintComponent方法的不同
/*1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法2.由JComponent.java源代码 ...
- 图像化界面paint,repaint方法的总结
JAVA 画图中出现的paint()函数 问题:刚学JAVA,有一个问题.以下是一段JAVA代码,它弹出了一个窗口,并在窗口上使用paint()画出矩形.椭圆.扇面等图形.现在我想让画图行为受用户控制 ...
- java 重写paint_java笔记 重写paintComponent方法以实现jPanel加背景
N年不用java写图形界面,但想了想,在点击事件中给上边图形重绘的方法重新来一遍应该可行.代码如下: package com.yimik.test.swing; import java.awt.Gra ...
- java 字节码查看_一种查看java字节码时显示方法调用关系图的方法与流程
本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法. 背景技术: 目前软件反编译领域有不少对可执行文件进行反编译的工具如IDA,也有对Java代码生成的中间码文件 ...
- 关于Java中的paint,repaint,update三个方法的关系
几个星期前做了一个坦克大战,里面用到了这三个方法:repaint,update,paint,并且调用的顺序也是那样,当时没想太多,默认接受了,但是昨天看 Applet 时,它有一个绘图周期,里面就包 ...
- Java | 图形界面中paint,repaint,paintcomponent等函数的理解
事件派发线程::事件派发线程是用于swing组件的.当你在main函数里创建一个窗口类的子类像JFrame,就自动创建了一个事件派发线程,如果你在 窗口里按下一个按钮或操作其它控件,就会产生事件,如果 ...
- java repaint闪烁_java中paint,repaint,update之间的关系(闪烁问题的解决)
最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...
- 数据结构的映像方法(关系的机内表示)
关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构.顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系.非 ...
- 【转】自然语言系列学习之表示学习与知识获取(五)融合文本和知识,利用cnn方法进行关系抽取
本文重点放在怎么利用知识表示学习,辅助我们进行关系抽取,首先介绍如何利用分布式表示去融合知识和文本进行文本的抽取. 前文提到利用知识图谱学习了知识表示,就可以预测任意两个实体之间的关系,它是通过t-h ...
最新文章
- 大规模分布式存储系统(文摘)
- 技术分享 | 业务模板的技术实践
- 项目学生:JPA标准查询
- Android之智能问答机器人
- 【codevs1722】【NOI1997】最优乘车,单元最短路?
- 小贷公司的风险成因及应对策略——风险篇
- 如何利用大数据做好数据分析
- Mac 配置PHP运行环境
- HCIE-Security Day12:补充包过滤和安全策略的概念
- arcgis 快速制图插件_AutoCAD操作+视频教程+辅助工具和插件,限时分享无套路
- Android代码修改系统时间
- 华为平板解锁工具_它已不再是个娱乐工具 华为平板M6升级版:MatePad 10.8上手图赏...
- 模拟城市5一直显示服务器中断,EA关闭《模拟城市5》非关键功能缓解服务器问题...
- Oracle LiveLabs实验:Oracle Database Hybrid Active Data Guard
- 李开复哥大毕业演讲:工程师的AI银河系漫游指南
- python模拟点击屏幕ios_python模拟点击在ios中实现的实例讲解
- Codeforces Round #401 (Div. 2) D. Cloud of Hashtags(字符串 + 逆向思维)
- 33个机器学习常用数据集
- 第六天----数据结构笔记
- 用C语言检测文本编码的方法
热门文章
- 《程序员》11年02期精彩内容:我的创业故事
- 让数据使用自由而安全,安华金和“三驾马车”驱动数据安全治理
- 离线安装tensorboardx_TensorFlow的离线安装
- 江苏泗洪计算机学校怎么样,泗洪一大波学校先后被教育部点名!有没有你母校?...
- 视频剪辑必备,这6个网站承包你一年的音效素材
- turtle库函数大全
- ADAS-GPS定位原理概述
- nce计算机证书,2004年NCE-4全国计算机等级考试四级上机真题.doc
- sql自动发邮件功能
- JavaScript - Date对象使用