谈谈Graphics类.doc_第1页
谈谈Graphics类.doc_第2页
谈谈Graphics类.doc_第3页
谈谈Graphics类.doc_第4页
谈谈Graphics类.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

谈谈java.awt.Graphics类图形环境的概念同在 GUI 平台上开发应用程序紧密相关。虽然通常将窗口和组件本身作为对象来表达,但仍然需要另一个接口来执行实际的绘制、着色以及文本输出操作。Java 语言中提供这些功能的基类称作 java.awt.Graphics。从 java.awt.Component 类(所有窗口对象的基类)继承的类提供了一个名为 paint() 的方法,在需要重新绘制组件时,调用该方法。paint() 方法只有一个参数,该参数是 Graphics 类的实例。Graphics 类支持几种确定图形环境状态的特性。以下列出了部分特性:1.Color:当前绘制颜色,它属于 java.awt.Color 类型。所有的绘制、着色和纯文本输出都将以指定的颜色显示。2.Font:当前字体,它属于 java.awt.Font 类型。它是将用于所有纯文本输出的字体。3.Clip:java.awt.Shape 类型的对象,它充当用来定义几何形状的接口。该特性包含的形状定义了图形环境的区域,绘制将作用于该区域。通常情况下,这一形状与整个图形环境相同,但也并不一定如此。4.ClipBounds:java.awt.Rectangle 对象,它表示将包围由 Clip 特性定义的 Shape 的最小矩形。它是只读特性。5.FontMetrics:java.awt.FontMetrics 类型的只读特性。该对象含有关于图形环境中当前起作用的 Font 的信息。6.Paint Mode:该特性控制环境使用当前颜色的方式。如果调用了 setPaintMode() 方法,那么所有绘制操作都将使用当前颜色。如果调用了 setXORMode() 方法(该方法获取一个 Color 类型的参数),那么就用指定的颜色对像素做“XOR”操作。XOR 具有在重新绘制时恢复初始位模式的特性,因此它被用作橡皮擦除和动画操作。 Graphics 类方法:可以将 java.awt.Graphics 支持的非特性方法划分为三个常规类别之下:1.跟踪形状轮廓的绘制方法: draw3DRect() drawArc() drawBytes() drawChars() drawImage() drawLine() drawOval() drawPolygon() drawPolyline() drawRect() drawRoundRect() drawString() 2.填充形状轮廓的绘制方法: fill3DRect() fillArc() fillOval() fillPolygon() fillRect() fillRoundRect() 3.诸如 translate() 之类的杂项方法,它们将图形环境的起点从其缺省值 (0,0) 变成其它值。 请注意,没有对任意形状进行操作的操作。直到 Java 2D 出现以前,图形操作一直都是很有局限性的。还需注意的是,对于渲染具有属性的文本也没有直接支持;显示格式化文本是一项费事的任务,需要手工完成。下面我们来看一些具体的实例(注:所有的实例都没有加上关闭窗口的事件驱动,只能用Ctrl+C来中断程序):1.画线程序:import java.awt.*;import java.awt.event.*;import java.util.*;class Main extends Frame Vector points = new Vector();int lastDrawnPoint = 0;Main() super(drawLine Example);setSize(200, 200);addMouseListener(new MouseEventHandler();addMouseMotionListener(new MouseMotionEventHandler();show();public void paint(Graphics g) Point curPt = null;for (int i=0; i Point pt = (Point)points.elementAt(i);if (curPt != null) g.drawLine(curPt.x, curPt.y, pt.x, pt.y);curPt = pt;lastDrawnPoint = points.size();public void update(Graphics g) Point curPt = null;lastDrawnPoint = Math.max(0, lastDrawnPoint-1);for (int i=lastDrawnPoint; i Point pt = (Point)points.elementAt(i);if (curPt != null) g.drawLine(curPt.x, curPt.y, pt.x, pt.y);curPt = pt;lastDrawnPoint = points.size();class MouseEventHandler extends MouseAdapter public void mousePressed(MouseEvent evt) points.addElement(evt.getPoint();repaint();class MouseMotionEventHandler extends MouseMotionAdapter public void mouseDragged(MouseEvent evt) points.addElement(evt.getPoint();repaint();static public void main(String args) new Main();Graphics.drawLine(int x,int y,int x2,int y2);是从一个点的坐标到另一个点的坐标。这个实例的运行结果也就是可以任意的画线。可以任意的拖动鼠标,我们知道,线都是由点构成的。我们的主程序是继承java.awt.Frame这个类,重载了paint()和update()这两个方法。而在主类添加了两个事件new MouseEventHandler()和MouseMotionEventHandler()。当我们运行程序结果时就能知道,paint()只是最初的调用,以后都是调用update(),而在MouseEventHandler()和MouseMotionEventHandler()中调用repaint()也是sun的程序员在内部已经嵌入的,所以这个不是我们需要担心的,程序的原理我想大家都明白的,用一个向量来保存鼠标的点,lastDrawnPoint是一个重要的变量,然后就不说了。2.调用图片程序:import java.awt.*;class Main extends Frame Image image;Main(String filename) super(drawImage Example);try image = getToolkit().getImage(filename);setIconImage(image); catch (Exception e) e.printStackTrace();setSize(400, 200);show();public void paint(Graphics g) Insets insets = getInsets();int x = insets.left, y = insets.top;int w = image.getWidth(this);int h = image.getHeight(this);/ originalg.drawImage(image, x, y, this); / shrinkeng.drawRect(x, y, w/4+1, h/4+1);g.drawImage(image, x+1, y+1, w/4, h/4, this);/ horizontally flippedg.drawImage(image, x+w, y, x+2*w, y+h, w, 0, 0, h, this);/ vertically flipped g.drawImage(image, x+2*w, y, x+3*w, y+h, 0, h, w, 0, this);/ enlarged; use -1 to indicate proportional heightg.drawImage(image, x+3*w, y, 2*w, -1, this);static public void main(String args) if (args.length = 1) new Main(args0); else System.err.println(usage: java Main );相比较上面的程序,这个程式就简单的多,它就是调用你本地的图片,进行多角度显示。java.awt.Frame.getToolkit().getImage(filename)和Graphics.drawImage()是重要的方法。3。画圆程式:import java.awt.*;import java.util.*;import java.io.*;class Main extends Frame Vector points = new Vector();Main() super(drawOval Example);setSize(200, 200);show();void addPoint(Point p) points.addElement(p);repaint();public void paint(Graphics g) Insets insets = getInsets();int x = insets.left, y = insets.top;for (int i=0; i Point p = (Point)points.elementAt(i);g.drawOval(x+p.x-5, y+p.y-5, 10, 10);static public void main(String args) Main m = new Main();BufferedReader dis = new BufferedReader(new InputStreamReader(System.in);while (true) try m.addPoint(new Point(Integer.parseInt(dis.readLine(),Integer.parseInt(dis.readLine(); catch (Exception e) e.printStackTrace();System.exit(1);这个程式也比较简单,不过他调用了个System.in来限制画圆的坐标。4画三角形:import java.awt.*;import java.awt.event.*;class Main extends Frame Polygon polygon = new Polygon();Main() super(drawPolygon Example);addMouseListener(new MouseEventHandler();addMouseMotionListener(new MouseMotionEventHandler();setSize(200, 200);show();public void paint(Graphics g) System.out.println(paint:);g.drawPolygon(polygon);/ The default update method clears the screen which causes / flicker. This override avoids this.public void update(Graphics g) System.out.println(update:);paint(g);class MouseEventHandler extends MouseAdapter public void mousePressed(MouseEvent evt) System.out.println(mousePressed:);polygon.addPoint(evt.getX(), evt.getY();repaint();class MouseMotionEventHandler extends MouseMotionAdapter public void mouseDragged(MouseEvent evt) System.out.println(mouseDragged:);polygon.addPoint(evt.getX(), evt.getY();repaint();static public void main(String args) new Main();画三角形是一个很有意思的东东。它注意是确定三个点了。第一个是最重要的。以后所有的三角形也这个为中心,如果你拖动鼠标的话,就会出现N多。5写字:import java.awt.*;import java.awt.event.*;class Main extends Frame implements ItemListener MainCanvas cv = new MainCanvas();Choice choice = new Choice();Main() super(drawString Example);for (int i=4; i60; i += 4) choice.addItem(+i);choice.select(0);choice.addItemListener(this);cv.setFontSize(4);cv.setSize(300, 100);add(cv, BorderLayout.CENTER);add(choice, BorderLayout.SOUTH); pack();show();pub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论