1、Java 图形用户界面概述图形用户界面概述7.17.2布局管理器布局管理器7.3Java GUI 事件处理事件处理7.4常用组件常用组件7 7.1 1.1 1 AWT 和和 Swing AWT 和 Swing 是 Java语言设计 GUI 用户界面的基础。Java 语言早期提供的 GUI 开发并不是 Swing,而是 AWT,同样这个看似古怪的词语仍然来自于包,字面意思为“Abstract Window Toolkit(抽象窗体开发包)”,它提供了完整的窗体开发方法,然而,由于技术的局限性,AWT 在很多方面并不好用。Swing 是由100%纯 Java 程序实现的,Swing 组件是用 Ja
2、va实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于 AWT 组件通过与具体平台相关的对等(peer)类实现,因此 Swing 比 AWT组件具有更强的实用性。Swing 在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其他特性。7 7.1 1.2 2 组件组件和和容器容器 1 1.组件和容器的概述组件和容器的概述 Java语言的图形用户界面的最基本组成部分是组(Component)。组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,如,一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定
3、的容器中才可以显示出来。容器(container)也是一类,实际上是 Component 的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其他组件和容器。2.2.Swing 组件类组件类 Swing 组件类 Jcomponent 是一个抽象类,用于定义所有子类组件的一般方法。7 7.1 1.2 2 组件组件和和容器容器 java.awt.Componentjava.awt.Containerjavax.swing.JComponentjava.lang.Object+7 7.1 1.2 2 组件组件和和容器容器 组件从功能上可分为:7 7.1 1.2 2 组件组件和
4、和容器容器 Swing 技术实现 Java 图形用户界面一般可按照下列步骤进行:3.3.Swing 技术实现技术实现 Java 图形用户界面步骤图形用户界面步骤选择外观和感觉引入Swing包设置顶层容器设置按钮和标签7 7.1 1.2 2 组件组件和和容器容器 向容器中添加组件在组件周围添加边界进行事件处理7 7.2 2.1 1 布局管理器概述布局管理器概述 1)FlowLayout2)BorberLayout5 5)GridBagLayoutGridBagLayout4 4)CardLayoutCardLayout3)GridLayout7 7.2 2.2 2 FloeLayout 流流布局
5、管理器布局管理器 FlowLayout 是最简单的布局管理器,是 Panel、JPanel 类的默认布局管理器。FlowLayout 布局管理器默认的对齐方式是居中。n(1)new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距为20个像素,垂直间距为40个像素。n(2)new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距默认为5个像素。n(3)new FlowLayout();使用默认的居中对齐方式,上下左右均间距5个像素。7 7.2 2.3 3 BorderLayout 边界边界布局管理器布局管理器 Bord
6、erLayout 是 Frame、JFrame 类的默认布局管理器,BorderLayout 将整个容器的布局划分成了东西南北中5个区域,组件只能被添加到指定的区域。BorderLayout 布局管理器的尺寸缩放原则:北南两个区在水平方向上缩放东西两个区在垂直方向上缩放中部可以在两个方向上缩放123n(1)public BorderLayout()创建 BorderLayout 对象,组件之间没有水平和垂直间距。n(2)public BorderLayout(int hgap,int vgap)以参数指定的水平和垂直间距创建 BorderLayout 对象。7 7.2 2.3 3 Border
7、Layout 边界边界布局管理器布局管理器 7 7.2 2.4 4 GridLayout 网络网络布局管理器布局管理器 GridLayout 型布局管理器将容器划分成规则的网格,各个单元格区域大小相等,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他组件,直到占满该行的所有网格,接着继续在下一行中从左到右放置组件。n(1)public GridLayout()创建 GridLayout 对象,每行中只有一列。n(2)public GridLayout(int rows,int cols)以参数指定的行数和列数创建 GridLayout 对象,组件之间的水平和垂直间距为0。n(3
8、)public GridLayout(int rows,int cols,int hgap,int vgap)以参数指定的行数、列数以及组件之间的水平和垂直间距创建 GridLayout 对象。7 7.2 2.5 5 CardLayout 卡片卡片布局管理器布局管理器 CardLayout 将容器当作一个卡片盒,把添加到容器中的每一个组件当作一张卡片,每次只有一张卡片是可见的。为使某个组件可见,可以调用CardLayout对象的如下方法:public void first(Container parent)public void first(Container parent)public vo
9、id next(Container parent)public void next(Container parent)public void previous(Container parent)public void previous(Container parent)public void last(Container parent)public void last(Container parent)public void show(Container parent,String name)public void show(Container parent,String name)将组件添加
10、到 CardLayout 容器时需调用方法:add(Component comp,String name)7 7.3 3.1 1 Java 时间处理概述时间处理概述 要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及3类对象:Event:事件,用户对界面操作在Java语言上的描述,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent。Event Source:事件源,事件发生的场所,通常就是各个组件,例如,按钮JButton。Event handler:事件处理者 (监听器),接收事件对 象并对其进 行处理的对 象。7 7.3 3.1 1 J
11、ava 时间处理概述时间处理概述 使用授权处理模型进行事件处理的一般方法归纳如下:事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener)方法来注册监听器。(2)对于某种类型的事件XXXEvent,要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener。(1)7 7.3 3.2 2 Java 常用事件与事件监听器常用事件与事件监听器 与图形用户界面有关的所有事件类都由 java.awt.AWTEvent类派生,它也是 EventObject 类的子类。Java 事件共有10类,可以归为两
12、大类:低级事件和高级事件。1.1.Java 常用事件常用事件ComponentEvent(组件事件:组件尺寸的变化,移动)ContainerEvent(容器事件:组件增加,移动)WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)FocusEvent(焦点事件:焦点的获得和丢失)KeyEvent(键盘事件:键按下、释放)MouseEvent(鼠标事件:鼠标单击,移动)7 7.3 3.2 2 Java 常用事件与事件监听器常用事件与事件监听器 ActionEvent(动作事件:按钮按下,TextField中按Enter键AdjustmentEvent(调节事件:在滚动条上移动滑块以调节
13、 数值)ItemEvent(项目事件:选择项目,不选择“项目改变”TextEvent(文本事件:文本对象改变)每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。2.2.事件监听器事件监听器 与键盘事件 KeyEvent 相对应的接口是:7 7.3 3.2 2 Java 常用事件与事件监听器常用事件与事件监听器 public interface KeyListener extends EventListener public void keyPressed(KeyEvent ev);public void keyReleased(KeyEvent ev);public void k
14、eyTyped(KeyEvent ev);7 7.4 4.1 1 按钮和标签按钮和标签 按钮(JButton)是一个常用组件,按钮可以带标签或图像。1.1.按钮按钮JButton()/按钮上无字无图标JButton(Icon icon)/按钮上显示图标JButton(String text)/按钮上显示字符JButton(String text,Icon icon)/按钮上既显示图标又显示字符 标签(JLabel)是一种可以显示文字内容的简单组件,它通常在窗体中起到信息提示的作用,相应的 swing 类为 JLabel。2.2.标签标签7 7.4 4.1 1 按钮和标签按钮和标签 JLabel
15、()/创建一个空标签JLabel(Icon icon)/创建一个带指定文本的标签JLabel(String text)/创建一个具有指定图像的标签7 7.4 4.2 2 单选按钮和复选框单选按钮和复选框 JRadioButton 表示单选按钮,在使用的时候把一组单选按钮加入到一个按钮组(ButtonGroup)中,在任何时候,用户只能选择按钮组中的一个按钮,当用户选择一个单选按钮时,将触发一个 ActionEvent 事件,可以用 ActionListener 来响应这个事件。1.1.单选按钮单选按钮7 7.4 4.2 2 单选按钮和复选框单选按钮和复选框 JcheckBox 表示复选框。用户
16、可以同时选择多个复选框,当用户选择或者取消一个复选框时,将触发一个 ActionEvent 事件,可以用 ActionListener 来响应这个事件。2.2.复选框复选框7 7.4 4.3 3 文本框文本框 文本框也被称为文本域,它是一种可以接收用户字符输入的常见组件,如用户名称和密码等,相应的 swing 类为 JTextField 和 JPasswordField。7 7.4 4.4 4 文本区域和滚动面板文本区域和滚动面板 JTextField 表示文本框,只能输入一行文本,而 JTextArea 表示文本区域,可以输入多行文本。当用户在文本框中按 Enter键时,将触发一个 Acti
17、onEvent 事件,当用户在文本区域中按Enter键时,仅仅意味着换行输入文本,并不会触发 ActionEvent事件。JScrollPane 表示带滚动条的面板,在默认情况下,只有当面板中的内容超过了面板的面积时,才会显示滚动条。7 7.4 4.5 5 下拉列表框下拉列表框 JComboBox 表示下拉列表框。下拉列表框和单选按钮一样,也可以提供多个选项,并且只允许用户选择一项。下拉列表框的优点在于能节省空间,使界面更加紧凑。只有当用户单击下拉列表框右侧的下三角按钮时,才会显示列表中的所有项。7 7.4 4.6 6 文本区域和滚动面板文本区域和滚动面板 菜单是一种常用的组件,它包含以下几项:JmenuItem:菜单项,直接指向一个具体的操作,对应一项功能,选定菜单项组件会引发 ActiveEvent 和ItemEvent 等事件。Jmenu:菜单,菜单项的集合,一个菜单中可以加入菜单项、别的菜单和分隔符。JmenuBar:菜单栏,菜单的集合。一个菜单栏中可加入多个菜单。231