版权声明:转载时请务必保留以下作者信息和链接
作者:陈维(chenweionline@hotmail.com)作者的网站:http://www.chenwei.mobi
AWT 提供了一些用户接口的构件,但是它不提供一些类似的纯粹的绘制图形的对象,例如 Rectangle、Polygon 和 Point 类没有任何绘制图形的能力。换句话说它们不具备 draw 方法,仅仅可以设置和的到它们代表的几何实体的信息。
为了代替那些纯粹的、可绘制图形的对象,AWT 使用了一种简单的模式。每个 AWT 构件完全来自于它自己的 java.awt.Graphics 对象。
java.awt.Graphics 是一个抽象类,其作用是定义一个真正的工具,用来接受图形操作。
表一:传递一个对 Graphics 的引用的 JDK 方法
java.awt |
Canvas |
paint(Graphics g) |
|
Component |
paint(Graphics g) |
|
Component |
paintAll(Graphics g) |
|
Component |
print(Graphics g) |
|
Component |
printAll(Graphics g) |
|
Component |
update(Graphics g) |
|
Container |
paint(Graphics g) |
|
Container |
paintComponents(Graphics g) |
|
Container |
print(Graphics g) |
|
Container |
printComponents(Graphics g) |
|
ScrollPane |
printComponents(Graphics g) |
java.beans |
Property-Editor |
paintValue(Graphics g, Rectangle r) |
|
Property-EditorSupport |
paintValue(Graphics g, Rectangle r) |
表二:返回 Graphics 引用的 JDK 方法
java.awt |
Component |
getGraphics() |
|
Image |
getGraphics() |
|
PrintJob |
getGraphics() |
|
Graphics |
create() |
|
Graphics |
create(intx, int y, int w, int h) |
Graphics 类履行2个主要的职责:
· 设置和获取图形参数。
· 在输出设备中执行图形操作。
得到构件的 Graphics 的引用有2种方法:
· 重载 表一 中的方法(传递 Graphics 的引用)
· 调用 表二 中的方法(返回 Graphics 的副本)
Graphics 对象的寿命
除了使用 表二 的方法得到的 Graphics 的副本外,使用 表一 的方法得到的 Graphics 的引用只有在方法的执行过程中才有效(例如重载的 paint() 和 update() 等方法)。一旦方法返回,引用将不再有效。
通过使用 表二 的方法得到的 Graphics 的对象使用完后需要调用 Graphics.dispose() 方法处理。
//程序片断
publicvoidsomeMethodInAComponent()...{
Graphicsg=getGraphics();
if(g!=null)...{
try...{
//...
//...
}
finally...{
g.dispose();
}
}
}
Graphics 类还提供2个方法创建 Graphics 对象:
Graphics create()
创建精确的 Graphics 副本。
Graphics create(int x, int y, int w, int h)
创建一个副本,但是,变元指定一个平移量 (x, y) 和一个新的剪贴矩形 (x, y, w, h)。create(int, int, int, int) 返回的 Graphics 的原点被转换成 (x, y) 的坐标,但是剪贴矩形转换为原剪贴矩形和指定矩形的交集。
importjava.applet.Applet;
importjava.awt.*;
importjava.awt.event.*;
publicclassCreateTestextendsApplet...{
privateImageimage;
publicvoidinit()...{
image=getImage(getCodeBase(),"lena.jpg");
try...{
MediaTrackermt=newMediaTracker(this);
mt.addImage(image,0);
mt.waitForID(0);
}
catch(InterruptedExceptione)...{
e.printStackTrace();
}
}
publicvoidpaint(Graphicsg)...{
Graphicscopy=g.create(image.getWidth(this),0,image.getWidth(this),image.getHeight(this));
try...{
System.out.println("g:"+g.getClip().toString());
System.out.println("copy:"+copy.getClip().toString());
g.drawImage(image,0,0,this);
copy.drawImage(image,0,0,this);
}
finally...{
copy.dispose();
}
}
}
分享到:
相关推荐
C++ 内存布局虚继承 ---Empty virtual base classs (空虚基类).doc
CnMISFrame 一套强大的MIS系统框架。 该框架的初步类结构如下 CnForm 所有窗口基类 --CnBaseForm 业务窗口基类 ... --CnAboutDialog 关于窗口基类 CnDmApp 应用程序管理对象 CnPattern CnException CnError
本资源尽量删除了所有其他类中使用的函数(可能一些字符串处理的没改,不过这部分一看应该就能明白意思) 此基类已经在本人使用的软件内使用,基本功能有:4种基本样式:缩略图.详细信息,列表,图标---同时实现了基本分组,...
此包内部为基类.除了部分宏可能出现编译错误(屏蔽即可) 其余部分可直接使用. 此类需要使用MOVEWINDOW进行设置位置以及大小 SETLISTSTYLE进行样式设置等 完结版完结版~ http://rj.91.com/91see/ 此连接的软件,主...
该对象是一个基类,是Androd调用WebService时调用的一个对象封装。
1.定义基类Shape,这有求面积的虚方法Mianji();求周长的虚方法Zhouchang()。 2.定义Shape类的派生类三角形Tangle,使用base关键字调用基类构造函数,重写Shape类继承的虚方法:求面积虚方法Mianji(),求周长虚...
意识到这些游戏在实现方面都非常相似,并且视图和控制器可以重用,你应该做一个模型基类/接口,让你的游戏子类/实现这个模型。 只需将 Model 类子类化(并可能更改主程序中的几行),即可轻松添加第三个游戏。 我的...
recyclerview 封装基类适配器和基类holder 以及分割线使用
ios中解析json对象基类中需要用的代码
每个项目我都必用的工具类,使用非常简单,放到项目目录中,java对象继承这个ToString类就可以,用在代码日志里特别方便,还支持过滤特定字段,满足日志保密性要求
dao层基类dao层基类dao层基类dao层基类dao层基类
多继承下的派生类构造函数必须同时负责该派生类的所有基类构造函数的参数传递。且构造函数和析构函数的调用顺序和单继承是一样的,先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么...
我收集的C#基类,比较全.我收集的C#基类,比较全. 包含有: ASP.NET类库 C#读取AD域里用户名或组 Common类库 DotNet基础类大全 SqlHelper基类 字符串加密
C#基类集合
C#基类库大全2013-04-12. C#基类库大全2013-04-12. C#基类库大全2013-04-12.
07.Kafka Java API 简单开发测试 08.storm-kafka 详解和实战案例 09.S图表框架HighCharts介绍 10.HBase快速入门 11.基于HBase的Dao基类和实现类开发一 12.基于HBase的Dao基类和实现类开发二 13.项目1-地区销售额-...
C++多线程基类C++多线程基类C++多线程基类C++多线程基类C++多线程基类C++多线程基类C++多线程基类C++多线程基类C++多线程基类
cshapr连接数据库--SqlHelper基类
数据访问基类 dao AdminDAO.java 管理员数据访问类 StudentDAO.java 学生数据访问类 model Student.java 学生实体类 Course.java 课程实体类 util DBUtil.java 数据库连接查询工具集 view LoginView.java 登录...
MFC类库详解,该MFC参考含盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容。