Presentation is loading. Please wait.

Presentation is loading. Please wait.

项目5 系统GUI设计.

Similar presentations


Presentation on theme: "项目5 系统GUI设计."— Presentation transcript:

1 项目5 系统GUI设计

2 本项目将通过五个任务来向大家展现Java优秀的图形界面构建能力 :
项目创设 本项目将通过五个任务来向大家展现Java优秀的图形界面构建能力 : 了解Java丰富的组件定义和应用能力,并真正地理解何谓可视化编程。 系统登录界面设计 员工考核输入界面设计 员工考核查询界面设计 系统帮助界面设计 系统主界面设计

3 本项目的技能目标 Java GUI 设计 常用组件的定义和使用 组件事件 响应处理 对话框的 应用 数据的输入与输出(I/O)
文件的读/写操作

4 学习目标 五 一 三 四 二 掌握常用信息对话框的使用方法。 掌握Java中基本数据的输入输出(I/O)操作。
TEXT 掌握常用信息对话框的使用方法。 掌握Java中基本数据的输入输出(I/O)操作。 掌握Java 中文件的读/写操作。 了解Java GUI编程中组件的概念,并理解容器的特性。 理解Java 组件的事件响应机制。

5 5.1 任务 1 系统登录界面设计 目标效果 1 必备知识 2 拓展训练 3 实现机制 4

6 本任务的目标是向用户提供进入AEIM系统的登录界面,只有正确输入登录用户名和密码的用户才能进入系统。
5.1.1 目标效果 本任务的目标是向用户提供进入AEIM系统的登录界面,只有正确输入登录用户名和密码的用户才能进入系统。 登录界面的实现涉及Java最基础的GUI编程 。 目标效果如图5-1所示:

7 若用户输入错误的用户名或密码信息,系统将弹出错误提示信息,如图5-2所示。
5.1.1 目标效果 若用户输入错误的用户名或密码信息,系统将弹出错误提示信息,如图5-2所示。

8 要实现系统的登录界面,就需要学习Java GUI编程的相关知识,不妨带着如下的问题来学习本任务 :
5.1.1 目标效果 要实现系统的登录界面,就需要学习Java GUI编程的相关知识,不妨带着如下的问题来学习本任务 : 5)如果登录信息输入错误,则系统如何提示用户呢? 4)如何把这些小组件定位在界面中合适的位置? 3)为什么可以把小组件(如文本框,按钮等)放在窗体里面? 2)一个窗体如何去掉其标题栏? 1)如何生成一个登录界面?

9 5.1.2 必备知识 1 图形界面基础-AWT 3 窗口和面板 必备知识 4 通用信息对话框 2 Swing 组件

10 5.1.2 必备知识 1 图形界面基础-AWT Java图形用户界面(GUI,Graphics User Interface) 设计的基础是其所特有的工具集,即抽象窗口工具包(AWT,Abstract Window Toolkit) AWT包含了许多类来支持GUI的设计,涉及到用户界面组件、事件处理模型、图形和图像工具(包括形状、颜色和字体类)及布局管理器(可以在窗口中对组件进行灵活地布局)。 AWT所定义的图形界面元素,根据其在界面中所起的作用可以分成两类:即组件(Component)和容器(Container),这两个类都被定义在java.awt包中

11 5.1.2 必备知识 1 图形界面基础-AWT 1. 组件(Component) 组件(Component),是指一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。 组件不能独立地显示出来,必须将组件放在一定的载体(即容器)中才可以显示出来。 任何系统组件的使用,必须先导入其相应的类。 如: import javax.swing.JButton; JButton button=new JButton();

12 Java中所有的组件直接或间接地继承于组件类,即Component类。
5.1.2 必备知识 1 图形界面基础-AWT Java中所有的组件直接或间接地继承于组件类,即Component类。 Component类中封装了组件通用的方法和属性,如图形组件对象的大小、显示位置、前景色和背景色、边界、可见性等,

13 5.1.2 必备知识 1 图形界面基础-AWT Component类的主要方法 String getName() :获取组件的名称 。
void repaint() :重绘此组件 。 void setBackground(Color c) :设置组件的背景色 。 void setBounds(int x, int y, int width, int height) : 显示组件的左顶点坐标为(x,y),长宽为 width和height 。

14 5.1.2 必备知识 1 图形界面基础-AWT void setEnabled(boolean b) :根据参数 b 的值启用或禁用此组件 。 void setFont(Font f) :设置组件的字体 。 void setForeground(Color c) :设置组件的前景色 。 void setSize(int width, int height) : 调整组件的大小,使其宽度为 width,高度为 height 。 void setVisible(boolean b) : 根据参数 b 的值显示或隐藏此组件 。

15 5.1.2 必备知识 1 图形界面基础-AWT 2.容器(Container) 容器(Container),是指能够存放组件的组件,它可以容纳多个组件,并使它们成为一个整体。 Java中所有的容器直接或间接地继承于容器类,即Container类。 实质上,容器本身也是一个组件,因此,Container类是Component类的子类,它具有组件的所有性质,但是它的主要功能是容纳其它组件和容器

16 5.1.2 必备知识 1 图形界面基础-AWT Container类的主要方法
Component add(Component comp) :将指定组件追加到此容器的尾部 。 void remove(Component comp) :从此容器中移除指定组件 。 void setFont(Font f) :设置此容器的字体 。 void setLayout(LayoutManager mgr) :设置此容器的布局管理器 。

17 3.布局管理器(LayoutManager) 常见的布局管理器有: FlowLayout(流式布局管理器)
5.1.2 必备知识 1 图形界面基础-AWT 3.布局管理器(LayoutManager) 常见的布局管理器有: FlowLayout(流式布局管理器) BorderLayout(边界布局管理器) GridLayout(网格布局) CardLayout

18 5.1.2 必备知识 2 Swing 组件 AWT仅仅为用户提供基本的图形界面设计功能 , 且AWT组件基本都属于重质组件(weight component),即组件效果紧密的依赖于系统平台。 Swing组件属于轻质组件(light component),即组件效果完全独立于系统平台。丰富和完善了Java的GUI编程能力。 所有的Swing组件都被定义在javax.swing包中,包括两种类型的组件:容器(如JFrame,JApplet,JDialog和JPanel)和非容器组件(如Jbutton,JLabel)。 Swing组件都是AWT的Container类的直接或者间接子类。

19 5.1.2 必备知识 3 窗口和面板 容器分类 普通容器 顶级容器
指其可以容纳其它小组件,而自身又可以被置入其它容器的容器,如面板(JPanel) 顶级容器 指不允许将其包含于其他容器的容器,如窗口(JFrame)

20 在用户处理它之前不允许用户同应用程序的主窗口进行交互 允许用户同时在该对话框和程序其他窗体中切换操作,不需要用关闭该对话框
5.1.2 必备知识 4 通用信息对话框 模态 对话框 非模态 对话框 对话框 在用户处理它之前不允许用户同应用程序的主窗口进行交互 允许用户同时在该对话框和程序其他窗体中切换操作,不需要用关闭该对话框

21 5.1.3 拓展训练 最常用的界面开发模式通常是先设计一个窗体(JFrame),然后在窗体的内容窗格中加载面板(JPanel),而面板中则存放了若干个组件,下面来看一个普通计算器的界面设计

22 本任务的实现包括5个源文件:AEIMFrame.java、Login.java和LoginPanel.java。
5.1.4 实现机制 1 系统登录界面设计任务程序结构 本任务的实现包括5个源文件:AEIMFrame.java、Login.java和LoginPanel.java。 它们在Eclipse的包(package)视图中的位置如图5-11所示。

23 5.1.4 实现机制 2 系统登录界面任务程序剖析 系统登录界面 任务程序 代码分析 1. AEIMFrame.java
5.1.4 实现机制 2 系统登录界面任务程序剖析 1. AEIMFrame.java 系统登录界面 任务程序 代码分析 2. LoginPanel.java 3. Login.java

24 5.2 任务 2 员工考核输入界面设计 目标效果 1 必备知识 2 拓展训练 3 实现机制 4

25 本任务的目标是为公司员工提高一个年终进行绩效自评功能的界面。
5.2.1 目标效果 本任务的目标是为公司员工提高一个年终进行绩效自评功能的界面。 该任务的执行首先进入系统主窗口的员工业绩考核Tab页,然后再点击员工考核输入按钮,如图5-12所示。

26 进入考核输入页面,考核内容包括两部分,第一部分为员工工作效率,如图5-13所示
5.2.1 目标效果 进入考核输入页面,考核内容包括两部分,第一部分为员工工作效率,如图5-13所示

27 考核的第二部分是关于员工的勤务态度,如图5-14所示:
5.2.1 目标效果 考核的第二部分是关于员工的勤务态度,如图5-14所示:

28 5.2.1 目标效果 员工考核输入界面的实现涉及多项考核要素,其布局的过程应考虑以下细节: 1 2 3 4
目标效果 员工考核输入界面的实现涉及多项考核要素,其布局的过程应考虑以下细节: 1 2 3 4 当对员工的考核内容较多,且涉及几个方面的时候,如何合理、有效地组 织这些内容? 如何选择恰当的组件来表现具体的考核要素? 如何保证员工完整且只有效提交一次年度考核自评信息? 如何让具体的组件对用户特定的操作作出正确的响应?

29 5.2.2 必备知识 2. Swing常用组件 1. Swing组件基础 4. 常用组件 的事件处理 处理机制 必备知识 6.事件适配器
3. Java事件 处理机制 必备知识 6.事件适配器 5. 鼠标和 键盘事件 7.内部类和匿名类

30 5.2.2 必备知识 1 Swing组件基础 JPanel、JScrollPane、JSplitPane、JToolBar
JFrame、JApplet、JDialog、JWindow 中间容器 起特殊作用的中间层,如JInternalFrame 特殊容器 顶层容器 Swing 组件分类 基本控件 实现人际交互的组件,如JButton、 JComboBox、 JList、 JMenu、 JSlider、 JTextField 可编辑信息 的显示 不可编辑信息 的显示 向用户显示能被编辑的格式化信息的组件,如JColorChooser、 JFileChoose、JFileChooser、JTable、JTextArea 向用户显示不可编辑信息的组件,如JLabel、 JProgressBar

31 把Swing组件放入一个顶层Swing容器的内容面板上。 避免使用非Swing的重量级组件。
如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法。

32 7. 单选框类(JRadioButton)和按钮组类(ButtonGroup)
5.2.2 必备知识 2 Swing常用组件 1. 按钮类(JButton) 2. 标签类(JLabel) 3. 单行文本框类(JTextField) 4. 文本域类(JTextArea) 5. 选择框类(JComboBox) 6.复选框类(JCheckBox) 7. 单选框类(JRadioButton)和按钮组类(ButtonGroup) 8. 列表框类(JList) 9. 标签窗格类(JTabbedPane)

33 Swing中提供 JButton 类来创建一个按钮,并且可以带标签或图象,效果如图5-18所示。

34 5.2.2 必备知识 2 Swing常用组件 2. 标签类(JLabel)
标签(JLabel)是最简单的GUI组件之一,它所显示的是静态文本,可以起到信息说明的作用。程序可以改变文本,但用户不能改变,其效果如图5-19所示:

35 是一个提供单行文本编辑的组件,它用来获取用户输入或者显示可编辑的程序输出, 是一个可以显示纯文本的多行区域,其效果如图5-20所示
5.2.2 必备知识 2 Swing常用组件 3. 单行文本框类(JTextField) 4. 文本域类(JTextArea) 是一个提供单行文本编辑的组件,它用来获取用户输入或者显示可编辑的程序输出, 是一个可以显示纯文本的多行区域,其效果如图5-20所示 文本域 单行文本框

36 允许用户在若干条目中选择其中的一项,可编辑每项的内容,而且每项的内容可以是任意类,而不再局限于String,选择框的效果如图5-21所示
5.2.2 必备知识 2 Swing常用组件 5. 选择框类(JComboBox) 允许用户在若干条目中选择其中的一项,可编辑每项的内容,而且每项的内容可以是任意类,而不再局限于String,选择框的效果如图5-21所示

37 允许用户在一组候选条目中选中若干项,用钩表示当前项选中,复选框的效果如图5-22所示
5.2.2 必备知识 2 Swing常用组件 6.复选框类(JCheckBox) 允许用户在一组候选条目中选中若干项,用钩表示当前项选中,复选框的效果如图5-22所示

38 7. 单选框类(JRadioButton)和按钮组类(ButtonGroup)
5.2.2 必备知识 2 Swing常用组件 7. 单选框类(JRadioButton)和按钮组类(ButtonGroup) 单选框(JRadioButton)允许用户在一组候选条目中只能选中若干项,这一效果需和按钮组(ButtonGroup)类合用,用黑圆点表示当前项选中,单选框的效果如图5-23所示

39 用于显示对象列表并且允许用户选择一个或多个条目,里面的条目可以由任意类型对象构成,其效果如图5-24所示
5.2.2 必备知识 2 Swing常用组件 8. 列表框类(JList) 用于显示对象列表并且允许用户选择一个或多个条目,里面的条目可以由任意类型对象构成,其效果如图5-24所示 滚 动 窗 格 列 表 框

40 允许用户通过单击具有给定标题的选项卡,在一组组件之间进行切换,其效果如图5-25所示
5.2.2 必备知识 2 Swing常用组件 9. 标签窗格类(JTabbedPane) 允许用户通过单击具有给定标题的选项卡,在一组组件之间进行切换,其效果如图5-25所示

41 事件服务方法Event service method
5.2.2 必备知识 3 Java事件处理机制 Java在组件事件的应对策略上,采用了一种名为“事件授权模型”的处理机制,以支持GUI 程序与用户的实时交互。 与组件事件处理相关的四个要素为: 事件处理器 Event handler 即一个对象,它能捕获发生在某一组件上的特定事件并作出相应的处理,也称为事件监听器 事件服务方法Event service method 即一个方法,它可以处理由事件处理器所 捕获到的一个特定事件 事件 Event 即一个对象,它描述了针对某一组件发生什么了事情。如在一个“按 钮”上单击了一下,这个“单击”动作就是一个针对按钮的事件 事件源 Event source 发生事件的组件对象,如上述的按钮

42 典型的事件处理过程如图5-26所示: 5.2.2 必备知识 3 Java事件处理机制 事件源(组件) 事件处理器 (事件监听器) 外部作用
事 件 对 象 1.注册事件监听器 2.系统生成事件 3.事件对象传入事件处理器 事件服务方法 4.事件处理器调用 相应服务方法

43 在Java中具体的组件(事件源)关联着特定的事件类型,而特定的事件必须由相应的事件监听器类(一般实现于指定的事件监听接口)来侦听。
5.2.2 必备知识 4 常用组件的事件处理 在Java中具体的组件(事件源)关联着特定的事件类型,而特定的事件必须由相应的事件监听器类(一般实现于指定的事件监听接口)来侦听。 Swing的事件处理机制继续沿用AWT的事件授权模型,其基本的事件处理需要使用java.awt.event包中的类。 Swing也增加了一些新的事件及其监听接口,相应的类位于javax.swing.even包中 。

44 1. 鼠标事件处理(1)MouseEvent 事件
5.2.2 必备知识 5 鼠标和键盘事件 1. 鼠标事件处理(1)MouseEvent 事件 描述组件中发生鼠标动作的事件 MouseEvent类的主要方法 int getX():返回事件相对于源组件的水平 x 坐标 int getXOnScreen():返回事件的绝对水平 x 坐标 int getY():返回事件相对于源组件的垂直 y 坐标 int getYOnScreen():返回事件的绝对垂直 y 坐标

45 1. 鼠标事件处理(2)MouseListener 接口
5.2.2 必备知识 5 鼠标和键盘事件 1. 鼠标事件处理(2)MouseListener 接口 MouseListener接口的主要方法 mouseClicked(MouseEvent e): 当在一个组件上单击鼠标时该方法被触发 mousePressed(MouseEvent e): 当在一个组件上按下鼠标按钮时该方法被触发 mouseReleased(MouseEvent e): 当在一个组件上释放鼠标按钮时该方法被触发 mouseEntered(MouseEvent e): 当鼠标指针进入到组件时该方法被触发 mouseExited(MouseEvent e): 当鼠标指针退出组件时该方法被触发 监听发生在—个GUI组件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出

46 1. 鼠标事件处理(3)MouseMotionListener 接口
5.2.2 必备知识 5 鼠标和键盘事件 1. 鼠标事件处理(3)MouseMotionListener 接口 MouseMotionListener接口的主要方法 mouseDragged(MouseEvent e): 当在一个组件上按下鼠标按钮并且拖动鼠标时方法被 触发。鼠标拖动事件持续到鼠标按钮被释放时为止, 而不管鼠标的位置是否超出了原来组件的边界。 监听发生在—个GUI组件上的鼠标移动事件,包括鼠标的移动及其拖动 mouseMoved(MouseEvent e): 当鼠标指针移动时该方法被调用,注意此时鼠标的 按钮并没有被按下。

47 实例:实现的效果是当鼠标在一个文本框内部某处点击一下时,该文本框的就显示鼠标点击时的位置坐标信息
5.2.2 必备知识 5 鼠标和键盘事件 首先,为鼠标事件定义一个事件监听器类,该类实现于MouseListener接口,如MouseActionListener: class MouseActionListener implements MouseListener { //自定义的鼠标事件监听器类实现于MouseListener接口 public void mouseClicked (MouseEvent e) {//该方法监听鼠标键按下的动作 if(e.getSource()==text) //如果事件源是text文本框的话 { text.setText("在文本框上鼠标按下,位置:" +"("+e.getX()+","+e.getY()+")"); } 实例:实现的效果是当鼠标在一个文本框内部某处点击一下时,该文本框的就显示鼠标点击时的位置坐标信息

48 5.2.2 必备知识 5 鼠标和键盘事件 然后,创建一个该事件监听器类的对象myMouseActionListener,并把它加载到一个文本框组件上 : MouseActionListener myMouseActionListener = new MouseActionListener (); JTextField text= new JTextField(); text.addMouseListener(myMouseActionListener); //利用文本框组件的addMouseListener()方法 //加载一个鼠标监听器类对象

49 5.2.2 必备知识 5 鼠标和键盘事件 KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed) 2. 键盘事件处理 KeyListener接口的主要方法 public void keyTyped (KeyEvent e): 当键盘的一个键被按下并释放后该方法被触发 public void keyPressed (KeyEvent e): 当键盘的一个键被按下后该方法被触发 public void keyReleased(KeyEvent): 当键盘的一个键被释放后该方法被触发

50 public int getKeyCode(): public static String getKeyText(int keyCode):
5.2.2 必备知识 5 鼠标和键盘事件 KeyEvent事件用于描述键盘事件的相关信息 2. 键盘事件处理 KeyEvent类的主要方法 public int getKeyCode(): 返回与此事件中的键关联的整数键码 public static String getKeyText(int keyCode): 返回描述 keyCode 的 String

51 实例:实现的效果是当用户按下了键盘上的“左”或者“右”方向键时,文本框中显示 用户按下的键名称的信息
5.2.2 必备知识 5 鼠标和键盘事件 class KeyActionListener implements KeyListener { //自定义的键盘事件监听器类实现于KeyListener接口 public void keyPressed (KeyEvent e) {//该方法监听键盘按键按下的动作 if(e.getKeyCode()==KeyEvent.VK_LEFT) {//如果按下了左方向键 text.setText("你按下了 左方向键 !"); } if(e.getKeyCode()==KeyEvent.VK_RIGHT) {//如果按下右方向键 text.setText("你按下了 右方向键 !"); public void keyReleased (KeyEvent e) { //与本事件无关的方法也必须实现,但可不写语句} 。。。 首先,为键盘事件定义一个事件监听器类,该类实现于KeyListener接口,如KeyActionListener : 实例:实现的效果是当用户按下了键盘上的“左”或者“右”方向键时,文本框中显示 用户按下的键名称的信息

52 5.2.2 必备知识 5 鼠标和键盘事件 然后,创建一个该事件监听器类的对象myKeyActionListener,并把它注册到一个文本框组件上 : KeyActionListener myKeyActionListener = new KeyActionListener(); JTextField text= new JTextField(); text.addKeyListener(myKeyActionListener); //利用文本框组件的addKeyListener()方法 //加载一个键盘监听器类对象

53 事件适配器(EventAdapter),即一个实现了事件监听接口的类,但它在实现中未写入任何代码。
5.2.2 必备知识 6 事件适配器 事件适配器(EventAdapter),即一个实现了事件监听接口的类,但它在实现中未写入任何代码。 事件适配器应用的目的就是避免让程序员去实现接口中的每一个抽象方法,而只需要实现自己所需要的方法。

54 5.2.2 必备知识 7 内部类和匿名类 内部类 被定义于某一个类内部的类 inner class 匿名类
5.2.2 必备知识 7 内部类和匿名类 内部类 inner class 被定义于某一个类内部的类 匿名类 anonymous class 定义于某一个方法内部,且没有名称的类

55 5.2.3 拓展训练 本任务相关的知识点较多,首先应该掌握的是基本组件(如按钮、文本框等)的创建、布局和事件处理。让我们通过下面的例子来了解如何综合运用这些组件 :

56 5.2.4 实现机制 1员工考核输入界面设计任务程序结构
5.2.4 实现机制 1员工考核输入界面设计任务程序结构 本任务的实现包括2个源文件:AEIMFrame.java和EmployeeEvaluationInput.java。 它们在Eclipse的包视图中的位置如图5-29所示: 本任务的实现包括2个源文件:AEIMFrame.java和EmployeeEvaluationInput.java。 它们在Eclipse的包视图中的位置如图5-29所示:

57 5.2.4 实现机制 2 员工考核输入界面设计任务程序剖析
5.2.4 实现机制 2 员工考核输入界面设计任务程序剖析 员工考核输入 界面设计任务程序 代码分析 1. EmployeeEvaluationInput.java

58 5.3 任务 3 员工考核查询界面设计 目标效果 1 必备知识 2 拓展训练 3 实现机制 4

59 本任务的目标是允许特定角色用户(如系统管理员等)查询全公司、某个部门或某一员工的考核信息。
5.3.1 目标效果 本任务的目标是允许特定角色用户(如系统管理员等)查询全公司、某个部门或某一员工的考核信息。 如我们查询制作部所有员工的考核信息,其执行的效果如图5-30所示:

60 若查询公司所有员工的考核信息,并以升序排列的方式显示,其效果如图5-31所示:
5.3.1 目标效果 若查询公司所有员工的考核信息,并以升序排列的方式显示,其效果如图5-31所示:

61 5.3.1 目标效果 若用户需要保存查询的结果,则可点击“信息导出”按钮,在弹出的文件保存对话框中系统允许用户将查询结果保存为文本文件(*.txt),如图5-32所示:

62 5.3.1 目标效果 本任务主要实现了对员工考核信息的查询及查询结果的显示和保存功能,如何达到目的,需要思考以下的几个问题 : 1 2 3
目标效果 本任务主要实现了对员工考核信息的查询及查询结果的显示和保存功能,如何达到目的,需要思考以下的几个问题 : 1 2 3 4 若要将查询结果保存在指定的目录下,则该如何为用户提供这样的机会呢? 若查询的结果数据较多,难以在限定的界面内被完全显示,则该如何处理? 以什么形式才能较好地展现查询得到的数据结果? 如何将查询得到的数据保存为文本文件呢?

63 5.3.2 必备知识 滚动窗格 2 1 3 表格处理 文件选择框 必备知识 5 4 基本输入输出流 文件处理

64 属于Swing组件,用来显示和编辑常规的二维单元表数据,其效果如图5-33所示
5.3.2 必备知识 1 表格处理 表格类(JTable) 属于Swing组件,用来显示和编辑常规的二维单元表数据,其效果如图5-33所示 滚 动 窗 格

65 允许用户在滚动条内移动滑块以确定显示区域中的内容,其效果如上图5-33所示
5.3.2 必备知识 2 滚动窗格 滚动窗格类(JScrollPane) 允许用户在滚动条内移动滑块以确定显示区域中的内容,其效果如上图5-33所示 滚 动 窗 格

66 5.3.2 必备知识 2 滚动窗格 嵌入JTable的JScrollPane的典型应用如下:
5.3.2 必备知识 2 滚动窗格 嵌入JTable的JScrollPane的典型应用如下: Object[][] data={ {"章敬 ", "23 ","国际贸易"}, {"许果 ", "22 ","软件技术"} }; String columnNames={"姓名","年龄","专业"}; JTable table = new JTable(data, columnNames); JScrollPane spResult=new JScrollPane(); spResult.setViewportView(table); JPanel panel=new JPanel(); panel.add(spResult);

67 5.3.2 必备知识 3 文件选择框 文件选择框(JFileChooser)
5.3.2 必备知识 3 文件选择框 文件选择框(JFileChooser) 功能为让用户打开或者保存指定名字的文件,它内建有“打开”和“存储”两种对话框。 JFileChooser的典型应用如下: JFileChooser file = new JFileChooser(); int result = file.showOpenDialog(new JPanel()); if (result ==file.APPROVE_OPTION) { String fileName = file.getSelectedFile().getName(); String dir = file.getCurrentDirectory().toString(); }

68 5.3.2 必备知识 4 基本输入输出流 流(Stream) 的概念 字节流 字符流 I/O流的 典型应用

69 当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。
1. 流(Stream) 的概念 5.3.2 必备知识 4 基本输入输出流 Java把不同类型的输入、输出源抽象为 流(Stream) 当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。 当程序需要写入数据的时候,就会开启一个通向目的地的流。 Java中与流相关的类基本都定义在java.io包中

70 InputStream类,所有字节流输入类的 抽象父类,该抽象类及其子类的的体系结 构如图5-35所示:
2. 字节流 5.3.2 必备知识 4 基本输入输出流 InputStream类,所有字节流输入类的 抽象父类,该抽象类及其子类的的体系结 构如图5-35所示:

71 5.3.2 必备知识 4 基本输入输出流 Reader类,所有字符流读取类的抽象 父类,该抽象类及其子类的的体系结构 如图5-37所示:
5.3.2 必备知识 4 基本输入输出流 Reader类,所有字符流读取类的抽象 父类,该抽象类及其子类的的体系结构 如图5-37所示:

72 OutputStream类,所有字节流输出类 的抽象父类,该抽象类及其子类的的体系 结构如图5-36所示
2. 字节流 5.3.2 必备知识 4 基本输入输出流 OutputStream类,所有字节流输出类 的抽象父类,该抽象类及其子类的的体系 结构如图5-36所示

73 Writer类,所有字符流写入类的抽象 父类,该抽象类及其子类的体系结构如图 5-38所示 5.3.2 必备知识 4 基本输入输出流 3.
5.3.2 必备知识 4 基本输入输出流 Writer类,所有字符流写入类的抽象 父类,该抽象类及其子类的体系结构如图 5-38所示

74 5.3.2 必备知识 4 基本输入输出流 I/O流的一个最基本的应用是从键盘得 到一个数,其主要的实现步骤如下: 4. I/O流的 典型应用
5.3.2 必备知识 4 基本输入输出流 I/O流的一个最基本的应用是从键盘得 到一个数,其主要的实现步骤如下: String strIn = " "; int a; InputStreamReader in = new InputStreamReader(System.in); //定义一个输入流设备对象 in BufferedReader buffIn = new BufferedReader(in); //定义一个缓冲字符读取设备对象 buffIn System.out.print("Please enter one integer:\n"); try { strIn = buffIn.readLine();//从键盘读入一行字符串数据 a=Integer.parseInt(strIn); //把读入的字符串转换成整型 } catch (IOException e) { System.out.println(e.toString()); }

75 文件类(File类)类是java.io包中唯一代表磁盘文件本身信息的类,但不涉及文件的具体内容。
5.3.2 必备知识 5 文件处理 1. File类 文件类(File类)类是java.io包中唯一代表磁盘文件本身信息的类,但不涉及文件的具体内容。 File类定义了一些方法可以用来创建、删除文件,重命名文件,判断文件的读写权限,判断文件是否存在,设置和查询文件的最近修改时间等。

76 5.3.2 必备知识 5 文件处理 2. RandomAccessFile 类 随机访问文件则允许对文件内容进行随机读/写。在java.io中, RandomAccessFile类提供了随机访问文件的方法用于控制对文件具体内容的读写操作。

77 5.3.3 拓展训练 在Java的GUI设计中,Swing较之ATW提供了更为丰富的组件,这些新的组件往往具有更好的数据展现性能,如JTable等,此外如何有效进行数据的I/O操作也是GUI设计中一个重要部分,不妨让我们看看下面程序是如何实现的

78 5.3.4 实现机制 1 员工考核查询界面设计任务程序结构
5.3.4 实现机制 1 员工考核查询界面设计任务程序结构 本任务的实现包括2个源文件:AEIMFrame.java和EmployeeEvaluationInquiry.java。 它们在Eclipse的包(package)视图中的位置如图5-41所示:

79 5.3.4 实现机制 2 员工考核查询界面设计任务程序剖析
5.3.4 实现机制 2 员工考核查询界面设计任务程序剖析 员工考核查询 界面设计任务程序 代码分析 1. EmployeeEvaluationInquiry.java

80 5.4 任务 4 系统帮助界面设计 目标效果 1 必备知识 2 拓展训练 3 实现机制 4

81 本任务的目标是为本系统的用户提供使用帮助。
5.4.1 目标效果 本任务的目标是为本系统的用户提供使用帮助。 当用户点击系统主界面中的系统帮助页时,将出现系统帮助的窗体界面,其中包括菜单和工具栏,效果如图5-42所示:

82 当点击“系统帮助”和“关于AEIM”菜单时将出现各个菜单,如图5-43所示:
5.4.1 目标效果 当点击“系统帮助”和“关于AEIM”菜单时将出现各个菜单,如图5-43所示:

83 版本信息显示及弹出式菜单的效果如上图5-44所示。
5.4.1 目标效果 版本信息显示及弹出式菜单的效果如上图5-44所示。

84 目标效果 系统帮助窗体中包含的设计元素较简单,主要涉及主菜单、工具栏和弹出式菜单,但在学习任务的具体实现过程前,有必要先思考以下问题 : 1 2 3 如何有效地把界面中的各类相关命令以菜单的形式组织在一起? 对于最常用的命令,有何方式比菜单形式更方便地去调用它? 如何在程序中打开一个完整的帮助文件(CHM格式)?

85 5.4.2 必备知识 1 创建主菜单和弹出菜单 必备知识 创建和使用工具栏

86 1.菜单栏(JMenuBar)类、菜单类(JMenu)和 菜单项类(JMenuItem)
5.4.2 必备知识 1 创建主菜单和弹出菜单 1.菜单栏(JMenuBar)类、菜单类(JMenu)和 菜单项类(JMenuItem) JMenu Test 菜单相关类的典型应用为: JFrame frame=new JFrame("MenuSample Example"); //定义一个窗体 JMenuBar menuBar = new JMenuBar(); //定义一个菜单栏   JMenu fileMenu = new JMenu("File");   //定义一个菜单 menuBar.add(fileMenu);   //把一个菜单加载到菜单栏里 JMenuItem newMenuItem=new JMenuItem("New",‘N’); //定义一个菜单项 fileMenu.add(newMenuItem);   //把菜单项加载到一个菜单中 frame.setJMenuBar(menuBar);   //把菜单栏加载到窗体中

87 2.弹出菜单类(JPopMenu) 5.4.2 必备知识 1 创建主菜单和弹出菜单 弹出菜单类的典型应用为:
5.4.2 必备知识 1 创建主菜单和弹出菜单 2.弹出菜单类(JPopMenu) 弹出菜单类的典型应用为: JPopupMenu popMenu =new JPopupMenu(); //实例化弹出菜单 popMenu.add( new JMenuItem("save")); //向弹出菜单里加载菜单项 popMenu.addSeparator(); //向弹出菜单里添加分割条 popMenu.add( new JMenuItem("exit"));

88 1.工具栏类(JToolBar) 5.4.2 必备知识 2 创建和使用工具栏 工具栏类的典型应用为:
5.4.2 必备知识 2 创建和使用工具栏 1.工具栏类(JToolBar) 工具栏类的典型应用为: JButton b1=new JButton(new ImageIcon("/1.gif")); //定义带图标按钮 b1.setToolTipText("the first button in toolbar!"); //设置按钮提示 JToolBar toolBar=new JToolBar(); //定义工具栏 toolBar.setOpaque(true); //设置工具栏上的按钮都为不透明的显示 toolBar.add(bPrint);//把按钮加载到工具栏上

89 5.4.3 拓展训练 在Java的GUI设计中,Swing较之ATW提供了更为丰富的组件,这些新的组件往往具有更好的数据展现性能,如JTable等,此外如何有效进行数据的I/O操作也是GUI设计中一个重要部分,不妨让我们看看下面程序是如何实现的

90 本任务的实现包括3个源文件:AEIMFrame.java、HelpPanel.java和SystemHelper.java。
5.4.4 实现机制 1 系统帮助界面设计任务程序结构 本任务的实现包括3个源文件:AEIMFrame.java、HelpPanel.java和SystemHelper.java。 它们在Eclipse的包(package)视图中的位置如图5-49所示:

91 5.4.4 实现机制 2 系统帮助界面设计任务程序剖析 系统帮助界面 设计任务程序 代码分析 1. HelpPanel.java
5.4.4 实现机制 2 系统帮助界面设计任务程序剖析 1. HelpPanel.java 系统帮助界面 设计任务程序 代码分析 2. SystemHelper.java

92 5.5 任务 5 系统主界面设计 目标效果 1 必备知识 2 拓展训练 3 实现机制 4

93 本任务的目标是实现系统的主界面 。 系统的菜单菜单内容如表5-5所示: 5.5.1 目标效果 系统主菜单 对 应 的 功 能 列 表
员工基本信息管理 添加新员工、查询员工信息、查询部门信息、员工信息修改 员工业绩考核 员工考核输入、员工考核查询 员工交流 员工留言板、员工服务 企业文化 休闲涂鸦、视频新闻、创意图文、资源下载 系统管理 更改用户密码、系统帮助

94 该任务的实现主要涉及窗体的界面元素组配和合理布局,任务执行的目标效果如图5-50所示:
5.5.1 目标效果 该任务的实现主要涉及窗体的界面元素组配和合理布局,任务执行的目标效果如图5-50所示:

95 5.5.1 目标效果 系统主界面设计任务的实现和以下几个问题紧密相关,请大家先认真思考 : 1 2 3 4
目标效果 系统主界面设计任务的实现和以下几个问题紧密相关,请大家先认真思考 : 1 2 3 4 如何合理地布局窗体元素(如窗体图标、标题和背景等)? 如何在内容和形式上合理地表现系统的功能命令? 如何在规划窗体,使得内部可以显示多个子窗体? 如何显示当前系统及用户的一些基本信息?

96 5.5.2 必备知识 1 系统基本元素设置 3 系统状态栏设计 必备知识 4 系统界面风格设计 2 多文档界面设计

97 通常对于一个系统来说,它都会有一个标志性的图标,它的设置很简单,有两个步骤:
5.5.2 必备知识 1 系统基本元素设置 通常对于一个系统来说,它都会有一个标志性的图标,它的设置很简单,有两个步骤: 1)获取主窗体(JFrame)界面的图标文件, 其基本代码为: Toolkit tk = Toolkit.getDefaultToolkit(); Image image = tk.createImage("src/aem/lzw/systemIcon.gif"); /* systemIcon.gif是图标文件 */ 2)为主窗体设置图标和标题 其基本代码为: JFrmae frame = new JFrame(“学生成绩管理系统”) ; //设置窗体标题 frame.setIconImage(image);//设置窗体图标

98 5.5.2 必备知识 2 多文档界面设计 1. 桌面窗格类(JDesktopPane)
5.5.2 必备知识 2 多文档界面设计 1. 桌面窗格类(JDesktopPane) 是用于创建多文档界面或虚拟桌面的容器。桌面窗格的主要目的是为了添加内部框架(即内部窗体)。 Sample JDesktopPane JInternalFrames

99 2. 内部框架类(JInternalFrame)
5.5.2 必备知识 2 多文档界面设计 2. 内部框架类(JInternalFrame) JInternalFrame必须依附于一个更上层的组件,通常为桌面窗格(JDesktopPane),JInternalFrame类常应用于主界面中的内部窗体 桌面窗格里显示内部框架(内部窗体)的典型应用如下: JDesktopPane desktop = new JDesktopPane(); JInternalFrame internal = new JInternalFrame(“MYFrame”, true, true, true, true);//创建一 //个带标题、可变大小、可关闭、可最大化且带图标的内部框架 internal.setSize(180,180); internal.setVisible(true); desktop.add(internal); //把内部框架internal加载到桌面窗格里面

100 5.5.2 必备知识 3 系统状态栏设计 Java中对于窗体状态栏的实现完全可以通过工具栏组件(JToolbar),再在工具栏上添加几个标签来实现,形式上只要把工具栏放置在窗体的底部(南端)。 JLabel labelStatus=new JLabel("这是状态栏!"); JToolBar toolBar=new JToolBar(); toolBar.setBackground(new Color(45,45,60)); toolBar.setOpaque(true); toolBar.add(labelUser); frame.getContentPane().add(toolBar,BorderLayout.SOUTH); //把工具栏加载到内容窗格的底部,即为系统的状态栏

101 5.5.2 必备知识 4 系统界面风格设计 Java Look & Feel Motif Look & Feel
5.5.2 必备知识 4 系统界面风格设计 Java Look & Feel 1 2 Motif Look & Feel 3 Windows style Look & Feel

102 5.5.2 必备知识 4 系统界面风格设计 UIManager设置用户界面风格的典型应用如下: try {
5.5.2 必备知识 4 系统界面风格设计 UIManager设置用户界面风格的典型应用如下: try { UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName()); //系统界面风格设置成当前操作系统风格 //setLookAndFeel()方法用于设置系统外观的属性 //参数是字符串型。 } catch (Exception e) { e.printStackTrace(); }

103 5.5.3 拓展训练 在系统的GUI设计中,通常每一个窗体界面都有特定的标题元素、界面背景,有必要的话则可加载状态栏,典型的应用如下

104 任务的实现主要依赖于1个源文件:AEIMFrame.java。 它在Eclipse的包(package)视图中的位置如图5-54所示:
5.5.4 实现机制 1 系统主界面设计任务任务程序结构 任务的实现主要依赖于1个源文件:AEIMFrame.java。 它在Eclipse的包(package)视图中的位置如图5-54所示:

105 5.5.4 实现机制 2 系统主界面设计任务程序剖析 系统主界面 设计任务程序 代码分析 1. AEIMFrame.java

106 项目实训 1.实训目标 1.掌握图形用户界面的元素:窗口、按钮、文本框、 选择框、滚动条等基本组件的使用方法。
项目实训 1.实训目标 1.掌握图形用户界面的元素:窗口、按钮、文本框、 选择框、滚动条等基本组件的使用方法。 2.了解Java布局管理器的类型,掌握如何利用布局 管理器对组件进行布局管理。 3.掌握编写独立运行的窗口界面的方法。 4.掌握多文档窗口界面的编程方法。

107 项目实训 2. 编程要求 用Eclipse编写Java程序代码,实现应用程序指定的功能,程序代码格式整齐规范、便于阅读,程序注释规范、简明易懂。

108 项目实训 3. 实训内容 1)采用Swing组件编程实现如下界面: 要求用户可以在文本框中输入一个十进制的整数,然后
项目实训 3. 实训内容 1)采用Swing组件编程实现如下界面: 要求用户可以在文本框中输入一个十进制的整数,然后 可以点击界面底部的进制转换,在复选框一行中,用户 应可同时选中多项进制转换,而在单行框一行则只允许 用户选则其中一种进制。所有类型进制的选则都会被响 应,即即时地显示进制选择内容于界面右上部的列表框 中,若显示内容超出范围,则列表框右侧显示滚动条。

109 项目实训 3. 实训内容 2)【学生信息管理系统】:首先为系统创建登录界面,允许 学生输入自己的帐号和密码。然后,为系统创建主界面,且
项目实训 3. 实训内容 2)【学生信息管理系统】:首先为系统创建登录界面,允许 学生输入自己的帐号和密码。然后,为系统创建主界面,且 设计为多文档界面,创建系统的主菜单,两种方式可选择: ① 传统菜单方式; ② 标签窗格+菜单按钮。系统菜单应包含:学生基本信息 管理、学生成绩信息管理、学生交流、校园文化、系统管 理等主菜单,读者也可自己展开系统需求分析并自行设定 主菜单。并为系统创建状态栏。

110 Thank You !


Download ppt "项目5 系统GUI设计."

Similar presentations


Ads by Google