最新图形用户界面设计概述PPT课件.ppt
《最新图形用户界面设计概述PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新图形用户界面设计概述PPT课件.ppt(142页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、9.1图形用户界面设计概述图形用户界面设计概述v 9.1.1 GUI支持包和简单GUI程序例v 1.java.awt包 v Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。v 2. javax.swing包v Swing包是Java基础类库(Java Foundation Classes,JFC)的一部分。Swing提供了从按钮到可分拆面板和表格的所有组件。v 由于Swing组件使用AWT的结构,包括AWT的事件驱动模式,所以,使用swing组件的程序一般需要使用
2、awt包。v (2)使用缺省的观感或设置自己的观感(Look and Feel)v (3)设置一个顶层的容器v (4)根据需要,使用缺省的布局管理器或设置另外的布局管理器v (5)定义组件并将它们添加到容器v (6)对组件或事件编码v 9.1.2 容器、组件、布局和观感v 1.容器(Container)和组件(Component)v 一个Java的图形用户界面的最基本元素是组件,组件是可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如一个按钮、一个文本框等。在Java语言中,通常将组件放在一定的容器内使用。容器实际上是一种具有容纳其他组件和容器的功能的组件。抽象类Container是所
3、有容器的父类,其中包含了很多有关容器的功能和方法。而类Container又是Java语言的组件类Component的子类。v 2.布局管理器(Layout Manager)v 为了使得图形用户界面具有良好的平台无关性,在Java语言中提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。容器中的组件定位由布局管理器决定。每个容器都有一个缺省的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其相应的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。v Java平台提供多种布局管理器,常用的有FlowLayout、Bord
4、erLayout、 GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,组件在容器上的位置和大小都是很不一样的。 v 在程序中安排组件的位置和大小时,应该注意:v (1)容器中的布局管理器负责各个组件的大小和位置。因此用户无法在这种情况下直接设置这些属性。若试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。v (2)若用户确实需要亲自设置组件的位置和大小,则应取消该容器的布局管理器,方法为: setLayout(null); setLayout(null
5、);v 随后,用户必须使用setLocation()、setSize()、setBounds()等方法为组件设置大小和位置,但这种方法将会导致程序的系统相关。v 在一个GUI应用程序的界面上,除了可以见到上述的标准GUI元素外,还可以见到一些非交互的起到装饰、美化界面的作用的几何图形、图案、图像等内容。v 3.观感(Look and Feel)v Java swing的一个重要特征是它的可插入的“观感”体系。一个Swing应用程序或一个最终用户可指明所需要的观感,使得Swing应用程序的外观和行为都可以被定制。Swing运行一个缺省的Java观感(也称为Metal观感),还实现了模仿Motif
6、和Windows的观感。这样,一个Swing程序可拥有Java程序的独特外观,也可以拥有熟悉的Windows操作系统外观。v 在本章稍后部分的单选按钮的程序例中分别显示了Windows、Motif和Metal三种不同风格的观感。v 一般在应用程序的JFrame的构造方法中或在JApplet的init()方法中进行观感的设置。v 【例9.2】设置观感。 import javax.swing.import javax.swing.* *; ; import java.awt.import java.awt.* *; ; public class SetLAFpublic class SetLAF
7、public static void setNativeLookAndFeel() public static void setNativeLookAndFeel() try try UIManager.setLookAndFeel(UIManager. UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName(); getSystemLookAndFeelClassName(); catch(Exception e) catch(Exception e) System.out.println( System.out.p
8、rintln(设置设置native LAFnative LAF错误错误: : + + e);e); public static void setJavaLookAndFeel() public static void setJavaLookAndFeel() try try UIManager.setLookAndFeel(UIManager. UIManager.setLookAndFeel(UIManager. getCrossPlatformLookAndFeelClassName(); getCrossPlatformLookAndFeelClassName(); catch(Exce
9、ption e) catch(Exception e) System.out.println( System.out.println(设置设置Java LAFJava LAF错误错误: + : + e);e); public static void setMotifLookAndFeel() public static void setMotifLookAndFeel() try try UIManager.setLookAndFeel(“ UIManager.setLookAndFeel(“ com.sun.java.swing.plaf. com.sun.java.swing.plaf.
10、motif.MotifLookAndFeel); motif.MotifLookAndFeel); catch(Exception e) catch(Exception e) System.out.println( System.out.println(设置设置Motif LAFMotif LAF错误错误: + : + e);e); v 因为因为setLookAndFeelsetLookAndFeel()方法抛出异常,因此设置观感的代码应捕捉异常。本例创建的类SetLAF可在以后的程序中设置观感时使用。v 9.1.3事件处理v 在一个GUI程序中,为了能够接收用户的输入、命令的按键和鼠标操作,
11、程序系统首先应该能够识别这些操作并做出相应的响应。通常一个键盘和鼠标操作将引发一个系统预先定义好的事件,用户程序只要编写代码定义每个事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是GUI程序中事件和事件响应的基本原理。v 在Java语言中,除了键盘和鼠标操作,系统的状态改变也可以引发事件。v 可能产生事件的组件称为事件源,不同事件源上发生的事件种类是不同的。若希望事件源上引发的事件被程序处理,需要将事件源注册给能够处理该事件源上那种事件类型的监听器。监听器具有监听和处理某类事件的功能,它可以是包容事件源的容器,也可以是另外的对象。也就是说,事件源和事件处
12、理是分开的,一般组件都不处理自己的事件,而将事件处理委托给外部的处理实体,这种事件处理模型称为授权处理模型。v 事件的行为多种多样,由不同的监听器处理。编写事件处理程序首先应确定关注的事件属于何种监听器类型。 v 在AWT中,提供11种标准的监听器类型,见下表。 监听器 适配器类 注册方法 ActionListener addActionListener AdjustmentListener addAdjustmentListener ComponentListener ComponentAdapter addComponentListener ContainerListener Contai
13、nerAdapter addContainerListener FocusListener FocusAdapter addFocusListener ItemListener addItemListener KeyListener KeyAdapter addKeyListener MouseListener MouseAdapter addMouseListener MouseMotionListener MouseMotionAdapter addMouseMotionListener TextListener addTextListener WindowListener WindowA
14、dapter addWindowLv 在确定监听器类型后,要用事件源类的注册方法来注册一个监听器类的对象。这样,事件源产生的事件会传送给已注册的处理该类事件的监听器对象,该对象将自动调用相应的事件处理方法来处理该事件。具体的注册方法是:用监听器类的对象作为参数调用事件源本身的addXxxListener()方法。该方法的参数是一个监听器类的对象,有多种形式。例如: (1)(1)分离的监听器类,该类通常为继承相应事件适配器类的子类,分离的监听器类,该类通常为继承相应事件适配器类的子类,类中包含了事件处理方法。参数是该类的一个对象。类中包含了事件处理方法。参数是该类的一个对象。 (2)(2)实现监
15、听器接口,参数为实现监听器接口,参数为thisthis,表示本对象就是一个监听器类表示本对象就是一个监听器类的对象。在本类中包含事件处理方法。的对象。在本类中包含事件处理方法。 (3)(3)有名内部类,参数形式为继承事件适配器类的子类对象,在子有名内部类,参数形式为继承事件适配器类的子类对象,在子类中包含事件处理方法。类中包含事件处理方法。 (4)(4)匿名内部类,参数形式为用匿名内部类,参数形式为用newnew开始的一个无名的类定义。其中开始的一个无名的类定义。其中包含事件处理方法。包含事件处理方法。9.2布局管理器布局管理器v 在容器中所有组件的布局(位置和大小)由布局管理器来控制。在Ja
16、va语言中提供了FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等多种布局管理器。v 每种容器都有自己缺省的布局管理器。缺省地,JPanel使用FlowLayout,而内容窗格 ContentPanev (JApplet、JDialog和JFrame对象的主容器) 使用BorderLayout。如果不希望使用缺省的布局管理器,则可使用所有容器的父类Container的setLayout()方法来改变缺省的布局管理器。 v 1.FlowLayoutv FlowLayout布局是一种最基本的布局。这种布局指的是把组件一个接一个从
17、左至右、从上至下地依次放在容器上,每一行中的组件缺省为居中对齐。当容器的尺寸改变后,组件的大小不变,但布局将会随之变化。v FlowLayout是Applet和JPanel的缺省布局管理器。FlowLayout类的构造方法如下: FlowLayout() FlowLayout() 创建每行组件对齐方式为居中对齐、组件间距为创建每行组件对齐方式为居中对齐、组件间距为5 5个像素单位的对象个像素单位的对象 FlowLayout(int align) FlowLayout(int align) 创建指定每行组件对齐方式、组件间距创建指定每行组件对齐方式、组件间距为为5 5个像素单位的对象,个像素单位
18、的对象,alignalign可取三个静态常量可取三个静态常量LEFTLEFT、CENTERCENTER和和RIGHTRIGHT之一(分别表示左、中、右对齐方式)之一(分别表示左、中、右对齐方式)。 FlowLayout(int align, int hgap, int vgap) FlowLayout(int align, int hgap, int vgap) 创建指定每行组创建指定每行组件对齐方式的对象,该对象也使用参数件对齐方式的对象,该对象也使用参数vgapvgap和和hgaphgap指定了组件间指定了组件间的以像素为单位的纵横间距。的以像素为单位的纵横间距。v 向使用FlowLayo
19、ut布局的容器添加组件可简单地使用下面的语句: add(add(组件名组件名););v 2BorderLayoutv BorderLayout 是内容窗格的缺省布局管理器。内容窗格是框架JFrame,小程序JApplet和对话框JDialog的主容器。BorderLayout将容器的布局分为五个区:北区、南区、东区、西区和中区。这几个区的分布规律是“上北下南,左西右东”。当容器的大小改变时,容器中的各个组件相对位置不变,其中间部分组件的尺寸会发生变化,四周组件宽度固定不变。v BorderLayout类的构造方法如下: BorderLayout() BorderLayout() 创建组件间无间
20、距的创建组件间无间距的BorderLayoutBorderLayout对象。对象。 BorderLayout(int hgap, int vgap) BorderLayout(int hgap, int vgap) 创建有指定组件间距的创建有指定组件间距的对象。对象。v 向BorderLayout布局的容器添加组件时,每添加一个组件都应指明该组件加在哪个区域中。add()方法的第二个参数指明加入的区域,区域东南西北中可用五个静态常量表示:BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH和Borde
21、rLayout.CENTER。v 【例9.3】将五个按钮加入BorderLayout的五个区。 import java.awt.import java.awt.* *; ; import javax.swing.import javax.swing.* *; ; public class BorderLayoutDemo extends JApplet public class BorderLayoutDemo extends JApplet public void init() public void init() Container c = getContentPane(); Contai
22、ner c = getContentPane(); c.add(new Button( c.add(new Button(北北North), BorderLayout.NORTH);North), BorderLayout.NORTH); c.add(new Button( c.add(new Button(南南South), BorderLayout.SOUTH);South), BorderLayout.SOUTH); c.add(new Button( c.add(new Button(东东East), BorderLayout.EAST);East), BorderLayout.EAS
23、T); c.add(new Button( c.add(new Button(西西West), BorderLayout.WEST);West), BorderLayout.WEST); c.add(new Button( c.add(new Button(中中Center), BorderLayout.CENTER);Center), BorderLayout.CENTER); v 程序运行的结果见下图。v3GridLayoutvGridLayout布局是将容器的空间分成若干行和列的一个个网格,可以给出网格的行数和列数,组件添加到这些网格中。当改变容器的大小后,其中的组件相对位置不变,但大小
24、改变。容器中各个组件同高度、同宽度。各个组件缺省的排列方式为:从上到下,从左到右。v GridLayout类的构造方法如下: public GridLayout()public GridLayout()创建单行每个组件一列的创建单行每个组件一列的GridLayoutGridLayout对象。对象。 public GridLayout(int rows, int cols) public GridLayout(int rows, int cols) 创建指定行列数的创建指定行列数的GridLayoutGridLayout对象。对象。 public GridLayout(int rows, int
25、 cols, int hgap, int vgap)public GridLayout(int rows, int cols, int hgap, int vgap)创建指定行列数的创建指定行列数的GridLayoutGridLayout对象。对象。v 因为没有容器缺省使用GridLayout,因此在使用GridLayout前,要用setLayout()方法将容器的布局管理器设置为GridLayout。v 在向GridLayout添加组件时,组件加入容器要按序进行,每个网格中都必须加入组件,若希望某个网格为空,可以为该网格加入一个空的标签:add(new JLabel()。v 【例9.4】Gr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 图形 用户界面 设计 概述 PPT 课件
限制150内