北大青鸟 c 第八章 图形编程 Version 3.0 CHA
Version 3.0 图形编程 第八章
回顾 Java最新的事件处理方法是基于授权事 件模型。 事件是描述事件源状态变化的对象。用 户与GU图组件交互就会生成事件 事件源是一个生成事件的对象。当这个 对象的内部状态改变时,事件就会发生。 在发生事件时,事件源将调用监听器定 义的相应方法。 北大青鸟
2 回顾 • Java最新的事件处理方法是基于授权事 件模型。 • 事件是描述事件源状态变化的对象。用 户与GUI组件交互就会生成事件。 • 事件源是一个生成事件的对象。当这个 对象的内部状态改变时,事件就会发生。 • 在发生事件时,事件源将调用监听器定 义的相应方法
目标 ·解释图形的绘制 ·描述 Graphics对象 了解Font类 了解 Fontmetrics类 了解 Color类 掌握绘制各种图形的方法 北大青鸟
3 目标 • 解释图形的绘制 • 描述 Graphics 对象 • 了解 Font 类 • 了解 FontMetrics 类 • 了解 Color 类 • 掌握绘制各种图形的方法
在框架中显示信息 所有的图形被画到相关联的窗口中。 完全可以直接在框架(Frme)中绘入文本 信息,甚至可以直接在框架中绘图。 框架经常被设计为一个组件容器。一般首 先在一个面板中进行绘制,然后再将这个 面板添加到框架。 北大青鸟
4 • 所有的图形被画到相关联的窗口中。 • 完全可以直接在框架(Frame)中绘入文本 信息,甚至可以直接在框架中绘图。 • 框架经常被设计为一个组件容器。一般首 先在一个面板中进行绘制,然后再将这个 面板添加到框架。 在框架中显示信息
paintcomponent 方法 JPanel非常适合于绘制自定义图形 其图形对象是作为 paintComponent0方法的 参数获得的。 要创建自定义图形,需要编写扩展 JPanel 类的新类。并覆盖父类的 paintComponent0 方法 public void paintcomponent(Graphics g)i /将在这里通过参数g完成绘制代码 北大青鸟
5 paintComponent 方法 • JPanel 非常适合于绘制自定义图形 • 其图形对象是作为paintComponent() 方法的 参数获得的。 • 要创建自定义图形,需要编写扩展JPanel 类的新类。并覆盖父类的paintComponent() 方法: public void paintComponent(Graphics g){ . . .// 将在这里通过参数g完成绘制代码 }
Graphics对象 paintComponent方法包含一个 Graphics类型 的参数。 Graphics对象记录针对绘制图形和文本的 一系列设置,比如设置的图标或当前颜色 字体等。 ·Java中,所有绘制都必须通过一个图形对 象。 6 北大青鸟
6 Graphics对象 • paintComponent方法包含一个Graphics类型 的参数。 • Graphics对象记录针对绘制图形和文本的 一系列设置,比如设置的图标或当前颜色、 字体等。 • Java中,所有绘制都必须通过一个图形对 象
Graphics对象的局限性 可以用 Graphics对象绘制的图形是原始图 形 对于这些图形,不能使用实数坐标 不能绘制虚线或宽度不定的线条 不能使用纹理或渐变颜色填充形体 北大青鸟
7 Graphics对象的局限性 • 可以用Graphics对象绘制的图形是原始图 形。 • 对于这些图形,不能使用实数坐标 • 不能绘制虚线或宽度不定的线条 • 不能使用纹理或渐变颜色填充形体
Graphics2D对象 为了解决图形对象的 局限性,在Java11以后 的版本中引入了Jaa2D Java2D包括一个 Graphics2D类,此类扩展 了 Graphics类,所有图形方法都可以配合 Graphics2D对象使用 Java2D图形的重要功能 颜色和图案:图形可以用渐变颜色和填充图案着色。 透明绘制:图形的不透明度通过a透明值控制。 本地字体:平台上的所有本地字体都可用于绘制文本。 画笔的显式控制:可以使用线条的粗细、虚线图案以及 段连接样式。 坐标系的转换:可以使用平移、缩放、旋转和剪切 北大青鸟
8 Graphics2D对象 • Java2D 包括一个 Graphics2D 类,此类扩展 了 Graphics 类,所有图形方法都可以配合 Graphics2D 对象使用 • Java 2D 图形的重要功能: – 颜色和图案:图形可以用渐变颜色和填充图案着色。 – 透明绘制:图形的不透明度通过 α 透明值控制。 – 本地字体:平台上的所有本地字体都可用于绘制文本。 – 画笔的显式控制:可以使用线条的粗细、虚线图案以及 段连接样式。 – 坐标系的转换:可以使用平移、缩放、旋转和剪切 为了解决图形对象的 局限性,在Java1.1以后 的版本中引入了Java 2D
基本的绘图方法 每个AWT组件定义一种传递 Graphics对象的 paint 方法,绘制便是在该对象上执行。 public void paint(Graphics g)i g. setcolor( somero1ox);//设置颜色 g. setFont( somelimi tedFont);/设置字体 g. drawstring(.);//绘制字符串 g. drawline(.);//画线 设置 g. drawRect(.);//绘制图形轮廓 g.£i11Rect(.);//绘制填充图形 笔 数 g. drawPolygon(..);//绘制图形轮廓 g.£i11 Polygon(...);//绘制图形轮廓 上大青另
9 基本的绘图方法 public void paint(Graphics g) { g.setColor(someColor); // 设置颜色 g.setFont(someLimitedFont); //设置字体 g.drawString(...);//绘制字符串 g.drawLine(...); //画线 g.drawRect(...); // 绘制图形轮廓 g.fillRect(...); // 绘制填充图形 g.drawPolygon(...); //绘制图形轮廓 g.fillPolygon(...); //绘制图形轮廓 ... } 每个 AWT 组件定义一种传递 Graphics 对象的 paint 方法,绘制便是在该对象上执行。 设置 画 笔参 数
Java2D中的基本绘图方法 public void paintcomponent(Graphics g)t super paintcomponent(g)i Graphics2Dg2d=( Graphics2D)g;//强制转换为 Graphics2D g2d. setPaint(fillColororpattern)i g2d. setstroke(penThicknessOrPattern) g2d. setcomposite(someAlphaComposite)i g2d setFont(anyFont) 设置 g2d. setcolor (anyColor)i g2d. translate(.)i g2d rotate(.)i 数 g2d. scale(.)i g2d shear(.)i g2d. setrransform(someAffineTransform)i Some Shape s new Some Shape(.)i g2d.draw(s);∥/绘制图形轮廓 g2d.£i11(s);//绘制填充图形 北大青鸟
10 Java 2D 中的基本绘图方法 public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g;//强制转换为Graphics2D g2d.setPaint(fillColorOrPattern); g2d.setStroke(penThicknessOrPattern); g2d.setComposite(someAlphaComposite); g2d.setFont(anyFont); g2d.setColor(anyColor); g2d.translate(...); g2d.rotate(...); g2d.scale(...); g2d.shear(...); g2d.setTransform(someAffineTransform); SomeShape s = new SomeShape(...); g2d.draw(s); // 绘制图形轮廓 g2d.fill(s); // 绘制填充图形 } 设置 画 笔参 数