《Java软件设计基础.pps》由会员分享,可在线阅读,更多相关《Java软件设计基础.pps(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java软件设计基础,图形用户界面程序设计入门,1. 组件概述,GUI: Graphics User Interface设计和实现GUI的主要难点创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要布局排列,从而构成完整的GUI的外观表象;在GUI程序中,代码所执行的路线及顺序都是很不确定的。在GUI程序中,用户可以点击任意按键并和屏幕上的其他任何部分进行交互及信息传递即事件驱动。Java提供了大量支持GUI设计的类。AWT(Abstract Window Tookit)包Button、Label、TextField、CheckBoxSwing包JButton、JLabel、JT
2、extField、JCheckBox,Swing和AWT对Java运行的每一个平台,AWT的组件自动的通过它们各自的代理映射成特定平台的组件,这些代理称为同位体(peer)。AWT组件的设计原理是把与显示组件有关的许多工作和处理组件事件的工作交给相应的本地组件,因此非常依赖底层平台;AWT适用于开发简单的GUI,但不适于开发复杂的GUI项目。随着Java 2的发行,AWT的用户界面组件被更稳定、通用和灵活的Swing组件库取代。大多数Swing组件由Java代码绘制在画布上,更少的依赖目标机器上的底层平台。,不依赖本地GUI的Swing组件称为轻组件Lightweight component;
3、 AWT组件称为重组件Heavyweight component。,Swing外观与Windows外观,Java GUI API层次结构,GUI类容器类(Container)用来包含其他组件;Window、Panel、Applet、Frame和Dialog都是AWT组件的容器类;Conponent、Container、JFrame、JDialog、JApplet和JPanel都是Swing的容器类。其中:Container用来组织组件;JFrame是不能包含在另一个窗口内的窗口;JDialog是一个弹出式窗口或消息框;JApplet是Applet的一个子类;JPanel是一个存放用户界面组件的
4、不可见的容器,可以嵌套。组件类(Component)组件是一个可以以图形化方式显示于屏幕上与用户进行交互的对象。按钮、菜单、标签、文本域、复选框,辅助类辅助类都不是Component的子类,它们用来描述GUI组件的属性,例如颜色、字体、大小等。Graphics类是一个抽象类,提供一个图形环境,用于绘制字符串、直线和简单几何图形;Color类用来处理GUI组件的颜色;Font类指定GUI组件上文本和图形的字体;FontMetrics是用于获取字体属性的抽象类;Dimension将组件的宽度和高度(精度为整数)封装在单个对象中;LayoutManager是一个接口,指定组件在容器中的摆放方式。辅助
5、类包含在AWT包中。Swing组件不能取代AWT的全部类,只能替代AWT的GUI组件类;AWT的辅助类保持不变。,GUI设计的简要流程引入java.awt包或javax.swing包;利用包中提供的组件类来定义某种组件;定义一个放置组件的容器;对容器进行布局管理,将此组件添加到该容器中;为了让该组件响应某个事件,还要注册组件对应的事件监听器并实现相应的监听器接口。,2. AWT图形化界面基础,Frame/JFrame框架Frame框架是Windows类的子类,它是窗口的一种,是顶级窗口。Frame组件在Java的顶层窗口中可以独立使用。包含标题、边框等。当Frame被关闭后,将产生Window
6、Event事件。Frame无法直接监听键盘输入事件。构造方法:建立一个没有标题的新Frame对象:建立一个以title为标题的Frame对象:,Frame(),Frame(String title),主要方法:,示例:,Panel面板简介:是Container类的子类,也是容器,可容纳其他组件。面板不是顶级窗口,不能独立存在,必须将它添加到其他容器中。创建一个Panel对象后需将该对象放入Window和Frame中才可使Panel中的内容可见。构造方法:建立一个默认布局的新Panel对象:建立一个布局为layout的Panel对象:,Panel(),Panel(LayoutManager la
7、yout),示例,Button按钮简介是Java程序GUI设计中最常用的一个组件,是可以提供用户快速启动某一动作的类。按钮本身不显示信息,它一般对应一个事先定义好的功能操作,并对应一段程序。当用户点击按钮时,系统自动执行与该按钮相联系的程序,从而完成预先指定的功能。构造方法构造一个没有标题的按钮:构造一个标题为str的按钮:,Button(),Button(String str),主要方法示例,Label标签简介是一种用来显示说明性的静态文本的组件,它起到信息说明的作用。标签是用户只能查看而不能简单的修改其内容的文本显示区域,但用户可以在应用程序中通过调用Label提供的方法更换文本的内容。构
8、造方法创建一个没有名字的标签对象创建一个名字为str的标签对象创建一个名字为str的标签对象,对齐方式为align其中Label.LEFT、Label.RIGHT、Label.CENTER分别为居左、居右、居中。,Label(),Label(String str),Label(String str, int align),主要方法示例,TextField文本框和TextArea文本域它们都是TextComponent的子类,用于文本处理。TextField文本框是单行文本输入域,多用于单行显示。当按下回车键时,会发生事件(ActionEvent),可以通过ActionListener中的act
9、ionPerformed方法对事件进行处理。构造方法创建一个初始文本串为空的文本框对象创建一个初始文本串为str的文本框对象创建一个初始文本串为str、列数为column长度的文本框对象,TextField(),TextField(String str),TextField(String str, int column),主要方法TextArea是多行文本组件,用于显示程序中的多行文本信息。构造方法创建一个初始文本串为str的文本域对象创建numLines行、numChars列的文本域对象创建一个初始文本串为str、 numLines行、numChars列的文本域对象,TextArea(Str
10、ing str),TextArea(int numLines, int numChars),TextArea(String str, int numLines, int numChars),主要方法示例:,复选框与单选按钮简介复选框又称为检测盒,用Checkbox类的对象表示,Checkbox由一个方形的选择区和一个标签组成,有选中(check)和未选中(uncheck)两种状态。单独的Checkbox实现的是复选框功能,当多个Checkbox加入到一个CheckboxGroup组件内时,选择区变成圆形,组件内的Checkbox只能有一个被选中,此时实现的是单选按钮的功能。复选框和单选框使用I
11、temListener来监听ItemEvent事件。构造方法创建一个标签为str的复选框创建一个标签为str的单选按钮,g指明所属的CheckboxGroup,Checkbox(String str),Checkbox(String str, CheckboxGroup g, boolean state),主要方法,Choice下拉列表简介提供一个弹出式的菜单让用户选择,也是“多选一”的输入界面。与单选按钮组利用单选按钮把所有选项列出的方法不同,下拉列表的所有选项被折叠起来,在这个菜单折叠时只显示最前面的或是用户选定的那一项。下拉列表节省显示空间,适用于大量选项的情形。Choice用ItemL
12、istener接口来监听。构造方法创建一个空白的下拉列表,Choice(),主要方法List列表简介把所有供用户选择的项都显示出来以供选择。列表可以实现多选,支持滚动条,可以同时浏览多项。列表可以产生两种事件:,当用户单击列表中的某一个选项并选中它时,将产生ItemEvent类的选择事件;当用户双击列表中的某一个选项时,将产生ActionEvent类的动作事件。构造方法建立行数为rows的List对象,参数b为真时允许多选主要方法,List(int rows, boolean b),示例,Dialog对话框简介对话框与框架类似,是有边框、有标题而独立存在的容器。通常起到与用户交互的对话窗口的作
13、用。对话框不能作为程序的最外层容器,也不能包含菜单栏,它必须隶属于某个框架并由该框架负责弹出。对话框可以被设置为模式窗口,其特点是总是在激活窗口的最前面,即若是不关闭,则不能对其他窗口进行操作。构造方法创建没有标题的对话框,Owner表示所有者创建有指定标题title的对话框创建指定标题的对话框并指明是否为模式窗口,Dialog(Frame Owner),Dialog(Frame Owner, String title),Dialog(Frame Owner, String title, boolean model),主要方法示例,Canvas画布画布代表屏幕上一块空白的矩形区域,它不是容器,
14、而是一个可以在这里绘画、捕捉用户操作、产生相应事件的区域。,3. 事件处理机制,事件处理基础事件及其处理机制GUI的两大任务创建窗口并在窗口中添加各种组件,规划组件在窗口中的位置和相关属性,构成GUI的外观效果;设置各类组件对不同事件的响应,从而执行用户在用户界面所实施的交互行为,如果用户在用户界面执行了一个动作,这将导致一个事件的发生。事件是描述用户所执行的一个操作、所产生的一个行为,主要涉及以下三个概念:事件(Event):用来描述在用户界面的用户交互行为所产生的一种效果;事件源(Event Source):产生事件的组件对象;事件处理方法(Event Handler):负责解析处理事件的
15、类对象,用以实现和用户交互的方法。,事件的类层次事件处理方法主要基于“事件授权模型”(EDM: Event Delegation Model)的处理机制,实现定义多种事件类型。事件源拥有自己的方法,通过它可以向其注册事件监听器。事件监听器是一个实例,当事件源产生一个事件后,事件源就会通知相应的事件监听器,根据事件对象内封装的消息决定如何响应该事件。一个事件源可以注册一个或多个监听器,一个监听器也可以被注册到多个事件源。,事件的接口及方法ActionEvent行为:点击按钮、文本框、列表及选择菜单等接口名:ActionListener注册方法:监听器接口所提供的事件方法:ItemEvent行为:
16、点击复选框选择框列表及带复选框的菜单项等接口名:ItemListener注册方法:监听器接口所提供的事件方法KeyEvent行为:按下或释放键盘,addActionListener(ActionListener Listener),actionPerformed(ActionEvent e),addItemListener(ItemListener Listener),itemStateChanged(ItemEvent e),接口名:KeyListener注册方法:监听器接口所提供的事件方法MouseEvent行为:鼠标单击或鼠标移动接口名:鼠标单击:MouseListener鼠标移动:Mo
17、useMotionListener注册方法:鼠标单击:鼠标移动:,addKeyListener(KeyListener Listener),keyPressed(KeyEvent e),keyReleased(KeyEvent e),keyTyped(KeyEvent e),getModified(),addMouseListener(MouseListener Listener),addMouseMotionListener(MouseMotionListener Listener),监听器接口所提供的事件方法:鼠标单击鼠标移动WindowEvent行为:激活、打开、关闭窗口或窗口失去焦点及
18、收到窗口级事件接口名:WindowListener注册方法:,mousePressed(MouseEvent e),mouseReleased(MouseEvent e),mouseEntered (MouseEvent e),mouseExited(MouseEvent e),mouseClicked(MouseEvent e),mouseMoved(MouseEvent e),mouseDragged(MouseEvent e),addWindowListener(WindowListener Listener),监听器接口所提供的事件方法:TextEvent行为:文本框、文本域发生改变接
19、口名:TextListener注册方法:监听器接口所提供的事件方法:,windowClosing(WindowEvent e),windowClosed(WindowEvent e),windowOpened(WindowEvent e),windowIconified(WindowEvent e),windowDeiconified(WindowEvent e),windowActivated(WindowEvent e),windowDeactivated(WindowEvent e),addTextListener(TextListener Listener),textValueChan
20、ged(TextEvent e),FocusEvent行为:组件获得或失去焦点接口名:FocusListener注册方法:监听器接口所提供的事件方法:ComponentEvent行为:移动、隐藏、显示组件和改变组件大小等。接口名:ComponentListener注册方法:监听器接口所提供的事件方法:,addComponentListener(监听者),ComponentMoved(ComponentEvent e),ComponentHidden(ComponentEvent e),ComponentResized(ComponentEvent e),ComponentShown(Compo
21、nentEvent e),addFocusListener(FocusListener Listener),FocusGained(FocusEvent e),FocusLost(FocusEvent e),ContainerEvent行为:添加、移动组件等接口名:ContainerListener注册方法:监听器接口所提供的事件方法:AdjustmentEvent行为:调节滚动条或滑块等接口名:AdjustmentListener注册方法:监听器接口所提供的事件方法:,addContainerListener(监听者),ContainerAdded(ContainerEvent e),Con
22、tainerRemoved(ContainerEvent e),addAdjustmentListener(监听者),AdjustmentValueChange(AdjustmentEvent e),Java针对大多数事件监听器接口定义了相应的实现类来实现接口中的所有方法。事件处理主要步骤步骤:选择组件作为事件源,不同类型的组件会产生特定类型的事件,假设该事件类型为XXXEvent;定义要接收并处理某种类型的事件,注册相应的事件监听器类,通过调用组件方法向组件注册事件监听器。实现XXXListener类的实例对象,据此可作为事件的监听器对象。监听器的注册与注销如下:,eventsourceOb
23、ject.addXXXListener(XXXListener Listener);,public void addXXXListener(XXXListener listener);,public void removeXXXListener(XXXListener listener);,事件源通过实例化事件类激发并产生事件,事件将被传送给已注册的一个或多个监听器。监听器在接收到激发事件信号后负责实现相应的事件处理方法。以按钮组件作为事件源的简单范例选择按钮组件作为事件源:定义要接受并处理的事件ActionEvent,通过下面的语句注册事件监听器:按下按钮组件bton对象会产生一个Actio
24、nEvent实例对象,事件源通过实例化事件类激发事件并传送给已注册的监听器;监听器对象listener所属的类MyActionListener需通过方法actionPerformed实现相应的接口以响应事件:,键盘事件KeyEvent类在java.awt.event包中,提供的主要方法:getKeyChar():判断被按下的键的字符;getKeyCode():判断哪个键被按下、点击或释放并获取其键码值。Java语言的部分键码表,简单键盘事件的使用组件使用addKeyListener()方法获得监视器。监视器是一个对象,创建该对象的类必然通过以下三种方法来实现接口:public void key
25、Pressed(KeyEvent e);按下键盘上的某个键public void keyTyped(KeyEvent e);当键被按下又释放public void KeyReleased(KeyEvent e);释放键盘上的某个键示例:将键盘输入字符的键码、名称和按键显示出来。设置用来显示的面板:,注册键盘事件监听器允许面板获得焦点对键盘事件进行响应(即实现接口方法),键盘释放时重绘窗口:将KeyPanel实例加入到容器中:,复合键盘事件的使用KeyEvent类对象可调用getModifiers()方法返回以下整数值:CTRL_MASKALT_MASKSHIFT_MASK以上是InputEve
26、nt类的类常量,根据返回值对复合键事件做处理。当使用Ctrl+C复合键时,下面的逻辑表达式为真:示例:利用对组合键事件的响应来处理复制、剪切与粘贴对复制、剪切、粘贴的处理,窗口组件安放:,文本事件TextArea或TextField信息发生改变时会触发TextEvent事件。需要在程序中将TextEvent事件注册给监听器TextListener,并实现TextListener接口中的textValueChanged方法。示例:改变TextArea中的文字,并在标签中回显安放组件,并注册监听器:,响应文本事件(即实现接口方法),鼠标事件MouseListener触发鼠标事件的四种操作:鼠标指针
27、进入组件或退出组件mouseEntered(MouseEvent e)mouseExited(MouseEvent e)鼠标指针停留在组件上时按下鼠标mousePressed(MouseEvent e)鼠标指针停留在组件上时释放鼠标mouseReleased(MouseEvent e)鼠标指针停留在组件上时单击或连续单击鼠标mouseClicked(MouseEvent e)MouseMotionListener触发鼠标事件的两种操作:在组件上拖动鼠标指针,mouseDragged(MouseEvent e)在组件上运动鼠标指针mouseMoved(MouseEvent e)由于处理鼠标事件的
28、接口中的方法较多,Java提供了相应的适配器类MouseAdapter和MouseMotionAdapter,据此分别实现了MouseListener接口和MouseMotionListener。获取鼠标的具体信息的方法:,示例:当鼠标发生事件时在窗口显示事件并给出鼠标位置。处理鼠标事件(即实现接口方法),构造窗口注册监听器,获取鼠标在系统桌面上的坐标PointerInfo类可以帮助程序获得鼠标指针在系统图形设备中的位置坐标。PointerInfo类中的类方法:getPointerInfo():可通过以下语句实例化一个PointerInfo对象getLocation():返回一个Point对象
29、,对象通过调用getX()和getY()方法返回鼠标在桌面上的坐标值。当鼠标运动时必须及时更新PointerInfo对象,因为PointerInfo对象中存储的Point对象不会自动更新。弹出式菜单通过JPopupMenu类负责创建构造无标题弹出式菜单,public JpopupMenu(),构造由参数label指定标题的弹出式菜单设置弹出式菜单在组件上的弹出位置:窗口事件当一个窗口(Frame或JFrame)被激活、撤销、打开、关闭、图标化等操作时,会引发WindowEvent事件。方法getWindow()用来获取发生窗口事件的窗口。触发窗口事件当单击窗口的图标化按钮时,监视器要调用以下两
30、种方法:WindowIconified()WindowDeactivated()当撤销窗口图标化时,监视器要调用以下两种方法:WindowDeiconified()WindowActivated(),public JpopupMenu(String label),示例,焦点事件组件对象可以触发焦点事件,当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点时,或从有输入焦点变成无输入焦点,都会触发FocusEvent事件。方法获得输入焦点组件从无输入焦点变成有输入焦点时实现的接口方法FocusGained(FocusEvent e)组件从有输入焦点变成无输入焦点时实现的接口方法FocusL
31、ost(FocusEvent e)示例:在窗口中安放两个组件,检测对焦点事件的响应。,事件适配器Java针对大多数事件监听器接口定义了相应的已经实现了接口功能的实现类:事件适配器类。宗旨是使监听器的创建变得更加简便。适配器中系统自动实现相应监听器接口中的所有方法(只写出空方法体),但不做任何事情。编程时定义继承事件适配器类的监听器,只重写需要的方法。常用的适配器类有:KeyAdapter:键盘事件适配器MouseAdapter:鼠标事件适配器MouseMotionAdapter:鼠标运行事件适配器WindowAdapter:窗口事件适配器FocusAdapter:焦点事件适配器ComponentAdapter:组件事件适配器ContainerAdapter:容器事件适配器,示例,