已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录一 引言1二 JAVA简介1(二) JAVA概述1(二) JAVA与GUI2三 图形用户界面3(一)AWT3(二)Swing4(三)布局管理器5(四)事件处理7四 一个基于JAVA的图形用户界面实例的设计与实现7(一)运行环境配置7(二)程序设计8五 结束语12致谢12参考文献13附录1423基于JAVA的图形用户界面及其应用摘 要 本文介绍了JAVA图形界面技术,通过对AWT,Swing的介绍,深入分析了基于JAVA的图形界面的应用过程,并给出了一个基于JAVA的图形用户界面的实例来说明。如组件的布局与布局管理器,事件处理等技术。不仅给出JAVA的系统配置方法和具体实现过程,还对JAVA的高级特性,如多线程处理,异常处理机制有所说明.另外,本文还提供了一些动画的处理方法. 关键词 JAVA语言 GUI AWT Swing J组件 一 引言90年代初期,互联网还没普及之时,JAVA主要是应用于家用电器编程,而随着互联网的越来越大众化,JAVA也因为其结构新颖,实时操作,可靠安全成为目前INTERNET网上最流行的语言。它不仅具有“一次编程,到处运行” 和简单易用、完全面向对象、具有平台无关性的特点,还通过封装各种组件(抽象窗口工具包AWT,Swing组件)及结合各种JAVA标准接口实现对图形用户界面的良好支持.在JAVA早期,只包括一个基于GUI(Graphical User Interface图形用户界面)的类库AWT(Abstract Windows Toolkit抽象窗口工具箱).基本AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台(Windows,Solaris,Macintosh等)上的本地GUI工具进行处理.这种基于对等体的方法在编写简单程序效果很好,但在要编写依靠本地用户界面元素的高质量可移植图形库时,由于各种目标平台对用户界面元素,如菜单,滚动条,文本域等的实现有着微妙的差别,且不同平台的AWT用户界面库存在着不同的Bug,这就很难真正的实现JAVA的一次编写,到处运行的承诺。所以,在1996年,JAVA开发公司创建了一个新的用户界面库Swing,从此, JAVA对图形界面的支持才趋于完善。二 JAVA简介(二) JAVA概述JAVA是目前公认的INTERNET网上的世界语,是面向网络的一种类似于C/C+的高级语言。它由C+发展而来,保留了C+的大部分的内容和特性,并整合成完全面向对象,面向计算机网络的编程语言,更重要的是JAVA的平台无关性,“WriteOnce,RunAnywhere”一次编写,到处运行。JAVA通过JVM(Java Virtual Machine,JAVA虚拟机)来实现以上机制。以“.java”作为扩展名的Java原程序经编译后自动生成以“.class”为扩展名的文件(类文件),其内存放的不是机器码,而是一个与机器硬件平台和操作系统无关的中间代码文件,称为Java字节码(中间代码)文件。这种类文件在机器上不能直接运行,还必须由机器内各自所带的JAVA虚拟机把中间代码解释成为机器码指令后才能在本机的硬件和操作系统上执行。如图2-1所示JVM虚拟机机器码指令服务平台 源程序文件“文件名.java”编译Jav字节码类文件“文件名.class“ 图2-1 JAVA程序的运行过程Java是面向对象程序设计(OOP),支持对象,类和继承等概念。Java通过对象来实现各种数据结构,而对象之间的通信是通过消息传递机制,这也是对象之间的唯一通信机制。在这种机制下,数据并不象在结构化程序中被动的等待对它执行某种操作,而是操作处理的主体。如程序需要某对象完成一项任务,必须发送消息请求对象执行相应操作。JAVA和C+都是通过调用成员函数(JAVA中的函数都隶属相应的类,而不象C+有全局函数和成员函数之分)来实现对某对象发送消息的在Java中,类是某对象抽象类型ADT的实现,类之间常有3中关系(1)包含关系,如内部类(2)使用关系,通常是对另外一个类的成员函数的调用(3)继承关系,即一个类对另一个类的扩充。在JAVA中,只支持单继承(二) JAVA与GUI随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。现在的应用软件越来越要求界面友好、功能强大而又使用简单。而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。这也是很多Java程序员抱怨的事情。但GUI已经成为程序发展的方向,所以我们也必须了解Java的GUI设计方法和特点。早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(Command-Line Interface)”,就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI)在此之后,著名的Microsoft公司推出了风靡全球的Windows操作系统,它凭借着优秀的图形化用户界面,一举奠定了操作系统标准的地位。在这图形用户界面风行于世的今天,一个应用软件没有良好的GUI是无法让用户接受的。而Java语言也深知这一点的重要性,它提供了一套可以轻松构建GUI的工具。在Java语言提供的GUI构建工具中,可以分为“组件”(component)和“容器”(container)两种。在Java语言中,提供了以下部件:(1)标签(2)复选框(3)单选按钮(4)选择框(5)列表框(6)文本框(7)滚动条(8)画布(9)菜单但光有“部件”就组不成程序,我们必须使用“容器”将这些“部件”装配起来,使其成为一个整体。Java语言还提供了以下“容器”:(1)程序的启动封面(2)框架(Frame)(3)对话框(Dialog)Java语言是通过AWT(抽象窗口化工具包)和Java基础类(JFC或更常用的Swing)来提供这些GUI部件的。其中Java.awt是最原始的GUI工具包,存放在java.awt包中。现在有许多功能被已被Swing取代并得到了很大的增加与提高,因此一般我们很少再使用Java.awt,但是AWT中还是包含了最核心的功能,通常,一个Java的GUI程序至少还要使用下面几个类:(1)java.awt.Color:基本颜色定义(2)java.awt.Font:基本字体定义(3)java.awt.Cursor:光标操作定义众所周知,向用户提供一个与平台无关的开发环境是JAVA的主要目标之一,为保持在不同平台上组件的“外观和感觉”是一样的,JAVA在AWT中对每个组件都引入了一个对等体(peer)。如2-2图所示JAV程序访问组件的语句本地窗口系统的对等体(peer)JAVA AWT抽象组件本地主机显示 图2-2 JAVA组件在本地系统的实现过程对等体实际上是一种具有本地外观和感觉的图形用户接口的组件。而JAVA程序所访问的是JAVA AWT中的一个抽象组件而不是实际在屏幕上看见的组件,当程序运行时系统将自动创建一个该组件的对等体,由它来负责执行该组件在本地计算机的显示和管理工作,而它听命于抽象组件的指挥。这种拥有本地机器对等体的组件称为“重量组件”。它的另一个特点是不透明。1997年SUN和NETSCAPE两家公司开发的JFC(Java Foundation Classes,JAVA基础类库),其核心部分是Swing用户界面组件,它使用大量轻量组件来代替AWT中的重量组件。所谓的轻量组件是不拥有本地机器对等体的组件,且是完全透明的 。与重量组件相比, 轻量组件没有本地代码,不依赖操作系统的支持,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制三 图形用户界面(一)AWT抽象窗口工具包AWT是JAVA可视化编程的基础,任何具有绘制图形的应用程序,至少有一个顶级窗口,其内不再包含其他的窗口(通常称为帧)。在JAVA中用FRAME类来描述它。应用程序的主窗口是其类的一个对象,该对象是一个容器,其内可以包容其他用户界面组件如JAVA中的Button类,Label类,TextField类。其在JAVA中的继承关系如图3-1: Java.lang.Object -java.awt.Component -java.awt.Container -java.awt.Panel -java.applet.Applet -java.awt.Window -java.awt.Frame -java.awt.Dialog -java.awt.FileDialog-java.awt.Canvas -java.awt.Button -java.awt.Checkbox -java.awt.Choice -java.awt.Label -java.awt.List -java.awt.Scrollbar-java.awt.TextComponent -java.awt.TextArea -java.awt.TextField 图3-1 AWT的层次关系 AWT内主要包含的各种组件类,多数由Component(组件)类扩展而来。除了象按钮(Button)类,标签(Label)类,文本域(TextField)类等底层组件外,还包含能安放并且管理他们的容器组件。如窗口(Windows),框架(Frame),面板(Panel),画布(Canvas),对话框(dialog)的容器类 .它们的一个具体实例就是一个可以安放各种组件的容器。AWT先从Component(组件)抽象类扩展出一个Container(容器)类,各种容器组件既是从它继承而来(二)Swing 在JAVA 早期,几乎都是采用AWT工具包中的组件来构建用户界面,但后来为了图象用户界面GUI的方便移植,实现其“一次编程,到处运行”的承诺,SUN公司开发出JFC系统,其核心部分是SWING GUI工具包,它以AWT工具包作为基础加以扩展,添加了新的组件集合和支持类的集合,特别采用了先进的“模型,视图,控制器设计范式”(MVC: Model-View-Controller)。模型:负责获取和管理组件状态。视图:专门负责组件的绘制工作,主要涉及paint()方法。且一个模型可以对应多个视图。 控制器:专门负责管理和处理组件所接受的事件,这些事件可来自用户的操作,如键盘输入,鼠标点击等。也可来自系统,如系统计时器发出的事件。视图和控制器之间的通信是频繁而复杂的,所以JFC系统把二者封装成一个整体。其相互关系如图3-2:但内容改变是通报 VIEW视图MODEL模型 只对视图进行更新若需内容改变则更新CONTROLLER控制器接受用户或系统发来的事件 图3-2 模型,视图,控制器设计范式在Swing包中包含250多个类,其中一部分是用于用户界面的组件,它们多数封装在javax.Swing程序包中(Swing组件),而另一部分是支持类。Swing组件是建立在AWT基础上的,利用了AWT中包含绘制用户界面所要使用的颜色,字体和布局管理器的标准类,并提供一些轻量组件代替AWT中对应的重量组件。这些Swing轻量组件最大限度的实现了所有平台上的“外观和感觉”都是一样的。它们都是在AWT组件名前面加一个英文字母J(J组件)。其继承关系如图3-3: java.lang.Object -java.awt.Component -java.awt.Container -java.awt.Window -javax.swing.JWindow -java.awt.Frame -javax.swing.JFrame -java.awt.Dialog -javax.swing.JDialog -java.awt.Panal -java.applet.Applet -javax.swing.JApplet -javax.swing.JComponent -javax.swing.JPanel -javax.swing.JLabel -javax.swing.AbstractButton -javax.swing.JButton 图3-3 Swing的层次关系从上可知,JComponent是Java.awt.Container类的直接子类,且是一个抽象类。而java.awt.container有扩展了AWT中的抽象类java.awt.Component,是Component的替代组件类。所以,JComponent类继承了Component和Container两大类的大量功能。这些从JComponent抽象类继承的组件类是一个实例,必须放置在象JFrame,JApplet.JDialog等类的顶级容器中成为它们的子组件,而顶级容器又是父容器。父容器不仅负责自身的绘制,还统一负责对这些子组件的布局和绘制。(三)布局管理器 实际编程中,每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,我们就需要使用布局管理器。比如说,设计一个简单的计算器,或一个文本编辑器等等。这些组件是让JVM自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器(LayoutManager)来管理。那么,在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢?如果写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。即当窗体(或容器)缩放时,组件位置也随之合理调整,这就需要使用布局管理器。 我们都知道,Java的GUI界面定义是由AWT程序包和Swing程序包来完成的。它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。 Java中的容器类(Container),它们只管加入组件(Component),也就是说,它只使用自己的add()方法向自己内部加入组件。同时他记录这些加入其内部的组件的个数,可以通过container.getComponentCount()方法类获得组件的数目,通过container.getComponent(i)来获得相应组件的句柄。然后LayoutManager类就可以通过这些信息来实际布局其中的组件了。 Java已经为我们提供了几个常用的布局管理器类,例如:FlowLayout、BorderLayout、GridLayout、GridBagLayout等。下面说明它们的布局特点: l java.awtCardLayout将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见l java.awtFlowLayout将组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行继续放置l java.awtGridLayout形似一个无框线的表格,每个单元格中放一个组件 java.awtBorderLayout将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件l java.awtGridBagLayout非常灵活,可指定组件放置的具体位置及占用单元格数目l javax.swingBoxLayout就像整齐放置的一行或者一列盒子,每个盒子中一个组件l javax.swingSpringLayout根据一组约束条件放置子组件l javax.swingScrollPaneLayout专用于JScrollPane,含一个Viewport,一个行头、一个列头、两个滚动条和四个角组件l javax.swingOverlayLayout以彼此覆盖的形式叠置组件l javax.swingViewportLayoutJViewport的默认布局管理器对于布局管理器,我们仅以边界布局器BorderLayout为例来说明它的应用。边界布局器让你选择每个组件的摆放位置,你可以选择把组件放在内容窗格的中部,北部,南部,东部或者西部。如图3-4所示: NorthWestCenterEastSouth 图3-4 边界布局例如:class MyPanel extends JpanelsetLayout(new BorderLayout();add(yellowButton,BorderLayout.SOUTH); 先放置边缘组件,然后剩余的可用空间由中间组件来占用。当容器缩放时,边缘组件的厚度不会改变,但是中间组件需要改变自己的大小。可以通过指定BorderLayout类中的CENTER,NORTH,SOUTH,EAST,WEST常量来添加组件。并非需要占用所有的位置,如果不提供任何值,那么系统就默认为CENTER。(四)事件处理从概念上讲,事件是一种在源对象和监听者对象之间,某种状态发生变化的传递机制。事件有许多不同的用途,例如在Windows系统中常要处理的鼠标事件、窗口边界改变事件、键盘事件等。在Java中则是定义了一个普通的、可扩充的事件机制,这种机制能够: (1)对事件类型和传递的模型的定义和扩充提供一个公共框架,并适合于广泛的应用。(2)与Java语言和环境有较高的集成度。(3)事件能被描述环境捕获和触发。(4)能使其它构造工具采取某种技术在设计时直接控制事件,以及事件源和事件监听者之 间的联系。(5)事件机制本身不依赖于复杂的开发工具。 事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。 对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承java.util.EventListener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。 伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。有时,事件监听者不能直接实现事件监听者接口,或者还有其它的额外动作时,就要在一个源与其它一个或多个监听者之间插入一个事件适配器类的实例,来建立它们之间的联系。 在JAVA中,采用的是授权型事件处理机制,它是实现接收,控制和处理由事件源所发出的一种新型机制。要实现这种机制要如下编程:(1)指定一个事件监听器,如框架,面板等组件所属类以及它们的子类,且它们还必须是ActionListener(动作监听器)接口的实现类,(2)调用作为某种事件源,例如“动作(Action)”事件源的组件,像按钮,文本域和组合框的所属类提供的addActionListener()方法,把作为“动作”事件监听器的一个对象添加给该事件源 一个事件源对象可以注册多个事件监听器,因此该事件源对象所引发的事件可将消息发向所有被注册的事件监听器。任何类型的事件都拥有一个对应的监听器(接口)以及其他的实现类,它们对于作为事件源的组件来说是完全独立的。授权型事件模式就是把对所引发事件的处理任务全部授权给这些独立的来进行处理四 一个基于JAVA的图形用户界面实例的设计与实现(一)运行环境配置本程序的运行环境是JDK1.4,安装在d盘,其配置如下:(1)如果你的操作系统是Win 98,可以用记事本直接编辑autoexec.bat,添加下面命令行: PATH=d:j2sdk1.4.2_05binSET JAVA_HOME=d:j2sdk1.4.2_05 SET CLASSPATH=.;d:j2sdk1.4.2_05libtools.jar;d:j2sdk1.4.2_05libdt.jar保存后,重新启动计算机,这样所添加的环境变量才会有效。(2)如果你的操作系统是Win2000,那么按如下方式配置环境变量。右键单击我的电脑,在弹出菜单中选择属性系统特性 高级 环境变量, 弹出环境变量对话框,就可以编辑系统的环境变量了。添加PATH、JAVA_HOME和CLASSPATH三个变量,变量值同上。 (二)程序设计本程序是建立在JAVA图形用户界面上,运用了AWT和Swing中大量的类,包括按钮,文本,菜单等部件类和框架,面板等容器类来说明JAVA中图形界面的实现。本程序是模拟WINDOWS2000系统中开始菜单的,在程序中不在采用WINDOWS2000系统的菜单形式,而是采用一个框架类对象MyFrame来实现。如图4-1所示:(windows2000中的开始菜单) 图4-1 Windows2000系统开始菜单而在本程序中采用的框架方式来实现,而不在是如上的菜单。如图4-2: 图4-2 菜单启动界面在本界面选项中,包括proceduer,text,establish,search,help,carryout分别与WINDOWS2000系统的开始菜单对应。为简单起见,本应用程序仅实现其中部分功能,在“proceduer”中,只包括start(启动),enclosure(附件),而在附件中,也只实现计算器和计时器功能。对text(文档),establish(设置)search(搜索),help(帮助),carryout(运行)等选项,只给出空监听器,并未实现。如下:text:ActionListener textListener=new ActionListener() public void actionPerformed(ActionEvent e)establishActionListener estListener=new ActionListener() public void actionPerformed(ActionEvent e) searchActionListener seaListener=new ActionListener() public void actionPerformed(ActionEvent e) helpActionListener helpListener=new ActionListener() public void actionPerformed(ActionEvent e) carryoutActionListener carryListener=new ActionListener()public void actionPerformed(ActionEvent e)对于上述方法,是采用JAVA中的匿名内部类进行。对于内部类,在JAVA中是受到争议的部分,并不是每个JAVA程序员都喜欢使用内部类。JAVA设计内部类的目标是为了比 C+简单。但内部类却并不简单,它的语法很复杂,特别是匿名内部类更是不容易理解。内部类同JAVA中的访问控制,以及安全性方面的交互也不明显。对于匿名内部类的格式就如上面。如第一个监听器text:ActionListener textListener=new ActionListener() public void actionPerformed(ActionEvent e)对于上面的匿名内部类,可以还原为普通的类: 先设一个Object Ob, public class Ob implements ActionListener ActionListener textListener=Ob; 这里就等价于上面的程序片段。其它的几个匿名内部类都可以是和上面的方法一样的。这里涉及到类类型转换问题,可以参考文献3P88页。在本界面中,主要是对Swing包中Jmenu菜单项和JmenuItem菜单子项的应用。JmenuItem类和Jbtton类都是javax.swing.AbstractButton抽象类的直接扩展,而Jmenu类又扩展了JmenuItme类,因此,菜单也是按钮。当用户用鼠标点击菜单项或子项时,也会象用鼠标点击按钮一样产生动作事件,变化事件。如上面的点击响应事件actionPerformed()。因为本程序是说明图形界面的实现,所以并未给出监听器的具体实现。在proceduer中,包括一个菜单项和一个菜单子项。对start(启动)也只给出空监听器,可以以后在实现起功能。对enclosure(附件),包括timeclock(计时器),circulat(计算器)。timeclock(计时器)界面如下 图4-3 timeclock(计时器)界面在本界面中,是对图形界面中很重要的一个类Graphics的应用,上图中的钟表完全是用Graphics类提供的函数所画。g.fillOval(x+1,y+1,width-i-1,height-i-1)/画表面g.drawOval(x,y,width-i,height-i)/画表框g.drawString(.,x,y)/画数字g.drawLine(xcenter,ycenter,lastxs,lastys)/画直线程序运行后,表就会和系统时间一样,开始运动。为了实现此界面功能,就用到JAVA中线程方面的接口,如Runnable接口,主要是对run方法的运用:public void run() trywhile(!interrupted() sleep(interval); target.timeElapsed(this); catch(InterruptedException e)既当线程未被中断,线程sleep有interval秒,然后执行target.timeElapsed()方法,重新画图。Interval在本程序中设置为1000,即1秒执行一次timeElapsed()方法。对于重画工作,是通过调用paint()方法实现,即用钟面的颜色覆盖掉原表针颜色。circulat(计算器)界面4-4: 图4-4 circulat(计算器)界面在本界面中,主要是对按纽组件和布局器的运用,涉及到java.awt.GridLayout(网格布局器)java.awt.BorderLayout (边框布局器)定义CalculatorJPanel为Jpanel的子类,并设置其为边框布局,p.setLayout(new GridLayout(rows,cols)定义CalculatorJFrame框架类,设置其为网格布局,setLayout(new BorderLayout()然后加入上面的CalculatorJPanel面板和一个JtextField文本域:add(display,North)add(p,Center)对于计算,则调用方法calculatepublic void calculate(double n)if(op.equals(+)arg+=n;else if(op.equals(-)arg-=n;else if(op.equals(*)arg*=n;else if(op.equals(/)arg/=n;else if(op.equals(=)arg=n;display.setText(+arg);以上既完成了本程序的基本界面设计,并用程序实现之。五 结束语通过本次设计,成功实现了基于JAVA的图形用户界面。在此过程中,通过运用JAVA的各种组件,并结合JAVA中的其他技术,如线程处理,布局控制来实现此界面。在JAVA中,图形用户界面主要通过其AWT及Swing来实现。在本文中,通过一个计时器,一个计算器来说明其实现过程。本文由于时间关系,图形界面比较简单,只是说明了JAVA中图形用户界面的基本实现过程以及相关技术,各种功能并不完全。通过本文,使我对JAVA中的各种技术更加的了解,对JAVA实现图形用户界面更加的熟悉,基本上掌握了图形用户界面方面的基本知识,以及起相关技术,提高了我的自学能力,也锻炼了我分析问题解决问题的能力!参考文献1英Russel WnDer,Gradam Roborts.JAVA软件开发.北京:人民邮电出版社,2003.1081152美Joe Wigglosworth,Paula Lumby.JAVA程序设计高级主题.北京:北京大学出版社.3033543(美)CayS.Horstmann,GaryCornell著.程峰译.JAVA2核心技术 卷1:基础知识. 北京:机械工业出版社,2003.2312664但正刚.JAVA2入门与提高.北京:清华大学出版社,2002.50595JavaR.J2SE进阶. 北京:机械工业出版社,1998.37706张倩,顾惠敏.JAVA实例开发. 北京:中国水利水电出版社,2000.3173407赵强,乔新亮.J2EE应用开发. 北京:电子工业出版社,2001.18黄聪明.精通JAVA2程序设计.北京:清华大学出版社,1999.19229樊荣.JAVA基础教程.北京:机械工业出版社,2000.678910邵荣.JAVA 编程实践指南.北京:清华大学出版社,2001.32735611王碧波.Jbuilder 10入门与提高.北京:清华大学出版社,2002.508712彭晨阳.JAVA实用系统开发指南.北京:机械工业出版社,2003.640附录程序如下:import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class MyFrame extends JFrame implements ActionListener,MenuListenerprivate JMenu procedure;private JMenuItem textfile;private JMenuItem establish;private JMenuItem search;private JMenuItem help;private JMenuItem carryout;private JMenu enclosure;private JMenuItem start;private JMenuItem timeclock;private JMenuItem circulate;public MyFrame() int width=400,height=300; setTitle(windows2000); setSize(width,height); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );JMenuBar mbar=new JMenuBar();setJMenuBar(mbar);procedure=new JMenu(procedure);enclosure=new JMenu(enclosure);start=new JMenuItem(start);timeclock=new JMenuItem(timeclock);circulate=new JMenuItem(circulate);textfile=new JMenuItem( text);establish=new JMenuItem(establish);search=new JMenuItem(search);help=new JMenuItem(help);carryout=new JMenuItem(carryout);JMenuItem jm1=textfile,establish,search,help,carryout;mbar.add(procedure);ActionListener timeListener=new ActionListener() public void actionPerformed(ActionEvent e) CityClockFrame City=new CityClockFrame(); City.show(); ;ActionListener cirListener=new ActionListener() public void actionPerformed(ActionEvent e) CalculatorJPanel Cal=new CalculatorJPanel(); Cal.show(); ;timeclock.addActionListener(timeListener);circulate.addActionListener(cirListener);enclosure.add(timeclock);enclosure.add(circulate);ActionListener staListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;start.addActionListener(staListener);procedure.add(start);procedure.add(enclosure);ActionListener textListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;ActionListener estListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;ActionListener seaListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;ActionListener helpListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;ActionListener carryListener=new ActionListener() public void actionPerformed(ActionEvent e) 。; ;ActionListener jm2=textListener,estListener,seaListener,helpListener,carryListener;for(int i=0;ijm2.length;i+) jm1i.addActionListener(jm21); mbar.add(jm1i); public void actionPerformed(ActionEvent e) int j=0;public void menuSelected(MenuEvent e)int j=0;public void menuDeselected(MenuEvent e)int j=0;public void menuCanceled(MenuEvent e)int j=0;public static void main(String args)JFrame f=new MyFrame();f.show();import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/import clocktext.Timeclock;import java.applet.*;/import .*;public class CityClock public static void main(String args) JFrame f=new CityClockFrame(); f.show(); class CityClockFrame extends JFrame/AudioClip planeSound;public CityClockFrame()int FrameWidth=440,frameHeight=320,frameX=100,frameY=150;setTitle(bjTime);setLocation(frameX,frameY);setSize(FrameWidth,frameHeight);setBackground(Color.lightGray);Timeclock bj=new Timeclock(BEIJING,GMT+8);Container c=getContentPane();/c.setLayout(new FlowLayout();c.setBackground(Color.white);c.add(bj);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););import java.awt.event.*;import javax.swing.*;class CalculatorJPanel extends JPanel implements ActionListenerprivate JTextField display;private double arg=0;private String op=;private boolean start=true;public CalculatorJPanel()int rows=4,cols=4;setLayout(new BorderLayout();display=new JTextField
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021年社工面试真题
- 人工智能复习题及答案84329
- 2025年教师资格考试真题及完整答案解析
- 全国计算机等级考试二级公共基础知识复习资料
- “质量月”全面质量管理知识竞赛试题及答案
- 2025年普通外科主治医师资格真题专项试卷
- 2025年新生儿科专科护士准入理论考试试题及答案
- 2025年执业药师继续教育真题卷附答案
- 中级银行从业资格之中级风险管理题库与答案
- 二级建造师之二建建筑工程实务押题练习试卷A卷附答案
- 手术室竞选护士长
- 学校食堂冰箱清洗、除霜记录
- 叠加定理课件
- 公共政策导论全套教学课件
- 2024年青海电工考试题库电工高级工考试题库(全国通用)
- 保险行业职业生涯规划总结
- 寺禅文化传承发展生态园项目实施方案
- 胆道梗阻的护理与处理
- 中国现当代文学史-13贾平凹的文学地理
- 大数据与会计专业职业生涯规划书2700字数
- 国家中小学智慧教育平台培训专题讲座
评论
0/150
提交评论