1、n Java通过图形用户界面通过图形用户界面(Graphical User Interface),用户和程序之间可以方便友好地进行交互。用户和程序之间可以方便友好地进行交互。n 抽象窗口工具包(抽象窗口工具包(Abstract Window Tools):):Java开发用户界面最初的工具包开发用户界面最初的工具包n 2D API:实现高质量的二维图:实现高质量的二维图n Swing组件:组件:建立在建立在AWT之上的功能更强大的图形组件包之上的功能更强大的图形组件包第第十六十六讲讲 图形用户界面图形用户界面-AWT2023-8-181 java.awt包中包含了一个完整的类集以支持GUI程序
2、的设计,其中的类及相互关系可以用下图来描述:事件类字体类GraphicsComponent颜色类布局管理类java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList图象类菜单类1 1 java.awtjava.awt包包2023-8-182河北农业大学信息科学与技术学院 朱亚涛 03-1 java.awt包中最核心的类就是Component类,它是构成Java图形用户界面的基础,大部分组件都是由该类派生出来的。Component类是一个抽象类,其中定义了组件所具有的一般功能:基本的绘画支持(paint,repa
3、int,update等等)、字体和颜色等外形控制(setFont,SetForeground等等)、大小和位置控制(SetSize,SetLocation等等)、图象处理(实现接口实现接口ImageObserver)以及组件状态控制(SetEnable,isEnable,isVisible,isValid等等),。2 Component2 Component类类2023-8-183河北农业大学信息科学与技术学院 朱亚涛 03-1AWT中的各种组件中的各种组件2023-8-184河北农业大学信息科学与技术学院 朱亚涛 03-1 常见的图形用户界面元素组件(Component类的子类)包括:But
4、ton(按钮)Checkbox(复选框)CheckboxGroup(成组复选框-单选按钮)Choice(下拉式菜单)Label(标签)List(列表)Canvas(画布)TextComponent(文本输入)Scrollbar(滚动条)3 3 界面元素组件界面元素组件2023-8-185河北农业大学信息科学与技术学院 朱亚涛 03-1 按钮(Button):可点击的用户界面组件,当组件被点击时,产生AcitonEvent事件,可以用ActionListener来监听。复选框(Checkbox):提供简单的 on/off 开关,同时旁边还可以显示说明信息。当复选框状态发生变化时,会产生ItemE
5、vent事件,可以用ItemListener来监听。复选框组(CheckboxGroup)单选框(Radio Button)当多个复选框组成一组时,就形成了单选框。复选框组中的复选框之间是相互关联的,每次有且只有一个处于选中状态。下拉式菜单(Choice):在下拉式菜单中有多个选项,但每次只能选择一项。当选择发生时,会产生ItemEvent事件,可以用ItemListener来监听。基本组件基本组件12023-8-186河北农业大学信息科学与技术学院 朱亚涛 03-1标签(Label):静态文字,多用于指示信息,无事件。单行文本区(TextField)TextComponent 只能显示一行信
6、息,当按回车键后,会产生ActionEvent事件,可以用ActionListener来监听。文本输入区(TextArea)TextComponent 可以输入或显示多行信息,并且有滚动条支持。按回车键后并不产生事件,相当于输入一个换行符。列表(List):列表提供了很多文本选项,可以同时看到多项,也有滚动条的支持,并且可以单选或多选。当用户单选或多选时,会产生ItemEvent事件。基本组件基本组件22023-8-187河北农业大学信息科学与技术学院 朱亚涛 03-1 菜单与其他组件不同,不是由一般的Component类派生,而是从MenuComponent类继承得到,它由以下概念支撑:菜单
7、条(MenuBar)只能添加到Frame中(用setMenuBar()),作为摆放菜单的容器。菜单(Menu)菜单项容器,负责显示并控制其中的菜单项。它支持菜单嵌套。菜单项(MenuItem)真正的动作,可以用ActionListener监听其事件(ActionEvent)。复选框菜单项(CheckboxMenuItem)真正的动作,可以用ItemListener监听其事件(ItemEvent)。弹出式菜单(PopupMenu)与菜单相似,也是菜单项容器。基本组件基本组件3 3:菜单:菜单2023-8-188河北农业大学信息科学与技术学院 朱亚涛 03-1 Container类是由Compon
8、ent类派生出来的一种特殊类,用来表示各种GUI组件的容器,其主要功能包括:组件的管理:方法add()可以向其中添加一个组件,remove()删除其中的一个组件,布局管理:每个容器都和一个布局管理器相联,以确定其中组件的布局。容器可以通过setLayout()方法设置某种布局方式。常见的Container类有Frame,Panel,Applet等。4 4 ContainerContainer类类2023-8-189河北农业大学信息科学与技术学院 朱亚涛 03-1 Window类(Container类的子类)是显示屏上独立的本机窗口,它独立于其它容器。Window主要有两种形式:Frame(框架
9、)和Dialog(对话框)。Frame和Dialog是Window的子类。Frame是一个带有标题和缩放角的窗口,可以有菜单条。Frame是一个顶级窗口,通常是应用程序的骨架。可以在 Frame中添加其它容器组件和界面元素组件。Dialog没有菜单条,尽管它能移动,但它不能缩放。对话框与Frame相类似,一般用于接收用户的输入数据,实现与用户的交互。对话框与一般窗口的区别在于它依赖其它的窗口。对话框分有模式和无模式两种,前者只让应用程序响应 对话框内部事件,后者则可以响应对话框以外的事件。容器:窗口容器:窗口2023-8-1810河北农业大学信息科学与技术学院 朱亚涛 03-1 Panel类(
10、Container类的子类)对象被包含在另一个容器中,或是在Web浏览器的窗口中。Panel(面板)确定一个四边形,其它基本组件或面板组件可以放入其中。最上层Panel必须放在Window之中(或Window的子类中)以便能显示出来。Applet 是Panel的子类,可以成为网页的一部分下面的程序创建了一个小的黄色面板,并将它加到一个框架对象上:容器:容器:Panel和和Applet2023-8-1811河北农业大学信息科学与技术学院 朱亚涛 03-1import java.awt.import java.awt.*;public class PanelTestTemp public clas
11、s PanelTestTemp public static void main(String args)public static void main(String args)Frame mainFrame=new Frame();Frame mainFrame=new Frame();mainFrame.setSize(200,200);mainFrame.setSize(200,200);mainFrame.setTitle(Frame with Panel);mainFrame.setTitle(Frame with Panel);Panel pan=new Panel();Panel
12、pan=new Panel();mainFrame.setBackground(Color.blue);mainFrame.setBackground(Color.blue);mainFrame.setLayout(null);mainFrame.setLayout(null);pan.setSize(100,100);pan.setSize(100,100);pan.setBackground(Color.yellow);pan.setBackground(Color.yellow);mainFrame.add(pan);mainFrame.add(pan);mainFrame.setVis
13、ible(true);mainFrame.setVisible(true);示例示例2023-8-1812河北农业大学信息科学与技术学院 朱亚涛 03-1 滚动窗口(ScrollPane)也是容器的一种,象Panel一样,无法单独使用。使用滚动窗口可以查看大面积的区域,因为它有滚动条。滚动窗口内只能放一个组件,通常是在滚动窗口中放一个面板,然后在面板中添加各种组件。容器:滚动窗口容器:滚动窗口2023-8-1813河北农业大学信息科学与技术学院 朱亚涛 03-15 5 FontFont类类 为了在程序执行时以不同的字体显示文本,Java语言提供了类Font。使用字体对象,需要为其构造方法提供字
14、体名称、风格、点阵大小。字体风格:Font.PLAIN、Font.ITALIC、Font.BOLD2023-8-1814河北农业大学信息科学与技术学院 朱亚涛 03-16 6 ColorColor类类 为了在程序执行时以不同的颜色显示文本或组件背景,Java语言提供了类Color。大多数组件均有setBackground(Color c)方法和 setForeground(Color c)方法 使用颜色对象,需要为其构造方法提供三个介于 0到255间的整数,分别表示混合红绿蓝三种颜色 分量所占的比例(RGB颜色模式),255相当于100%类Color还将一组标准颜色定义为常量2023-8-18
15、15河北农业大学信息科学与技术学院 朱亚涛 03-1颜色常量示例颜色常量示例Color.black 或 new Color(0,0,0)Color.blue 或 new Color(0,0,255)Color.gray 或 new Color(128,128,128)Color.green 或 new Color(0,255,0)Color.orange 或 new Color(255,200,0)Color.pink 或 new Color(255,175,175)Color.red 或 new Color(255,0,0)Color.white 或 new Color(255,255,25
16、5)Color.yellow 或 new Color(255,255,0)2023-8-1816河北农业大学信息科学与技术学院 朱亚涛 03-17 7 GraphicsGraphics类类 为了在屏幕上绘制直线、矩形、圆弧或椭圆等几何图形,Java语言提供了类Graphics。drawImage方法:绘制图像 drawLine方法 :绘制直线 drawOval方法 :绘制椭圆 drawArc方法 :绘制弧 drawRect方法 :绘制矩形 fillOval方法 :绘制填充椭圆 fillRoundRect方法 :绘制填充圆角矩形 getFont/setFont方法 :获取/设置字体 getCol
17、or/setColor方法:获取/设置颜色2023-8-1817河北农业大学信息科学与技术学院 朱亚涛 03-18 8 组件的布局组件的布局 为了使生成的图形用户界面具有良好的平台无关性,Java语言提供了布局管理器来管理组件在容器中的布局,而不直接设置组件的位置和大小。每个容器都要一个布局管理器,容器中组件的定位都由它来决定。当容器需要对某个组件进行定位时,就会调用其对应的布局管理器。2023-8-1818河北农业大学信息科学与技术学院 朱亚涛 03-1 每个容器,如Panel、Windows或Frame都有各自缺省的布局管理器,程序员也可以在程序中调用相应容器的setLayout方法指定一
18、个新的布局管理器。Java语言中包含五种布局管理器:FlowLayout:Panel和Applet的缺省布局管理器 BorderLayout:Window、Dialog和Frame的缺省布局管理器 GridLayout CardLayout GridBagLayout布局管理器简介布局管理器简介2023-8-1819河北农业大学信息科学与技术学院 朱亚涛 03-1 FlowLayout布局方式是将组件一排一排地依次放置,它自动调用组件的getPreferredSize()方法,使用组件的最佳尺寸来显示组件。当容器被重新设置大小后,则布局也会随之发生改变:各组件的大小不变,但相对位置会发生变化。
19、FlowLayout类有三种构造方法:public FlowLayout()使用缺省居中对齐方式,组件间水平和竖直间距为5个象素。public FlowLayout(int alignment)使用指定的对齐方式(FlowLayout.LEFT,FlowLayout.RIGHT,FlowLayout.Center),水平和竖直间距为缺省值5象素。public FlowLayout(int alignment,int horizontalGap,int verticalGap)使用指定的对齐方式,水平和竖直间距也为指定值。FlowLayoutFlowLayout布局布局2023-8-1820河北
20、农业大学信息科学与技术学院 朱亚涛 03-19 9 事件响应机制事件响应机制什么是事件?什么是事件?如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。事件是描述发生了什么的对象。存在各种不同类型的事件类用来描述各类用户交互。2023-8-1821河北农业大学信息科学与技术学院 朱亚涛 03-1事件源事件源 事件源是一个事件的产生者。例如,在Button组件上点击鼠标会产生以这个Button 为源的一个ActionEvent。这个ActionEvent实例是一个对象,它包含关于刚才所发生的那个事件的信息的对象。2023-8-1822河北农业大学信息科学与技术学院 朱亚
21、涛 03-1事件处理器事件处理器 事件处理器就是一个接收事件、解释事件并处理用户交互的方法。Java要求某个类实现相关接口(含有一个处理该事件的方法),将该类的某个对象向事件源注册监听某事件,一旦该事件发生,就会执行相应的方法。2023-8-1823河北农业大学信息科学与技术学院 朱亚涛 03-1 规定响应某类事件应该实现哪些方法。注意:仅仅是方法的名称及参数。实现这些方法的具体代码由实现该接口的类完成。为了知道某个源组件对应的事件监听接口,需要查阅该组件的类似 addXXXListener 的方法 XXXListenerXXXListener就是该组件对应的事件监听接口名称 监听器接口监听器
22、接口2023-8-1824河北农业大学信息科学与技术学院 朱亚涛 03-1 要响应button和List点击事件、TextFieldTextField输完回车事件应该实现 ActionListenerActionListener 接口 ,对应方法actionPerformedactionPerformed;要响应CheckboxCheckbox、ListList、ChoiceChoice选中事件,应该实现 ItemListener ItemListener 接口,对应方法itemStateChangeditemStateChanged ;要响应任何组件的键盘按键事件,应该实现KeyListen
23、er KeyListener 接口,对应方法keyPressedkeyPressed、keyReleasedkeyReleased、keyTypedkeyTyped ;要响应任何组件的基本鼠标事件,应该实现MouseListener MouseListener 接口,对应方法mousePressedmousePressed、mouseReleasedmouseReleased、mouseClickedmouseClicked、mouseEnteredmouseEntered、mouseExitedmouseExited ;要响应任何组件的鼠标移动和拖动事件,应该实现MouseMotionLis
24、tener MouseMotionListener 接口,对应方法mouseDraggedmouseDragged、mouseMovedmouseMoved 。2023-8-1825河北农业大学信息科学与技术学院 朱亚涛 03-1 任何类,只要实现了某个监听接口,就可以成为监听器。类可以实现多个监听接口,以便监听处理多种事件。类必须在接口规定的方法中完成相应的事件响应代码。源组件自身必须事先通知监听器,请求它处理自己的事件响应(addXXXListener 方法)。也可以在某些时候注销监听或再向其它监听器注册,完成复杂的控制。(removeXXXListener)实现监听器接口的类实现监听器接
25、口的类2023-8-1826河北农业大学信息科学与技术学院 朱亚涛 03-1 事件处理模型:将事件源(产生事件的组件)和对事件作出的具体处理(利用一种称为监听器listener的实体来对事件进行具体的处理)分开。一般情况下,组件(事件源)都不处理自己的事件,而是将事件处理委托给外部的处理实体(监听器),这种事件处理模型称为事件的授权处理模型。不同的事件,可以交由不同类型的监听器去处理。所有的组件都从Component类中继承了将事件处理授权给监听器的方法:addXXXListener(ListenerType listener)removeXXXListener(ListenerType li
26、stener)委托事件模型委托事件模型2023-8-1827河北农业大学信息科学与技术学院 朱亚涛 03-1framePanelButton事件源2、用户点击监听器Actionperformed 方法3、Call(invoke)1、循环检测事件0、登记、委托示意图示意图2023-8-1828河北农业大学信息科学与技术学院 朱亚涛 03-1 首先,对于某种类型的事件XXXEvent,要想接收并处理该类事件,必须定义相应的事件监听器类,这个类需要实现针对该类事件的特定接口XXXListener。其次,要实现该类中对事件处理的方法。第三,对于事件源,必须使用addXXXListener(XXXLis
27、tener)注册该类事件的监听器,以便当事件产生时,能够被监听器接收和处理。TestExitActionEventactionPerformed(ActionEvent e)Frame事件源监听器(ButtonListener)2023-8-1829河北农业大学信息科学与技术学院 朱亚涛 03-1class ButtonListener implements ActionListener public void actionPerformed(ActionEvent e)if(e.getActionCommand()=Test)System.out.println(Button Test pr
28、essed.);else System.exit(0);public class ComponentEvent2 public static void main(String args)Frame fr=new Frame(Component Event Test 1.1);ButtonListener bl=new ButtonListener();Button b1=new Button(Test);Button b2=new Button(Exit);b1.addActionListener(bl);b2.addActionListener(bl);fr.setLayout(new Fl
29、owLayout();fr.add(b1);fr.add(b2);fr.resize(200,200);fr.show();示例示例2023-8-1830河北农业大学信息科学与技术学院 朱亚涛 03-110 10 AppletApplet概述概述 要演示基本组件的应用,必须将其置于Frame或Applet中 Applet相对简单,我们的演示代码均用到了它,需要概述 Java小应用程序(Java Applet)是使用Java语言编写的 一段代码,它能够在浏览器环境中运行。Applet与Application的主要区别在于它们执行方式不同:Application是使用命令行命令直接运行,从其mai
30、n()方法开始运行的;而Applet则是在浏览器中运行的,首先必须创建一个HTML文件,通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行,再在浏览器中给出该HTML文件的URL地址即可,Applet本身的执行过程也较Application复杂。2023-8-1831河北农业大学信息科学与技术学院 朱亚涛 03-1 小应用程序的书写格式 import java.applet.*;public class MyApplet extends Applet ;每一个小应用程序都继承自java.applet.Applet类,不一定要有main方法。10.1 10.1 小应用程序小应用程
31、序2023-8-1832河北农业大学信息科学与技术学院 朱亚涛 03-1装入次序2.1 所有小应用程序的根源1.Browser loads URL2.(Uniform Resource Locator)2.Browser loads HTML documentApplet class3.Browser loads applet classesLocation:Loading.4.Browser run applet2023-8-1833河北农业大学信息科学与技术学院 朱亚涛 03-1import java.applet.*;import java.awt.*;public class Hell
32、oApplet extends Applet public String s;public void init()s=new String(“Hello World!”);public void paint(Graphics g)g.drawString(s,25,25);Hello World HelloApplet.java示例示例2023-8-1834河北农业大学信息科学与技术学院 朱亚涛 03-1观察HelloApplet.java、html文件 观察其被嵌入三峡大学网页的效果.观察JCreator 自动创建的Applet 程序 2023-8-1835河北农业大学信息科学与技术学院 朱
33、亚涛 03-1Java.applet.Appletpublic void init()public void destroy()public void start()public void stop()public void paint(Graphics g)10.2 10.2 Applet Applet 的运行控制的运行控制2023-8-1836河北农业大学信息科学与技术学院 朱亚涛 03-1初始态(瞬态)初始态(瞬态)运行态运行态停止态停止态消亡态消亡态离开web页面:极小化或装入其他页面,调用stop()方法重新装入或改变页面大小或返回Web页面,调用start()方法关闭浏览器,调用d
34、estroy()方法第一次装入,构造applet类,调用init()方法调用start()方法生命周期生命周期2023-8-1837河北农业大学信息科学与技术学院 朱亚涛 03-1 Java Applet浏览器是指可以运行包含Applet的HTML文件的一切软件系统。HotJava、Netscape Navigator以及Microsoft IE、Firefox等支持Java的网络浏览器都是Applet浏览器,Java Applet都可以在其中运行。AppletViewer是 JDK 提供的一个Java应用程序,它可以使得用户无须使用网络浏览器而直接运行Java Applet。但AppletV
35、iewer仅仅是一个Applet浏览器,HTML文件中的其他内容将不会被显示出来。(Jcreator 利用它运行Applet)10.3 Applet10.3 Applet浏览器浏览器2023-8-1838河北农业大学信息科学与技术学院 朱亚涛 03-110.4 10.4 绘图绘图操作操作 Applet中有三个与显示及图形绘制功能相关的方法:paint()、update()和repaint()。在paint()方法中有一个Graphics类参数,它是画图的关键。Applet的显示更新主要负责两种显示更新情况:第一是暴光,表示部分显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要系统调用paint()方法;第二是程序需要重画显示区域,添加一些新的显示内容,需要程序调用repaint()方法。2023-8-1839河北农业大学信息科学与技术学院 朱亚涛 03-1本 节 结 束本 节 结 束感 谢 聆 听 本 课 程,课 件可 任 意 编 辑,请 下 载 后调 整 使 用T h a n k y o u f o r l i s t e n i n g t o m y c l a s s a n d h a v e a g o o d l i f e