第4图形界面.ppt
《第4图形界面.ppt》由会员分享,可在线阅读,更多相关《第4图形界面.ppt(315页珍藏版)》请在三一文库上搜索。
1、第4章 图形界面,4.1 图形界面的输出 4.2 事件的处理 4.3 图形用户界面设计 4.4 编程实例 实训四 图形用户界面的实现 习题四,4.1 图形界面的输出,4.1.1 案例 前面各章给出的大部分例子都是Java应用程序,通过System.out向标准输出设备输出文本,而Java小程序不能通过此种方法输出信息。Java小程序在浏览器中运行,占据一块矩形的区域,信息的输出必须通过Java语言提供的图形功能画在此矩形区域内。,下面首先给出一个Applet程序,该程序轮流显示三幅广告图片,当用户用鼠标单击该Applet时,浏览器打开当前正在显示的广告对应的网站。图4.1为该程序的运行画面。,
2、图4.1 广告图片显示程序运行画面,【程序4.1】 广告图片显示。 import java.awt.*; import java.awt.event.*; import java.applet.*; import .*; public class Ad extends Applet implements Runnable, MouseListener ,String ImageFile=“sina.gif“,“yahoo.gif“,“163.gif“; String AdUrl=“http:/“,“http:/“, “http:/“; Image AdImage=new Image3; int
3、 CurAd=0; boolean con=true; public void init() URL codeBase = getCodeBase(); for(int i=0;i3;i+),AdImagei=getImage(codeBase,ImageFilei); /从网站装载图像文件 public void start() Thread t=new Thread(this); addMouseListener(this); t.start(); /启动广告刷新线程 public void paint(Graphics g) ,g.drawImage(AdImageCurAd,0,0,t
4、his); public void run() /每隔两秒钟刷新广告显示 while(con) try Thread.sleep(2000); catch(Exception e) CurAd+; CurAd=CurAd%3; repaint(); , public void stop() con=false; / 终止广告刷新线程 removeMouseListener(this); public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(M
5、ouseEvent e) public void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e), /鼠标单击事件响应程序 try URL theURL=new URL(AdUrlCurAd); getAppletContext().showDocument(theURL,“newwin“); catch(Exception e1) ,程序4.1使用了一个独立的线程用于刷新广告图片的显示,如图4.1所示。有关线程的内容将在第5章介绍,本章主要介绍有关图形界面的内容。,4.1.2 Applet基础 Applet程序
6、在支持Java的Web浏览器中执行,它的结构不同于Java应用程序。每一个Applet都有一个主类,派生于java.applet.Applet。在Applet类中定义了几个重要的方法,在编写Applet时应根据需要覆盖超类中对应的方法。 1Applet的生命周期 与Applet程序生命周期相关的几个重要的方法为初始化init()、开始执行start()、停止执行stop()、退出destroy()、绘画paint(),分别在Applet程序从装入到结束运行整个生命周期中不同的阶段调用。,1) public void init() init方法的作用是初始化Applet。在整个Applet生命周
7、期中,初始化只进行一次。当Web浏览器第一次浏览含有Applet的网页时,浏览器首先下载该Applet字节码文件,然后创建一个该Applet主类的对象,再调用init方法对Applet自身进行初始化。 在init()方法中可设置程序初始状态,载入图形或字体,获取 HTML中 设定的参数等。例如,程序4.1中类Ad的init方法用于从网站下载广告图片。,2) public void start() start方法在Applet启动时被调用。在整个Applet生命周期中,启动可发生多次。当Applet第一次装入并初始化后,或者离开该页面后再次进入时,浏览器都会调用start方法。可以在start方
8、法中通知Applet开始运行,程序4.1在start方法中启动更换广告图片的线程,当离开该页面时,该线程终止运行,再次进入时又启动更换广告图片的线程。,3) public void stop() stop方法用于停止执行Applet。在整个Applet生命周期中,停止执行可发生多次。当浏览器离开Applet所在 Web页或关闭时,浏览器调用stop方法。 stop方法挂起小程序,可在stop方法中释放系统资源,否则当浏览者离开一个页面时,小程序还将继续运行。程序4.1在stop方法中终止更换广告的线程,即当离开该页面时该Applet程序停止工作。,4) public void destroy(
9、) destroy方法在Applet退出时被调用。在整个Applet生命周期中,退出只发生一次,即结束对该Web页的访问,关闭Web浏览器时调用一次。 可在destroy方法中编写释放系统资源的代码,但除非用了特殊的资源(如创建的线程),否则一般不需重写destroy()方法,因为Java运行系统本身会自动进行“垃圾”处理和内存管理。,5) public void paint(Graphics g) paint方法负责绘制Applet的显示区域,可多次发生。当需要刷新Applet显示时,自动调用该方法。如果程序中修改了数据,需要刷新显示,可用repaint()方法强制系统调用paint方法重新
10、绘制显示区域。 与前几个方法不同的是,paint中带有一个参数Graphics g,它表明paint方法需要引用一个Graphics类的对象。在Applet中不用编程者操心,浏览器会自动创建Graphics对象并将其传送给paint方法,但应在Applet程序中引入Graphics类: import java.awt.Graphics;,程序4.2演示了Applet的几个重要方法,该程序使用System.out输出部分信息,这部分信息在Applet中无法看到。使用appletviewer调试Applet时,可以通过程序菜单打开Java显示控制台观察到这部分信息。如果使用Visual J+,则可
11、以在output窗口中看到输出结果。下面是某次运行时的输出结果,读者可从中看出上面几个重要方法被调用的顺序。,Now init Now start Now paint Now paint Now stop Now destroy,【程序4.2】 Applet几个重要方法的调用顺序。 /AppletLife.java: import java.awt.*; import java.applet.Applet; public class AppletLife extends Applet public void init() System.out.println(“Now init“); ,pub
12、lic void start() System.out.println(“Now start“); public void stop() System.out.println(“Now stop“); public void paint(Graphics g) ,System.out.println(“Now paint“); g.drawString(“hello“,30,30); public void destroy() System.out.println(“Now destroy“); ,2在HTML中使用Applet Applet使用appletviewer或Web浏览器加载运行,
13、是通过HTML中定义的标记来实现的。第1章程序1.2中的HTML文件使用的是APPLET标记最简单的一种形式,APPLET标记更一般的形式如下:,APPLET标记本身不区分大小写,上面黑体字部分为APPLET标记必须的部分。下面介绍APPLET标记中属性的含义: codebase属性:用于定义Java Applet 字节码文件的路径或地址(URL)。当Applet与HTML文档不在同一目录时用它来定位字节码文件,如果没有该属性,则表示Applet程序的字节码文件和HTML文档放在同一目录。 code属性:用于指定调用的Java Applet 程序字节码文件名,要注意全名和大小写。, archi
14、ve属性:用逗号分隔的JAR文件列表。若Applet程序由多个类构成,可以将多个class文件打包生成JAR文件,以方便程序的发布。而且JAR文件采用zip压缩算法,可以减少class文件在网络上传输的数据量,加快下载速度。 width和height属性:用于指定Applet程序在Web浏览器中显示区域的宽度和高度,以像素为度量单位。 vspace和hspace属性:用来设置以像素为单位的竖直和水平边距。, align属性:用于控制Applet的对齐方式,取值为left、right、top、texttop、middle、absmiddle、baseline、bottom、absbottom。
15、name属性:用于为Applet指定一个具体的名字,该名字在与同一页面的不同Applet通信时使用。 alt属性:为不支持Java Applet程序的Web浏览器显示替代的文字,如果支持,则该属性被忽略。,APPLET标记可以在之间使用标记传递参数给applet。例如: ,该APPLET标记定义了两个参数,参数名分别为size与font,两个参数的值分别为5和bold。Applet类提供了方法getParameter,用来获取参数的值。getParameter方法的形式为 public String getParameter(String name) 形式参数name用于指定传递给Applet
16、的参数名。,下面是Visual J+ 6.0生成的Applet程序框架中获取参数的程序片段,请读者注意其中的黑体字部分: private final String labelParam = “label“; private final String backgroundParam = “background“; private final String foregroundParam = “foreground“; /此处省略多行,String labelValue; String backgroundValue; String foregroundValue; labelValue = ge
17、tParameter(labelParam); backgroundValue = getParameter(backgroundParam); foregroundValue = getParameter(foregroundParam);,对应的HTML文件中APPLET标记如下: ,4.1.3 Java的图形坐标系统 为了将某一图形在屏幕上绘制出来,首先要确定图形的位置,为了解决这个问题就必须有一个精确的图形坐标系统来定位图形。 与大多数其他计算机图形系统所采用的二维坐标系统一样,Java语言的图形系统的坐标原点(0,0)在屏幕的左上角,水平向右为X轴的正方向,竖直向下为Y轴的正方向。每
18、个坐标点的值表示屏幕上的一个像素点的位置,因此,所有坐标点的值都取整数。图4.2表示用此图形坐标系统在屏幕上绘制一个矩形。,图4.2 Java的图形坐标系统,4.1.4 字形和颜色的设置 程序4.2调用Graphics类的drawString方法在屏幕上显示字符串“Hello”,没有指定字体和颜色,drawString使用缺省的字体和颜色输出,输出结果显得很一般。如果希望输出的文本显示更具特色,可以指定某种字体、某种风格、尺寸大小和色彩。,1字体的设置 如果程序需要在屏幕上输出文本信息,首先要确定采用何种字体,例如中文的“宋体”、“楷体”,或是英文的“TimesRoman”、“Courier”
19、等等;接着再决定该字体输出时采用哪种风格,是斜体还是粗体等等;最后还要确定该字体的大小尺寸。所有这些都由Font类来定义,其构造方法的形式为 public Font(String name, int style, int size) 它的三个参数分别代表字体名、字体风格和尺寸大小。,name用于指定文本输出的字体,如果运行该applet的客户端系统未安装该字体,Java会以缺省字体来替代它。客户端系统支持的字体可以用java.awt.Toolkit类中的getFontList()方法来获得,它返回系统目前可用的字体列表,然后就可决定到底选用哪种字体。例如: Toolkit systk = To
20、olkit.getDefaultToolkit(); String fonts = systk.getFontList();,Font类中已定义了静态常量来表示字体的style值,如Font.BOLD(粗体) 、Font.ITALIC(斜体) 、Font.PLAIN(普通体) ,可以进行相加运算来生成复合style。例如,想让style既是粗体又是斜体,可以这样写: Font fn = new Font(“TimesRoman“, Font.BOLD+Font.ITALIC, 28); 创建了Font对象以后,用Graphics类的setFont()方法即可将所创建的Font对象设为当前所用的
21、字体,setFont的形式为 public void setFont(Font font),设置字体后可以利用Graphics类中提供的drawString()、drawChars()等方法来输出字符串与字符,形式如下: public void drawString(String str, int x, int y) public void drawChars(char data, int offset,int length, int x, int y) drawString方法中的参数str为要显示的字符串,x,y用于指明字符串显示的起始位置坐标,其中x表示第一个字符的左边界,y表示整个字符
22、串的基线(baseline,见图4.3) 位置。,图4.3 字符串输出的坐标示意图,drawChars方法则用来显示多个字符,从给定的字符数组中抽取连续的一部分显示在屏幕上。其中data参数就是给定的字符数组,offset表示从第几个字符位置开始,length表示共显示几个字符,x与y参数的含义与drawString方法一样。 程序4.3显示了一些不同的文本字体,其显示结果如图4.4所示。,图4.4 程序4.3的输出结果,【程序4.3】 用指定的字体输出文本。 import java.awt.Graphics; import java.awt.Font; public class FontDe
23、mo extends java.applet.Applet public void paint(Graphics g) Font ftp20 = new Font(“TimesRoman“,Font.PLAIN,20); Font fai15 = new Font(“Arial“,Font.ITALIC,15); Font fcb24 = new Font(“Courier“,Font.BOLD,24); Font fsib30 = new Font(“宋体“,Font.ITALIC+Font.BOLD,30);,g.setFont(ftp20); g.drawString(“Font nam
24、e TimesRoman , style plain , size 20“,10,20); g.setFont(fai15); g.drawString(“Font name Arial , style italic , size 15“,10,50); g.setFont(fcb24); g.drawString(“Font name Courier , style bold , size 24“,10,80); g.setFont(fsib30); g.drawString(“字体名 宋体,风格 斜体+粗体,尺寸 30“,10,120); ,系统当前所用的字体信息可以用Graphics类中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形界面
链接地址:https://www.31doc.com/p-2604579.html