1 / 63

Java 软件设计基础

Java 软件设计基础. 图形用户界面程序设计入门. 1. 组件概述. GUI: Graphics User Interface 设计和实现 GUI 的主要难点 创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要布局排列,从而构成完整的 GUI 的 外观表象 ; 在 GUI 程序中,代码所执行的路线及顺序都是很不确定的。在 GUI 程序中,用户可以点击任意按键并和屏幕上的其他任何部分进行交互及信息传递 —— 即 事件驱动 。 Java 提供了大量支持 GUI 设计的类。 AWT(Abstract Window Tookit) 包

Télécharger la présentation

Java 软件设计基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java软件设计基础 图形用户界面程序设计入门

  2. 1. 组件概述 GUI: Graphics User Interface 设计和实现GUI的主要难点 创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要布局排列,从而构成完整的GUI的外观表象; 在GUI程序中,代码所执行的路线及顺序都是很不确定的。在GUI程序中,用户可以点击任意按键并和屏幕上的其他任何部分进行交互及信息传递——即事件驱动。 Java提供了大量支持GUI设计的类。 AWT(Abstract Window Tookit)包 Button、Label、TextField、CheckBox… Swing包 JButton、JLabel、JTextField、JCheckBox…

  3. Swing和AWT • 对Java运行的每一个平台,AWT的组件自动的通过它们各自的代理映射成特定平台的组件,这些代理称为同位体(peer)。 • AWT组件的设计原理是把与显示组件有关的许多工作和处理组件事件的工作交给相应的本地组件,因此非常依赖底层平台; • AWT适用于开发简单的GUI,但不适于开发复杂的GUI项目。 • 随着Java 2的发行,AWT的用户界面组件被更稳定、通用和灵活的Swing组件库取代。 • 大多数Swing组件由Java代码绘制在画布上,更少的依赖目标机器上的底层平台。 不依赖本地GUI的Swing组件称为轻组件——Lightweight component; AWT组件称为重组件——Heavyweight component。

  4. Swing外观与Windows外观

  5. Java GUI API层次结构

  6. GUI类 • 容器类(Container) • 用来包含其他组件;Window、Panel、Applet、Frame和Dialog都是AWT组件的容器类;Conponent、Container、JFrame、JDialog、JApplet和JPanel都是Swing的容器类。其中: • Container用来组织组件; • JFrame是不能包含在另一个窗口内的窗口; • JDialog是一个弹出式窗口或消息框; • JApplet是Applet的一个子类; • JPanel是一个存放用户界面组件的不可见的容器,可以嵌套。 • 组件类(Component) • 组件是一个可以以图形化方式显示于屏幕上与用户进行交互的对象。 • 按钮、菜单、标签、文本域、复选框……

  7. 辅助类 • 辅助类都不是Component的子类,它们用来描述GUI组件的属性,例如颜色、字体、大小等。 • Graphics类是一个抽象类,提供一个图形环境,用于绘制字符串、直线和简单几何图形; • Color类用来处理GUI组件的颜色; • Font类指定GUI组件上文本和图形的字体; • FontMetrics是用于获取字体属性的抽象类; • Dimension将组件的宽度和高度(精度为整数)封装在单个对象中; • LayoutManager是一个接口,指定组件在容器中的摆放方式。 • 辅助类包含在AWT包中。 • Swing组件不能取代AWT的全部类,只能替代AWT的GUI组件类;AWT的辅助类保持不变。

  8. GUI设计的简要流程 引入java.awt包或javax.swing包; 利用包中提供的组件类来定义某种组件; 定义一个放置组件的容器; 对容器进行布局管理,将此组件添加到该容器中; 为了让该组件响应某个事件,还要注册组件对应的事件监听器并实现相应的监听器接口。

  9. 2. AWT图形化界面基础 • Frame/JFrame——框架 • Frame • 框架是Windows类的子类,它是窗口的一种,是顶级窗口。Frame组件在Java的顶层窗口中可以独立使用。 • 包含标题、边框等。 • 当Frame被关闭后,将产生WindowEvent事件。 • Frame无法直接监听键盘输入事件。 • 构造方法: • 建立一个没有标题的新Frame对象: • 建立一个以title为标题的Frame对象: Frame() Frame(String title)

  10. 主要方法:

  11. 示例:

  12. Panel——面板 简介: 是Container类的子类,也是容器,可容纳其他组件。 面板不是顶级窗口,不能独立存在,必须将它添加到其他容器中。 创建一个Panel对象后需将该对象放入Window和Frame中才可使Panel中的内容可见。 构造方法: 建立一个默认布局的新Panel对象: 建立一个布局为layout的Panel对象: Panel() Panel(LayoutManager layout)

  13. 示例

  14. Button——按钮 简介 是Java程序GUI设计中最常用的一个组件,是可以提供用户快速启动某一动作的类。 按钮本身不显示信息,它一般对应一个事先定义好的功能操作,并对应一段程序。 当用户点击按钮时,系统自动执行与该按钮相联系的程序,从而完成预先指定的功能。 构造方法 构造一个没有标题的按钮: 构造一个标题为str的按钮: Button() Button(String str)

  15. 主要方法 示例

  16. Label——标签 简介 是一种用来显示说明性的静态文本的组件,它起到信息说明的作用。 标签是用户只能查看而不能简单的修改其内容的文本显示区域,但用户可以在应用程序中通过调用Label提供的方法更换文本的内容。 构造方法 创建一个没有名字的标签对象 创建一个名字为str的标签对象 创建一个名字为str的标签对象,对齐方式为align 其中Label.LEFT、Label.RIGHT、Label.CENTER分别为居左、居右、居中。 Label() Label(String str) Label(String str, int align)

  17. 主要方法 示例

  18. TextField——文本框和TextArea——文本域 它们都是TextComponent的子类,用于文本处理。 TextField 文本框是单行文本输入域,多用于单行显示。 当按下回车键时,会发生事件(ActionEvent),可以通过ActionListener中的actionPerformed方法对事件进行处理。 构造方法 创建一个初始文本串为空的文本框对象 创建一个初始文本串为str的文本框对象 创建一个初始文本串为str、列数为column长度的文本框对象 TextField() TextField(String str) TextField(String str, int column)

  19. 主要方法 TextArea 是多行文本组件,用于显示程序中的多行文本信息。 构造方法 创建一个初始文本串为str的文本域对象 创建numLines行、numChars列的文本域对象 创建一个初始文本串为str、 numLines行、numChars列的文本域对象 TextArea(String str) TextArea(int numLines, int numChars) TextArea(String str, int numLines, int numChars)

  20. 主要方法 示例:

  21. 复选框与单选按钮 简介 复选框又称为检测盒,用Checkbox类的对象表示,Checkbox由一个方形的选择区和一个标签组成,有选中(check)和未选中(uncheck)两种状态。 单独的Checkbox实现的是复选框功能,当多个Checkbox加入到一个CheckboxGroup组件内时,选择区变成圆形,组件内的Checkbox只能有一个被选中,此时实现的是单选按钮的功能。 复选框和单选框使用ItemListener来监听ItemEvent事件。 构造方法 创建一个标签为str的复选框 创建一个标签为str的单选按钮,g指明所属的CheckboxGroup Checkbox(String str) Checkbox(String str, CheckboxGroup g, boolean state)

  22. 主要方法

  23. Choice——下拉列表 简介 提供一个弹出式的菜单让用户选择,也是“多选一”的输入界面。 与单选按钮组利用单选按钮把所有选项列出的方法不同,下拉列表的所有选项被折叠起来,在这个菜单折叠时只显示最前面的或是用户选定的那一项。 下拉列表节省显示空间,适用于大量选项的情形。 Choice用ItemListener接口来监听。 构造方法 创建一个空白的下拉列表 Choice()

  24. 主要方法 List——列表 简介 把所有供用户选择的项都显示出来以供选择。 列表可以实现多选,支持滚动条,可以同时浏览多项。 列表可以产生两种事件:

  25. 当用户单击列表中的某一个选项并选中它时,将产生ItemEvent类的选择事件;当用户单击列表中的某一个选项并选中它时,将产生ItemEvent类的选择事件; 当用户双击列表中的某一个选项时,将产生ActionEvent类的动作事件。 构造方法 建立行数为rows的List对象,参数b为真时允许多选 主要方法 List(int rows, boolean b)

  26. 示例

  27. Dialog——对话框 简介 对话框与框架类似,是有边框、有标题而独立存在的容器。通常起到与用户交互的对话窗口的作用。 对话框不能作为程序的最外层容器,也不能包含菜单栏,它必须隶属于某个框架并由该框架负责弹出。 对话框可以被设置为模式窗口,其特点是总是在激活窗口的最前面,即若是不关闭,则不能对其他窗口进行操作。 构造方法 创建没有标题的对话框,Owner表示所有者 创建有指定标题title的对话框 创建指定标题的对话框并指明是否为模式窗口 Dialog(Frame Owner) Dialog(Frame Owner, String title) Dialog(Frame Owner, String title, boolean model)

  28. 主要方法 示例

  29. Canvas——画布 画布代表屏幕上一块空白的矩形区域,它不是容器,而是一个可以在这里绘画、捕捉用户操作、产生相应事件的区域。

  30. 3. 事件处理机制 事件处理基础 事件及其处理机制 GUI的两大任务 创建窗口并在窗口中添加各种组件,规划组件在窗口中的位置和相关属性,构成GUI的外观效果; 设置各类组件对不同事件的响应,从而执行用户在用户界面所实施的交互行为,如果用户在用户界面执行了一个动作,这将导致一个事件的发生。 事件是描述用户所执行的一个操作、所产生的一个行为,主要涉及以下三个概念: 事件(Event):用来描述在用户界面的用户交互行为所产生的一种效果; 事件源(Event Source):产生事件的组件对象; 事件处理方法(Event Handler):负责解析处理事件的类对象,用以实现和用户交互的方法。

  31. 事件的类层次 事件处理方法主要基于“事件授权模型”(EDM: Event Delegation Model)的处理机制,实现定义多种事件类型。 事件源拥有自己的方法,通过它可以向其注册事件监听器。事件监听器是一个实例,当事件源产生一个事件后,事件源就会通知相应的事件监听器,根据事件对象内封装的消息决定如何响应该事件。 一个事件源可以注册一个或多个监听器,一个监听器也可以被注册到多个事件源。

  32. 事件的接口及方法 ActionEvent 行为:点击按钮、文本框、列表及选择菜单等 接口名:ActionListener 注册方法: 监听器接口所提供的事件方法: ItemEvent 行为:点击复选框选择框列表及带复选框的菜单项等 接口名:ItemListener 注册方法: 监听器接口所提供的事件方法 KeyEvent 行为:按下或释放键盘 addActionListener(ActionListener Listener) actionPerformed(ActionEvent e) addItemListener(ItemListener Listener) itemStateChanged(ItemEvent e)

  33. 接口名:KeyListener 注册方法: 监听器接口所提供的事件方法 MouseEvent 行为:鼠标单击或鼠标移动 接口名: 鼠标单击:MouseListener 鼠标移动:MouseMotionListener 注册方法: 鼠标单击: 鼠标移动: addKeyListener(KeyListener Listener) keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e) getModified() addMouseListener(MouseListener Listener) addMouseMotionListener(MouseMotionListener Listener)

  34. 监听器接口所提供的事件方法: 鼠标单击 鼠标移动 WindowEvent 行为:激活、打开、关闭窗口或窗口失去焦点及收到窗口级事件 接口名: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)

  35. 监听器接口所提供的事件方法: TextEvent 行为:文本框、文本域发生改变 接口名: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) textValueChanged(TextEvent e)

  36. FocusEvent 行为:组件获得或失去焦点 接口名:FocusListener 注册方法: 监听器接口所提供的事件方法: ComponentEvent 行为:移动、隐藏、显示组件和改变组件大小等。 接口名:ComponentListener 注册方法: 监听器接口所提供的事件方法: addFocusListener(FocusListener Listener) FocusGained(FocusEvent e) FocusLost(FocusEvent e) addComponentListener(监听者) ComponentMoved(ComponentEvent e) ComponentHidden(ComponentEvent e) ComponentResized(ComponentEvent e) ComponentShown(ComponentEvent e)

  37. ContainerEvent 行为:添加、移动组件等 接口名:ContainerListener 注册方法: 监听器接口所提供的事件方法: AdjustmentEvent 行为:调节滚动条或滑块等 接口名:AdjustmentListener 注册方法: 监听器接口所提供的事件方法: addContainerListener(监听者) ContainerAdded(ContainerEvent e) ContainerRemoved(ContainerEvent e) addAdjustmentListener(监听者) AdjustmentValueChange(AdjustmentEvent e)

  38. Java针对大多数事件监听器接口定义了相应的实现类来实现接口中的所有方法。Java针对大多数事件监听器接口定义了相应的实现类来实现接口中的所有方法。 事件处理主要步骤 步骤: 选择组件作为事件源,不同类型的组件会产生特定类型的事件,假设该事件类型为XXXEvent; 定义要接收并处理某种类型的事件,注册相应的事件监听器类,通过调用组件方法向组件注册事件监听器。 实现XXXListener类的实例对象,据此可作为事件的监听器对象。监听器的注册与注销如下: eventsourceObject.addXXXListener(XXXListener Listener); public void addXXXListener(XXXListener listener); public void removeXXXListener(XXXListener listener);

  39. 事件源通过实例化事件类激发并产生事件,事件将被传送给已注册的一个或多个监听器。监听器在接收到激发事件信号后负责实现相应的事件处理方法。事件源通过实例化事件类激发并产生事件,事件将被传送给已注册的一个或多个监听器。监听器在接收到激发事件信号后负责实现相应的事件处理方法。 以按钮组件作为事件源的简单范例 选择按钮组件作为事件源: 定义要接受并处理的事件ActionEvent,通过下面的语句注册事件监听器: 按下按钮组件bton对象会产生一个ActionEvent实例对象,事件源通过实例化事件类激发事件并传送给已注册的监听器; 监听器对象listener所属的类MyActionListener需通过方法actionPerformed实现相应的接口以响应事件:

  40. 键盘事件 KeyEvent类在java.awt.event包中,提供的主要方法: getKeyChar():判断被按下的键的字符; getKeyCode():判断哪个键被按下、点击或释放并获取其键码值。 Java语言的部分键码表

  41. 简单键盘事件的使用 组件使用addKeyListener()方法获得监视器。监视器是一个对象,创建该对象的类必然通过以下三种方法来实现接口: public void keyPressed(KeyEvent e); 按下键盘上的某个键 public void keyTyped(KeyEvent e); 当键被按下又释放 public void KeyReleased(KeyEvent e); 释放键盘上的某个键 示例:将键盘输入字符的键码、名称和按键显示出来。 设置用来显示的面板:

  42. 注册键盘事件监听器 • 允许面板获得焦点 • 对键盘事件进行响应(即实现接口方法)

  43. 键盘释放时重绘窗口: • 将KeyPanel实例加入到容器中:

  44. 复合键盘事件的使用 KeyEvent类对象可调用getModifiers()方法返回以下整数值: CTRL_MASK ALT_MASK SHIFT_MASK 以上是InputEvent类的类常量,根据返回值对复合键事件做处理。 当使用Ctrl+C复合键时,下面的逻辑表达式为真: 示例:利用对组合键事件的响应来处理复制、剪切与粘贴 对复制、剪切、粘贴的处理

  45. 窗口组件安放:

  46. 文本事件 TextArea或TextField信息发生改变时会触发TextEvent事件。需要在程序中将TextEvent事件注册给监听器TextListener,并实现TextListener接口中的textValueChanged方法。 示例:改变TextArea中的文字,并在标签中回显 安放组件,并注册监听器:

More Related