Java第十二章 Java小应用程序(基础篇).ppt_第1页
Java第十二章 Java小应用程序(基础篇).ppt_第2页
Java第十二章 Java小应用程序(基础篇).ppt_第3页
Java第十二章 Java小应用程序(基础篇).ppt_第4页
Java第十二章 Java小应用程序(基础篇).ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、第十二章 Java小应用程序,12.1 小应用程序简介 12.2 小应用程序的执行过程 12.3小应用程序中的组件和图形绘制 12.4 多媒体支持,12.1 小应用程序简介,小应用程序就是使用Java语言编写的一段代码,它可以在浏览器环境中运行。它与Application的区别主要在于其执行方式的不同。 Java小应用程序的创建 java.applet.Applet import java.applet.*; public class HelloWorld extends Applet java.swing.JApplet import javax.swing.*; public class

2、HelloWorld extends JApplet,12.1 小应用程序简介,import java.applet.Applet; import java.awt.Graphics; public class WelcomeApplet extends Applet public void paint( Graphics g ) g.drawString( Welcome to Java Programming!, 25, 25 ); ,12.1 小应用程序简介,/ WelcomeApplet.java import javax.swing.JApplet; import java.awt.

3、Graphics; public class WelcomeApplet extends JApplet public void paint( Graphics g ) g.drawString( Welcome to Java Programming!, 25, 25 ); ,12.1 小应用程序简介, ,12.1 小应用程序简介-类的继承关系,java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Panel java.awt.Frame java.applet.Applet java.

4、swing.JFrame java.swing.JApplet,12.2 小应用程序的执行过程,浏览器载入要访问的HTML文件的URL地址。 浏览器装入HTML文件 浏览器载入小应用程序的类字节代码 启动Java虚拟机执行Applet。,12.2 小应用程序的执行过程-生命周期,图标化或浏览器装入另一页 第一次装入 运行 运行stop() 运行init() start() 从图标恢复或重新装入 此页时运行start() 运 浏 行 览 destroy() 器 关 闭,初始态(瞬态),运行态,停止态,消亡态,12.2 小应用程序的执行过程-主要方法,import java.awt.Graphic

5、s; import java.applet.Applet; public class Simple extends Applet public void init() public void start() public void stop() public void destroy() public void paint(Graphics g) ,12.2 小应用程序的执行过程-主要方法,paint()虽不在生命周期内,但它的作用相当于applet的灵魂,Java.applet.Applet,public void init(),public void destroy(),public vo

6、id start(),public void stop(),public void paint(Graphics g),/ WelcomeApplet2.java import javax.swing.JApplet; import java.awt.Graphics; public class WelcomeApplet2 extends JApplet public void paint( Graphics g ) g.drawString( Welcome to, 25, 25 ); g.drawString( Java Programming!, 25, 40 ); ,12.2 小应用

7、程序的执行过程,12.3 小应用程序中的组件和图形绘制,小应用程序中的组件 Applet中的AWT组件 Applet类也是一种面板容器,缺省的布局管理器是FlowLayout。因此,可以直接对Applet加入组件或用setLayout()方法改变布局管理器。 JApplet中的Swing组件 与Applet不同,不能直接对JApplet加入组件或用setLayout()方法改变布局管理器,必须先取得一个内容面板(ContentPane),再对内容面板加入组件或改变布局。 去除组件、设置布局管理器等操作都是针对内容面板而不是直接针对JApplet,内容面板缺省的布局管理器为BorderLayou

8、t。,12.3 小应用程序中的组件和图形绘制,小应用程序中的图形绘制 Applet的AWT图形绘制 JApplet中的图形绘制,12.3小应用程序中的组件和图形绘制,Applet的AWT图形绘制 Applet中有几个与显示相关的方法,这些方法是由Component类提供的,且处理AWT绘图时作用各不相同。它们分别是paint()方法、update()方法和repaint()方法。 显示和刷新是由一个AWT线程来控制完成的。该线程主要负责两种与显示更新相关的情况 当一个组件首次显示在屏幕上时,或组件被其它的窗口覆盖的部分又显示出来时, AWT线程自动调用paint()方法; 程序决定重画显示区域

9、,需要程序调用repaint()方法。当一个组件的repaint()方法被调用时,AWT线程会自动调用组件的update()方法,update()方法再调用组件的paint()方法执行成员重画自己的请求。,12.3 小应用程序中的组件和图形绘制,Applet的AWT图形绘制 paint()方法、update()方法和repaint()方法之间的关系 paint(Graphics) 用来完成图形化组件的显示,当组件的显示区域发生改变时,会自动调用该方法完成图形的更新,它只修改图形的被改变区域。 repaint()方法 在程序中调用该方法通知系统要更新显示,实际上将触发对update()方法的调用

10、。 update(Graphics)方法 缺省情况下,该方法先要对整个显示区域的背景进行刷新,然后再调用paint()方法。,12.3 小应用程序中的组件和图形绘制,Applet的AWT图形绘制,paint(),AWT thread(waiting),update() clear area call paint(),repaint(),Exposure,12.3 小应用程序中的组件和图形绘制,java.awt.Graphics类 drawString() drawLine() drawPolygon() drawRect() drawRoundRect() drawOval() drawArc

11、() drawImage() 另外还有相应的填充(fill)方法。,12.3 小应用程序中的组件和图形绘制,java.awt.Graphics类 图形坐标系统 任何与绘图有关的操作 第一个要用的是 java.awt.Graphics类 Graphics类的对象不是 由new产生的,而是由系 统或其他方式直接将生好的Graphics对象当作方法的参数,再交给程序设计者去处理.例如: paint(Graphics g),12.3 小应用程序中的组件和图形绘制,import java.awt.Graphics; import java.awt.Color; public class DrawCirc

12、les extends java.applet.Applet public void paint(Graphics g) int red,green,blue,x; for(x=0;x370;x+=30) red=(int)(Math.random()*256); green=(int)(Math.random()*256); blue=(int)(Math.random()*256); g.setColor(new Color(red,green,blue); g.fillOval(x,0,30,30); ,例:随机产生颜色,并画圆,12.3 小应用程序中的组件和图形绘制,import ja

13、va.awt.*; import java.awt.event.*; import java.applet.*; class ArcCanvas extends Canvas int startAngle = 0; int valueOfAngle = 45; boolean filled = false; public void paint(Graphics g) Rectangle r = getBounds(); int hlines = r.height/10; int vlines = r.width/10;,Applet的AWT图形绘制(例:画弧),12.3 小应用程序中的组件和图

14、形绘制,g.setColor(Color.pink); for(int i=1;i=hlines;i+) g.drawLine(0,i*10,r.width,i*10); for(int i=1;i=vlines;i+) g.drawLine(i*10,0, i*10, r.height); g.setColor(Color.red); if(filled) g.fillArc(0,0,r.width-1,r.height-1,startAngle,valueOfAngle); else g.drawArc(0,0,r.width-1,r.height-1,startAngle,valueOf

15、Angle);,12.3 小应用程序中的组件和图形绘制,g.setColor(Color.black); g.drawLine(0,r.height/2,r.width,r.height/2); g.drawLine(r.width/2, 0,r.width/2,r.height); g.drawLine(0,0,r.width,r.height); g.drawLine(r.width, 0,0,r.height); int sx = 10; int sy = r.height-28; g.drawString(“S=“+startAngle,sx,sy); g.drawString(“E=

16、“+valueOfAngle,sx,sy+14); ,12.3 小应用程序中的组件和图形绘制,public void redraw(boolean filled,int start,int end) this.filled = filled; this.startAngle = start; this.valueOfAngle = end; repaint(); class ArcControls extends Panel implements ActionListener TextField s; TextField e; ArcCanvas canvas;,12.3 小应用程序中的组件和

17、图形绘制,public ArcControls(ArcCanvas canvas) Button b = null; this.canvas = canvas; add(s = new TextField(“0”,4); add(e = new TextField(“45”,4); b = new Button(“Fill”); b.addActionListener(this); add(b); b = new Button(“Draw”); b.addActionListener(this); add(b); ,12.3 小应用程序中的组件和图形绘制,public void actionP

18、erformed(ActionEvent ev) String label = ev.getActionCommand(); canvas.redraw(label.equals(“Fill”), Integer.parseInt(s.getText().trim(), Integer.parseInt(e.getText().trim(); public class ArcApplet extends Applet public void init() setLayout(new BorderLayout(); ArcCanvas p = new ArcCanvas(); add(“Cent

19、er”,p); add(“South”,new ArcControls(p); ,12.3 小应用程序中的组件和图形绘制,Applet的AWT图形绘制 Java 2D图形类,在Java.awt.geom包中,都实现了Shape接口: Point2D,Line2D,Rectangle2D,RoundRectangle2D,Ellipse2D,Arc2D,QuadCurve2D,CubicCurve2D,GeneralPath类 等。 Graphics2D类,java.lang.Object - java.awt.Graphics- java.awt.Graphics2D :draw(Shape)

20、,fill(Shape),12.3 小应用程序中的组件和图形绘制,JApplet中的图形绘制 在Swing的JApplet中,如果需要绘制图形、图像或文本,同样要先将图形、图像或文本绘制在画板上,然后再将画板添加到内容面板或直接把画板置为JApplet的内容面板。 在画板上绘制文本或图形、图像时,需要做如下定义: class MyPanel extends JPanel public void paintComponent(Graphics g) super.paintComponent(); /绘制代码 paintComponent是JComponent类提供的方法,其功能与paint方法类

21、似。,12.3 小应用程序中的组件和图形绘制,JApplet中的图形绘制 在Swing中应该使用paintComponent方法而不是paint方法绘图。 JPanel子类的paintComponent方法中调用了超类JComponent的paintComponent。子类重写的paintComponent方法需要首先用背景色来填充画板,而超类本身知道如何做。 如程序中需要重新绘制,就调用repaint方法,repaint方法将引起系统调用所有组件的paintComponent方法。,12.3 小应用程序中的组件和图形绘制,import java.awt.*; import java.awt.

22、event.*; import javax.swing.*; class ArcPanel extends JPanel int startAngle = 0; int valueOfAngle = 45; boolean filled = false; public void paintComponent(Graphics g) super.paintComponent(g); Rectangle r = getBounds(); int hlines = r.height/10; int vlines = r.width/10;,JApplet的Swing图形绘制(例:画弧),12.3 小

23、应用程序中的组件和图形绘制,g.setColor(Color.pink); for(int i=1;i=hlines;i+) g.drawLine(0,i*10,r.width,i*10); for(int i=1;i=vlines;i+) g.drawLine(i*10,0, i*10, r.height); g.setColor(Color.red); if(filled) g.fillArc(0,0,r.width-1,r.height-1,startAngle,valueOfAngle); else g.drawArc(0,0,r.width-1,r.height-1,startAng

24、le,valueOfAngle);,12.3 小应用程序中的组件和图形绘制,g.setColor(Color.black); g.drawLine(0,r.height/2,r.width,r.height/2); g.drawLine(r.width/2, 0,r.width/2,r.height); g.drawLine(0,0,r.width,r.height); g.drawLine(r.width, 0,0,r.height); int sx = 10; int sy = r.height-28; g.drawString(“S=“+startAngle,sx,sy); g.draw

25、String(“E=“+valueOfAngle,sx,sy+14); ,12.3 小应用程序中的组件和图形绘制,public void redraw(boolean filled,int start,int end) this.filled = filled; this.startAngle = start; this.valueOfAngle = end; repaint(); class ArcControls extends JPanel implements ActionListener TextField s; TextField e; ArcPanel Panel;,12.3 小

26、应用程序中的组件和图形绘制,public ArcControls(ArcPanel panel) Button b = null; this. panel = panel; add(s = new TextField(“0”,4); add(e = new TextField(“45”,4); b = new Button(“Fill”); b.addActionListener(this); add(b); b = new Button(“Draw”); b.addActionListener(this); add(b); ,12.3 小应用程序中的组件和图形绘制,public void a

27、ctionPerformed(ActionEvent ev) String label = ev.getActionCommand(); panel.redraw(label.equals(“Fill”), Integer.parseInt(s.getText().trim(), Integer.parseInt(e.getText().trim(); public class ArcApplet extends JApplet public void init() Container contentPane = getContentPanel(); setLayout(new BorderL

28、ayout(); ArcPanel p = new ArcPanel (); contentPane .add(“Center”,p); contentPane .add(“South”,new ArcControls(p); ,12.4 多媒体支持-图象的加载和显示,在包java.awt、java.awt.image以及java.applet中都有对图像的支持。图像信息是封装在类Image中的,目前Java所能处理的图像格式包括GIF、JPEG和PNG。 加载图像 类Applet中提供了方法getImage(),可以直接加载指定的图像。 加载图像时,方法getImage()立即返回,由Jav

29、a新生成一个线程在后台异步地完成加载图像的任务,使得程序可以执行其它操作。,12.4 多媒体支持-图象的加载和显示,显示图像 通过类Graphics的方法drawImage() 来实现。,12.4 多媒体支持-使用线程控制动画,动画技术的原理是多幅图像每隔一定时间进行循环显示。动画序列中的每一幅图像称为一帧(frame),可以一个文件存一个帧,也可以一个文件存所有帧。 小应用程序中应有一个单线程,这个单线程的run()方法中循环地执行下述三个动作:在屏幕上画一帧;增加帧计数器的值;睡眠一个时间间隔(例如200毫秒)。,12.4 多媒体支持-使用线程控制动画(例),import java.awt

30、.*; import java.applet.Applet public class Nina extends Applet implements Runnable Image frame; Thread threadNina; int frame_i; int delay_time; public void init() int i; int fps = 12; frame =new Image5; threadNina =null; frame_i = 0;,12.4 多媒体支持-使用线程控制动画(例),for(i=0;iframe.length;i+) framei = getImage(getCodeBase(),”images/anim”+i+”.gif”); delay_time = 1000/fps; public void start() if (threadNina =null) threadNina = new Thread(this); threadNina.start(); pu

温馨提示

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

评论

0/150

提交评论