第一章:软件开发概述
第二章:模块化软件构造
第三章:面向对象的软件构造
第四章:数据处理的软件构造
第五章:用户交互的软件构造
第六章:软件重构与交付
第七章:GUI软件构造
7.1 GUI简介
1 . Java Swing 工具包
Swing 作为一个用于开发Java图形界面应用程序的经典开发工具包,jdk1.2 即包含了Swing.
2 . Java GUI可视化设计工具——WindowBuilder
>已成为Eclipse的插件
7.2 GUI的基本元素与设计规范
7.2.1 GUI的基本元素
1.窗口与对话框
- “窗口”是一种容器类,而且是顶层容器类。所谓顶层容器类,即可以容纳其他容器或组件、本身可独立显示、不依赖其他容器类的类。
- 窗口一般是指javax.swing.JFrame类,依次派生自java.awt.Window类、java.awt.Container类。
- “对话框”是一个与窗口类似的顶层容器类,对话框与普通窗口不同。对话框用于交互,一般会向用户提示一些信息并能获取用户的信息反馈。
- javax.swing.JDialog是一个对话框类,它依次派生自java.awt.JDialog类、java.awt.Window类,与jFrame类同源。另一个可以创建对话框的类JoptionPane,它有4个常用的静态方法,用于创建4种常用的对话框,如表7.2所示。
2.菜单和工具条菜单包括:
- 菜单条(JMenuBar )
- 菜单(JMenu )
- 菜单项(JMenultem )
- 工具条(JToolBar)是一个容器类,可以放置各种常用的工具或组件。
3.图标
- 在某些场合,使用图标(icon )比使用文字更加简洁、更加容易辨析。
4.组件
- 派生自Component的类称为“组件”,大致分三类:
- 顶层容器类(派生自Window ),如窗口或对话框;
- 非顶层容器类(如菜单条和工具条),称为中间容器类;
- 基本组件:必须放置在容器上的那些非容器类。
基本组件:
- (1)标签(JLabel )
- (2)文本域(JTextField )
- (3)密码域(JPasswordField )
- (4)单选按钮(JRadioButton )
- (5)复选框(JCheckBox )
- (6)组合框(JOmpoDcsDN)
- (7)文本区域(JTextArea )
- (8)按钮(JButton )
- (9)进度条
- (10)滑块
7.2.2 GUI基本设计规范
1.界面合理
- 合理的界面:合理的布局和颜色搭配
- 窗口中的组件要排列整齐,既不能太拥挤,也不能太空旷
- 界面的颜色要与软件的功能、界面布局搭配协调,且遵循人们
- 对于颜色的习惯性理解。
2.风格一致
- 应使用标准的组件、明确定义的术语,与用户的习惯认知和知识领域一致。
- 界面信息表现方式前后一致
- 不同功能模块的操作方式、字体、标签风格、颜色方案、错误提示信息等方面应一致
3.元素标准
( 1)窗口与对话框的标准
- 能适应不同分辨率的屏幕,能正确地关闭和缩放√组件在窗口缩放时应具有正确的位置
- 组件应具有恰当的焦点顺序
- 根据不同场合正确使用不同类型的对话框。
(2)菜单和工具条的标准
- 菜单应提供线索以帮助用户识别、而非强迫用户去记忆
- 菜单项措辞准确、顺序合理
- 菜单的层次不宜过多
- 工具条应具有最常用的功能
- 应允许用户自定义工具条的功能
- ’工具条的功能按钮可采用图标或文字相结合的方式
(3)图标的标准
- 图标应轮廓清晰、与背景区分明显
- 图标应采用能表达出实际功能的图形,避免过度抽象
- 图标的设置符合多数用户的表达习惯和使用习惯
(4)基本组件的标准
- 组件间距合理、属于同组的组件区域明显
- 文本编辑区域的组件尺寸应符合大多数情况的文字长度
- 按钮的位置符合用户使用习惯
- 根据功能正确使用如单选按钮、复选框等不同的输入组件
- 组件不可用或内容不可编辑时,要设置相应属性,以免误导
7.3 Java GUI设计模式
7.3.1观察者模式
在观察者模式中,那些状态将会发生改变的对象作为“被观察者”或“观察对象”(Subject )
当被观察者的状态发生改变时,则会通知另一类被称为“观察者”(Observer )或“侦听器”(Listener)的对象观察者会根据新状态做出相应的反应
被观察者可以将不同的观察者加入到对不同状态变化的侦听对象列表中。
弊端∶
- 观察者一方面接收状态变化的通知,另一方面还要做出相应的动作——执行相应的业务功能,这等于说在一个类当中整合了输入解析和业务逻辑两部分功能,不符合单一职责的设计原则。
- 这种功能耦合的设计,使得观察者类把输入解析和业务逻辑捆绑在一起,不能使用同一个观察者类处理不同的业务逻辑。
7.3.2 MVC模式
7.4事件驱动编程
事件驱动编程主要用于GUI和其他为响应用户的交互做出特定动作的应用程序。
在事件驱动编程的应用中,通常有一个监听事件的主循环,一旦监测到其中的一个事件,就触发一个函数调用,执行相应的动作。
事件驱动编程可以理解为实现MVC模式的一种技术方案
7.4.1事件捕捉与处理
- 用户对于组件的动作或组件状态的改变都可以列入事件
- 事件源︰发生动作或状态改变的组件
- 在Swing 中,采用事件类(Event)表示某种事件,采用了侦听器类(Listener)来捕捉与处理事件。侦听器类对不同的事件进行侦听,当发生特定事件时,即进行相应的处理。
7.4.2焦点事件和Tab顺序
焦点就是获取键盘或鼠标输入的能力。
组件获得焦点,即可获取键盘输入,而组件失去焦点,键盘输入的接收方也就随之改为其他组件。
焦点如何切换呢?
常用方法∶
- (1)使用Tab 键,每按一次Tab键,焦点按照一定的次序在组件之间切换;
- (2)使用鼠标单击组件,被单击的组件获得焦点,而原先获得焦点的组件则失去焦点;
- (3)使用其它键,如︰回车键。
“默认焦点”指当GUI程序(或网页)运行时,无须用户操作而首先获得焦点的那个组件。
默认焦点应当遵循以下两条设计原则。
- (1)默认焦点应当处于用户最经常选择的最先输入组件。
- (2)对于具有连续多个文本输入组件的界面,焦点切换顺序应当从第一项输入组件开始,按照从左至右、由上到下的顺序依次切换