版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、TEL:Email:JAVA编程1第六章 图形图像2Graphics对象Graphics 类是所有图形上下文的抽象基类,允许应用程序可以在组件以及图像上,进行绘制。 Graphics对象记录针对绘制图形和文本的一系列设置,比如设置的图标或当前颜色、字体等。 Java中,所有绘制都必须通过一个Graphics对象。3Graphics对象的局限性可以用Graphics对象绘制的图形是原始图形。对于这些图形,不能使用实数坐标不能绘制虚线或宽度不定的线条不能使用纹理或渐变颜色填充形体4Graphics2D对象Java2D 包括一个 Graphics2D 类,此类扩展了 Graphics 类,所有图形方
2、法都可以配合 Graphics2D 对象使用Java 2D 图形的重要功能: 颜色和图案:图形可以用渐变颜色和填充图案着色。透明绘制:图形的不透明度通过 透明值控制。本地字体:平台上的所有本地字体都可用于绘制文本。画笔的显式控制:可以使用线条的粗细、虚线图案以及段连接样式。坐标系的转换:可以使用平移、缩放、旋转和剪切 为了解决图形对象的局限性,在Java1.1以后的版本中引入了Java 2D。5Graphics是一个抽象类,其实现大都是平台相关的,所以不容易自己创建一个Graphics对象。一般Graphics对象会由依照你所在的桌面环境给出。Graphics类及其子类Graphics2D提供
3、的只是一些基本绘图方法,比如画直线、曲线。 所以做一个图形组件的基本思路可以总结为以下过程: 选择适合的基本图形组件 - 继承它 - 重写paint等方法 - 在需要刷新图形的时候调用repaint等方法 真正的Graphics对象只有当程序在jvm上运行的时候才会创建,所以无需考虑构造。Graphics g=frame.getGraphics();6基本的绘图方法 public void paint(Graphics g) g.setColor(someColor); / 设置颜色 g.setFont(someLimitedFont); /设置字体 g.drawString(.);/绘制字符
4、串 g.drawLine(.); /画线 g.drawRect(.); / 绘制图形轮廓 g.fillRect(.); / 绘制填充图形 g.drawPolygon(.); /绘制图形轮廓 g.fillPolygon(.); /绘制图形轮廓 . 每个 AWT 组件定义一种传递 Graphics 对象的 paint方法,绘制便是在该对象上执行。设置画笔参数7Java 2D 中的基本绘图方法public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2d = (Graphics2D)g;/强制转换为Grap
5、hics2D 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.d
6、raw(s); / 绘制图形轮廓 g2d.fill(s); / 绘制填充图形设置画笔参数8Font 类Font 类只有一个构造函数:public Font(String name, int style, int pointsize)参数name表示字体的名称。参数style表示样式可以是Font.PLAIN、 Font.BOLD 或 Font.ITALIC 参数pointsize表示字体的点数,即以磅为单位的字体大小,可以是 11、12、14、16 等。9通过使用 getFontMetrics( ) 方法,而不是new运算符(因为它是一个抽象类),可以创建该类的对象。这个对象包含与字体相关的大
7、量信息,包括字符的高度、按像素数计算的字符串宽度等。 常用方法如下: int stringWidth(String s):返回字符串宽度 int charWidth(char c):返回字符c的宽度 int getHeight():返回字体的高度 FontMetrics 类有时,需要测量用特殊字体显示的一个字符串,可以使用FontMetrics 类10使用字体示例1import java.awt.*;import javax.swing.*;class FontsPanel extends JPanel public void paintComponent(Graphics g) String
8、 quote= Happiness is an attitude.; Font f=new Font(Georgia,Font.ITALIC,16); g.setFont(f); g.drawString(quote,20,20); 该包中包含JPanel和JFrame组件创建一种新字体,并将该字体设置为当前字体public class FontsDemo extends JFrame public FontsDemo() setTitle(test); setSize(300,200); Container contentPane=getContentPane(); contentPane.
9、add(new FontsPanel(); public static void main(String args) FontsDemo frame=new FontsDemo(); frame.show(); 11使用字体示例2import java.awt.*;import javax.swing.*;class Fonts2Panel extends JPanel public void paintComponent(Graphics g) String myquote=Happiness is an attitude.; Font f=new Font(Times New Roman,
10、Font.BOLD+Font.ITALIC,24); g.setFont(f); FontMetrics fm=getFontMetrics(f); int x=(getSize().width - fm.stringWidth(myquote)/2; int y=getSize().height/2; g.drawString(myquote,x,y); 创建一种新字体,并设为当前字体求字符串宽度12列出当前平台上所有可用字体import java.awt.*;public class ListFonts public static void main(String args) Graphi
11、csEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); String fontNames = env.getAvailableFontFamilyNames(); System.out.println(可用字体:); for(int i=0; ifontNames.length; i+) System.out.println( + fontNamesi); 13颜色java.awt.Color 类提供了13个可用作标准颜色的常量: black(黑色) green(绿色) red(红色) blue(蓝色) li
12、ghtGray(浅灰色)white(白色) cyan(蓝绿色) magenta(洋红色) yellow(黄色) darkGray(深灰色) orange(橙色) gray(灰色) pink(粉红色) 14Color类的构造函数Color类的构造函数如下: - Color(int red,int green,int blue):使用三个分别代表红、绿、蓝的整数来表示它们混合的颜色。这些值必须在0到255之间。 -Color(float red,float green,float blue):用三个浮点数指定红、绿、蓝的相对混合。 Color a= new Color(0.907F,2F,0F);
13、 Color b= new Color(255,255,0); 15如果要修改或设置组件的颜色,可以使用下列几种方法:void setColor(Color newColor):设置当前绘制的颜色 void setForeground(Color):设置前景色void setBackground(Color):设置背景色 设置颜色方法16使用颜色示例import java.awt.*;import javax.swing.*;class ColorsPanel extends JPanel public void paintComponent(Graphics g) Font f=new Fo
14、nt(Georgia,Font.ITALIC,16); g.setFont(f); g.setColor(Color.red); g.drawString(Hello,75,100); g.setColor(new Color(0,128,128); g.drawString(World,75,125); 17绘制图形 2-1使用 AWT 时,通常通过调用 Graphics 对象的 drawXxx 或 fillXxx 方法来绘制图形。通过drawXxx方法绘制图形边框,通过fillXxx 方法绘制填充图形。这些对象用当前选择的颜色来绘制和填充,黑色是默认的颜色。18绘制图形 2-2在 Java
15、 2D 中,通常先创建 Shape 对象,然后调用 Graphics2D 对象的 draw 或 fill 方法。Java 2D 库以面向对象的方式组合几何形体。java.awt.geom包中囊括了一些有用的Shape实现。如:Line2DRectangle2DEllipse2D19使用线条绘制图形java.awt.Graphics中提供了一些方法用来绘制图形对象中的直线和多边形。方法如下: void drawLine(int startX,int startY,int entX,int endY):绘制一条直线 void drawPolygon(int x,int y,int numpoint
16、s):绘制多边形轮廓 void fillPolygon(int x,int y,int numpoints):绘制填充多边形 void drawPolyline (int x,int y,int numpoints):绘制顺序连线,如果第一个点和最后一个点不同,该图形不封闭20绘制矩形和椭圆 void drawRect(int top, int left, int width, int height):绘制矩形边框void fillRect(int top, int left,int width, int height) :绘制填充矩形void drawOval(int top, int le
17、ft, int width, int height):绘制椭圆边框void fillOval(int top, int left,int width, int height) :绘制填充椭圆21绘图示例class ShapesPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); g.drawLine(0,0,100,100);/画线 g.drawRect(10,10,60,30); /绘制矩形 g.drawRoundRect(90,80,80,80,20,20);/绘制圆角矩形
18、int xpoints=20,50,60,30,10; int ypoints=50,50,70,90,70; g.drawPolygon(xpoints,ypoints,5);/绘制多边形 g.setColor(Color.red);/设置颜色 g.fillRect(90,10,80,30);/绘制填充矩形 g.fillRoundRect(180,50,100,80,15,15);/绘制填充圆角矩形 g.fillOval(10,100,80,30); /绘制填充椭圆 22绘图模式XOR 模式的优点是,无论用什么颜色绘制对象,始终能够保证新对象是可见的。语法如下所示: void setXORM
19、ode(Color xorColor) 其中,xorColor 指定了绘制对象时与窗口进行异或操作的颜色。 要返回至覆盖模式,请调用 setPaintMode(): void setPaintMode() 绘图模式决定了对象是如何被画在窗口中的。默认情况下,对一个窗口的新的输出将覆盖该窗口中的任何已经存在的内容。 23import java.awt.*;import javax.swing.*;class XORPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(g); g.setCo
20、lor(Color.red); g.fillRect(10,10,80,30); g.setColor(Color.green); g.fillRect(50,20,80,30); g.setXORMode(Color.blue);/设置为XOR绘图模式 g.fillOval(90,30,80,30); 设置绘图模式示例24Toolkit许多 GUI 操作可以异步执行。这意味着如果设置某一组件的状态,随后立刻查询该状态,则返回的值可能并没有反映所请求的更改。因为涉及底层平台。Toolkit 定义的一些方法能直接查询本机操作系统。所以能够将与平台无关的类与对应物连接起来。抽象超类 25Toolk
21、it 对象要获得 Toolkit 对象,可以使用 Toolkit 类的静态 getDefaultToolkit 方法。 Toolkit getDefaultToolkit() :返回缺省工具包。 26创建图像对象和读取文件以下提供了从当前目录获取本地图像文件的代码(如果图像文件不在当前目录中,必须提供完整的路径名):String name=xyz.gif;Image img=Toolkit.getDefaultToolkit().getImage(name);27要从网络中获得图像文件,必须提供 URL,例如:URL url=new URL(http:/);Image img= Toolkit
22、.getDefaultToolkit().getImage(url) ;28显示图片把读进来的图片放在img 这个Image 类型的对象中了,然后可以使用Graphics 类中的drawImage()方法来显示它:public void paint(Graphics g) g.drawImage(im,0,0,this); 29drawImage()public abstract boolean drawImage(Image img, int x, int y, int width, int heightImageObserver observer) 第四个参数ImageObserver o
23、bserver意思是当转换图像时要通知的对象。 30import java.awt.*;public class Exam4_13 extends Framepublic void paint(Graphics g) Image pic;pic = Toolkit.getDefaultToolkit().getImage(“1.jpg);int x0 = 10, y0 = 30;int w = pic.getWidth(this);int h = pic.getHeight(this);g.drawImage(pic, x0, y0, w/8, h/8, this);g.drawImage(p
24、ic, x0+150, y0, w/12, h/12, this);public static void main(String args)Exam4_13 ex=new Exam4_13();ex.setVisible(true);ex.setSize(400,400);31Java多媒体技术 32Java多媒体包JMF的应用Java有一个多媒体包JMF(Java Media Framework),可以用来编写多媒体应用程序。Sun公司的网站俄有JMF多媒体包下载,其文件名为:jmf-2_1_1e-windows-i586.exe。JMF提供给我们编写多媒体程序的包为javax.media。
25、应用JMF建立的多媒体程序可以播放.mpg、.avi、.mp3等格式的音频及视频文件。33Applet介绍 34Java Applet基础Applet 是一种为通过 Web 浏览器在 Internet 上工作而设计的 Java 程序。Applet 是用Java编写的小应用程序,它能够嵌入在HTML网页中,并由支持Java的Web浏览器来解释执行。 35Java Applet 工作原理HTML文件嵌入Appletwww服务器www服务器www浏览器请求HTML文件下载HTML文件请求Applet字节码下载Applet字节码解释执行Applet字节码36从 Web 上下载的 java Applet
26、 是在称为沙箱 (sandbox) 的安全环境中运行的。大多数浏览器上,在沙箱中运行时:Applet 绝不能运行任何一个本地可执行程序。Applet 除了可以与从中下载它们的服务器进行通信外,不能与任何主机通信。 Applet 不能读写本地计算机的文件系统。Applet 不能查找除版本号等以外的任何关于本地计算机的信息。Applet 的安全性37Java Applet程序的基本结构import java.applet.*;import java.awt.*;classextends Applet 类名称类成员声明38第一个Applet程序import java.awt.*;import jav
27、a.applet.*;public class Firstapplet extends Applet String s; public void init() s= 你好,世界!; public void paint(Graphics g) g.drawString(s, 70, 80); 覆盖了Applet类的init( ) 方法。该方法主要用于初始化Applet中的变量。 覆盖了Applet类的paint( )方法。用于在屏幕上给定的位置绘制字符串39Applet源文件首先用 Java 编译器编译: javac Firstapplet.java创建一个用于显示 Applet 的 HTML
28、文件:然后在命令提示符处键入下列代码: appletviewer Firstapplet.html编译和运行 Applet40要在支持 Java 的浏览器中查看 Applet,则需要加载 HTML 文件。Applet 会显示为 HTML 网页的一部分。 要运行 Applet,浏览器必须启用 Java 插件。 在浏览器中查看 Applet41Applet 和应用程序之间的区别Applet应用程序Applet基本上是为部署在Web上而设计的应用程序是为作为独立程序工作而设计的Applet是通过扩展 java.applet.Applet 类创建的应用程序则不受这种限制Applet 通过appletv
29、iewer或在支持Java的浏览器上运行应用程序使用Java解释器运行Applet 的执行从 init() 方法开始应用程序的执行从 main() 方法开始Applet必须至少包含一个 public 类,否则编译器就会报告一个错误。在该类中不一定要声明 main( )方法。对于应用程序,public 类中必须包括main( ),否则无法运行。42将应用程序转换为 Applet可以将一个图形化的Java应用程序转换成一个Applet。步骤如下: 1. 取消应用程序中的 main方法。 2. 用Applet或JApplet替换Frame或JFrame,并将此类设为 public。否则这个Apple
30、t不能被下载。 3. 去掉应用程序中对窗体的setSize方法和setTitle方法的调用。 4. 将所有的初始化代码从框架窗口构造函数移至 Applet 的 init 方法中。43Applet 的生命周期 2-1Applet 根据执行过程中发生的事件来定义其生命周期。对于每个事件将自动调用一种方法。方法如下:init() : 初始化时调用start() :调用init方法之后自动调用这个方法 stop() : 退出网页时停止执行Applet程序destroy() : 离线时释放本对象及其相关的资源44Applet 的生命周期 2-2调用repaint重新绘制Appletstop( )启动状态
31、start( )paint( )Applet 正在工作生成的 AppletApplet 已显示空闲状态Applet 已破坏初始状态如果再次调用 start( )destroy( )破坏 Appletinit( )45向Applet传递参数可以通过 HTML 文件中的 标记将参数传递给 Applet。参数值使用返回字符串的 getParameter( ) 方法在 Applet 中检索。46向Applet传递参数示例import java.awt.*;import java.applet.*;public class FontPassDemo extends Applet String quote
32、; Font f;public void init() quote= Happiness is an attitude.; String fontname=getParameter(font); int fontsize=Integer.parseInt(getParameter(size); f=new Font(fontname,Font.ITALIC,fontsize); public void paint(Graphics g) g.setFont(f); g.drawString(quote,20,100); 更改参数值将改变字符串显示字体 47在Applet中插入多媒体为了在 Ap
33、plet 中显示图像,必须执行下列步骤: 1. 获得要显示的图像的 URL。 2. 决定图像将要显示的位置(坐标)。 3. 用适当的方法提供所有这些参数。可以操纵 Applet 的 paint( ) 方法来显示图像。48URL 与获得多媒体文件一个URL 只是对 Internet 上一项资源的描述。例如, 。要检索 Applet 中的图像,必须使用重载的 getImage() 方法之一。例如: Image img = getImage ();49使用 Applet 显示图像要显示图像,需要使用 Image 类和 Graphics类getCodeBase() 获得基本的 URLgetImage(
34、) 方法返回可以在屏幕上绘制的 Image 对象drawImage() 具有四个参数 : Image 对象、按 x 和 y 坐标表示的位置以及类型为 ImageObserver 的对象50使用 Applet 显示图像示例import java.awt.*;import java.applet.*;public class ImageDemo extends Applet Image i; public void init() i = getImage(getCodeBase(), tu.jpg); public void paint(Graphics g) g.drawImage(i,20,20,this); 51绘制图形 2-1除了文本,还可以绘制图像、矩形、线条、多边形以及其他各种图形。方法用途abstract void drawLine(int x1, int y1, int x2, int y2) 在图形环境坐标系中,从 x1、y1 指定的起始点绘制一条直线到终止点 x2、y2void drawRect( int topx, int topy, int width, int height) 绘制一个左上角坐标、宽度和高度已给定的长方形abstract void fillRect (int topx, int topy, int width, int height) 绘制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院采购科合同
- 化妆品包销协议书
- 哥俩赡养老人协议书(2篇)
- 二零二四年新能源项目投资合作协议
- 二零二四年度教育培训与人才引进合作协议
- 二零二四年度品牌合作与发展框架协议3篇
- 独家供货商协议
- 销售总代理合同协议
- 供应链物流平台服务合同
- 花岗岩供应商购销合同
- 《花卉栽培技术》课程思政教学案例
- 福乐伟离心机说明书
- 小学科学教育科学五年级上册光《光是怎样传播的》教学设计
- 英国的宗教改革课件
- 二年级数学上册第五单元《观察物体(一)》单元备课(集体备课)
- 二年级上册美术课件-13《回家的路》 人教版(共12张PPT)
- 投标保证金交付证明
- 质量问题投诉登记、处理台账
- 小班健康活动认识五官课件
- 施工单位履约考评检查表
- 中国脓毒症及脓毒性休克急诊治疗指南
评论
0/150
提交评论