610 likes | 866 Views
第 11 章 学习目的、知识点、基本要求. 学习目的: 学习图形编程知识,主要学习图形用户界面中常用的组件;窗口的显示、文字和图像的显示、事件处理等。 基本知识点: * 图形用户界面设计的主要工作; * 图形用户界面事件处理技术; * 容器与 5 种布局的使用; * 常用组件的学习; * 窗口、菜单、对话框等实用设计技术。. 第 11 章 学习目的、知识点、基本要求. 基本要求: * 掌握图形用户界面设计的主要工作; * 理解图形用户界面事件处理方法; * 掌握容器与布局的使用; * 熟练掌握常用组件;
E N D
第11章 学习目的、知识点、基本要求 学习目的: 学习图形编程知识,主要学习图形用户界面中常用的组件;窗口的显示、文字和图像的显示、事件处理等。 基本知识点: * 图形用户界面设计的主要工作; * 图形用户界面事件处理技术; * 容器与5种布局的使用; * 常用组件的学习; * 窗口、菜单、对话框等实用设计技术。
第11章 学习目的、知识点、基本要求 基本要求: * 掌握图形用户界面设计的主要工作; * 理解图形用户界面事件处理方法; * 掌握容器与布局的使用; * 熟练掌握常用组件; * 学会窗口、菜单、对话框等实用设计技术。
第11章GUI设计与实现 11.1 GUI程序概述 11.2 事件处理 11.3 容器与布局 11.4 几个常用的组件 11.5 窗口、菜单和对话框实例 11.6 Swing简介
11.1 图形用户界面设计概述 • 什么是GUI—Graphics User Interface • 生成GUI的类库— java.awt包和javax.swing包 • GUI设计主要工作: 创建组件、布局管理、事件处理 组件:构成图形用户界面的最小元素。 布局管理:是对图形用户界面中容器内的所有组件进行位置和大小的设计。 事件处理:
GUI支持包 • java.awt包 包含和提供大量进行GUI设计所使用的了和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,它是程序设计的基础。 • javax.swing包 提供了从按钮到可拆分面板和表格的所有组件。它是第二代GUI设计工具包,它以AWT为基础且新增和改进了一些组件。
11.2 事件处理 11.2.1 事件与事件处理方法 在Java中,程序和用户的交互是通过响应各种事件来实现的。 每当一个事件发生,Java虚拟机就会将事件的消息传送给的消息传送给程序(针对各种事件作出反应所编写的一个或者是多个事件处理方法),有程序中的事件处理方法对事件进行处理。 Java通过委托事件处理机制解决如何对事件作出响应。
11.2.2 Java的事件处理机制1 • GUI中事件和事件响应的基本原理 (1)识别(注册)操作功能; (2)响应操作功能。 • Java中将一系列操作事件定义成不同处理代码。 • Java的事件处理机制 (1)事件源—每个可能产生事件的组件称为事件源; (2)监听者—在事件源上发表的事件必须注册给处理 该 事件源上那种类型事件的容器或对象。它应该 具有 监听和处理该事件的功能。
11.2.2 Java的事件处理机制2 事件源——能产生事件的组件叫事件源。 监听器——用来注册不同类型事件的监听者。 委托事件处理机制: 事件源注册 + 对发生事件的处理。 注册方法: 通过事件源本身的相关方法以监听者对象为实际参数来实现。 处理方法: 当事件上发生监听者可以处理的事件时,事件源把这个事件的对象作为实际参数传递给监听者中负责处理这类事件的方法,该方法被系统调用执行后(实现接口方法),事件就得到了处理。
11.2.2 Java的事件处理机制3 几点说明: (1)所有的GUI组件都是事件源。 (2)所有监听器接口都从java.util.EventListener 接口扩充而来。 (3)多数事件类存放在: java.awt.event / javax.swing.event 包中 (4)GUI程序和GUI线程的区别: GUI程序指包含GUI的应用程序或小应用程序; GUI线程指在运行时,运行系统自动创建的、用于负责GUI绘制和事件处理的一个线程。
事件源 注册:方法(监听者对象); 触发事件 某事件 调用并传递参数 监听者 实现接口:方法(某事件作为参数) 委托事件模型:
常用的事件类 • 动作事件—java.awt.event.ActionEvent • 项目事件—java.awt.event.ItemEvent • 键盘事件—java.awt.event.KeyEvent • 焦点事件—java.awt.event.FocusEvent • 鼠标事件—java.awt.event.MouseEvent • 窗口事件—java.awt.event.WindowEvent • 列表选择事件—javax.swing.event.ListSelection • 文档事件—javax.swing.event.DocumentEvent
容器、组件 • 控制组件(component) • 控制组件是图形用户界面的最小单位 • 之一,它里面不再包含其他的成分。 • 作用是完成与用户的一次交互 • (一条命令的执行)。 • 控制组件的创建与使用: • (1)创建某控制组件类的对象,指定 • 其大小等属性; • (2)合理布局,将控制组件对象加入 • 到某个容器中的指定位置; • (3)将该组件对象注册给它所能产生 • 的事件对应的事件监听者,重载事件 • 处理方法,实现利用该组件对象与用 • 户交互的功能。 • 容器(container) • 容器是用来组织其他界面成分和元素的单元。 • 其作用是可分解图形,整理界面,层层嵌套。 • 用户定义成分 用户定义的成分只能起到装饰、美化的作用,不能影响用户的动作,也不具有交互功能。
11.3 容器与布局 Swing组件从功能上分: (原子组件+容器组件) 11.4.1 容器组件 容器组件包含: 窗口(JFrame)、对话框(JDialog)、小应用程序(JApplet)、面板(JPanel)、滚动窗格(JScrollpane)、框(Box)等。
java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame java.awt.Dialog javax.swing.JDialog java.awt.Panel java.applet.Applet javax.swing.JApplet javax.swing.JComponent javax.swing.JPanel javax.swing.JScrollPane javax.swing.Box 11.3.1 容器组件 (常用容器类的继承关系)
11.3.1 容器组件 • 顶层容器 用于组织和显示原子组件和非顶层容器。 顶层容器三种: JFrame, JDialog, JApplet • 非顶层容器 用于更好地管理和布置组件。 常用非顶层组件: JPanel, JScrollPane, Box
11.3.2布局管理器 (1)BorderLayout:例题11-3 按东西南北中指定区域进行布局(默认为中) (2)FlowLayout:例题11-2 按顺序从左向右排列布局(Applet默认为此) (3)CardLayout: 卡片叠放布局(每次只有一个组件占全容器进行显示) (4)GridLayout:例题11-4 按行列的网格形式,从左向右、从上向下进行布局 (5)BoxLayout:例题11-5 水平或垂直的方式布局 * Box容器必须使用BoxLaout布局方式。 (6)XYLayout:坐标布局
javax.swing.JComponent javax.swing.JLabel javax.swing.AbstractButton javax.swing.JButton javax.swing.JToggleButton javax.swing.JCheckBox javax.swing.JRadioButton javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JTextArea javax.swing.JComboBox javax.swing.JList 11.4 几个常用的原子组件 (常用原子组件类的继承关系)
11.4.1 标签__JLabel 标签是用于显示一行文本、一个图标或者两者皆有。 1 常用的构造方法: (1) JLabel( ):创建不包含文本和图标的空标签。 (2) JLabel(Icon image) :创建包含指定图标的标签。 (3) JLabel(String text) :创建包含指定文本的标签。 (4) JLabel(Icon image,int horizontalAlinment) 创建指定图标与水平对齐方式的标签。 (5) JLabel(String text,int horizontalAlinment) 创建指定文本与水平对齐方式的标签。 (6)JLabel(String text,Icon icon,int horizontalAlinment) 创建标签同时指定文本、图标与水平对齐方式。
11.4.1 标签 它是用于显示一行文本、一个图标或者两者皆有。 2 实例方法: (1) setText(String text) 设置标签的文本字符串。 (2) String getText( ) 返回标签的文本字符串。 (3) setIcon(Icon icon) 设置标签的图标。 (4) setDisabledIcon(Icon disabledIcon) 设置标签不可用时要显示的图标。
11.4.2 按钮__JButton 按钮是一种JButton对象,也称为命令按钮,它用于完成某个特定的功能。按钮被单击是将引发ActionEvent事件。程序代码可以为按钮创建一个合适的ActionListener型监听器,用以监听处理这种事件,从而完成按钮特定的功能。
11.4.2 按钮 创建按钮时可以指定一个文本标题或一个图标. 常用方法: (1) JBotton( ):创建按钮不包含文本标题和图标 (2) JBotton(String s):创建按钮包含文本标题 (3) JBotton(Icon icon ):创建按钮包含指定图标 (4) JBotton(String text, Icon icon) 创建按钮包含文本标题 和指定图标 (5) setText(String s):设置按钮文本标题 (6) String getText( ):返回按钮文本标题 (7) setIcon(Icon defaultIcon):设置按钮图标 (8) Icon getIcon( ):返回按钮图标 (9) addActionListener(ActionListener) 注册ActionListener型监听器
11.4.3 复选框__JCheckBox • 复选框是一种JCheckBox对象,用于让用户在两种状态中选择一种。 • 利用isSelected方法可以测试一个复选框的当前状态(true / false)。 • 复选框被单击时,其状态将改变,此时将引发ActionEvent事件和ItemEvent事件。 • 若设置自己的图标,那么未被选中时的图标和被选中的图标都需要设置。否则,不管选中与否,复选框显示的可能都是同一个图标。
11.4.3 复选框 1 常用的构造方法: (1) JCheckBox(String text):指定文本标题,默认为。 (2) JCheckBox(String text, boolean selected) 指定文本标题和默认状态。 (3) JCheckBox(Icon icon):指定图标,默认状态为。 (4) JCheckBox(Icon icon, boolean selected) 指定图标和默认状态。 (5) JCheckBox(String text, Icon icon) 同时指定文本标题和图标。
11.4.3 复选框 2 实例方法: (1) void setSelected(boolean b):设置复选框的状态。 (2) boolean isSelected( ):返回复选框的状态。 (3) void setText(String text):设置复选框的文本标题。 (4) String getText( ):返回复选框的文本标题。 (5) void setIcon(Icon defaultIcon) 设置复选框未被选中时的图标。 (6) void setSelectedIcon(Icon selectedIcon) 设置复选框被选中时的图标。 (7) void addActionListener(ActionListener l) 注册型ActionListener监听器。 (8) void addItemListener(ItemListener l) 注册型ItemListener监听器。
11.4.4 单选钮__JRadioButton / ButtonGroup • 单选钮总是成组出现,且其中只能有一个单选钮选中。 • 当选中一个新的按钮时,组中原先被选中的单选钮自动变成false状态。 • JradioButton组件之间本身并不会排他选择; • ButtonGroup组件之间具有排他选择。 • 单选钮组也会引发ActionEvent事件和ItemEvent 。程序可以为单选牛创建并注册合适的监听器监听处理、处理这类事件。
11.4.4 单选钮 JradioButton构造方法: (1) JradioButton(String text):指定文本标题,默认为false. (2) JradioButton(String text,boolean selected) 指定文本标题和默认状态。 (3) JradioButton(Icon icon):指定图标,默认为false. (4) JradioButton(Icon icon,boolean selected) 指定图标和默认状态。 (5) JradioButton(String text,Icon icon) 同时指定文本标题和图标。 ButtonGroup类方法: (1) void add(AbstractButton b):向组中添加一个按钮。 (2) void remove(AbstractButton b):从组中移去一个按钮。
11.4.5 文本域__JTextField • 文本域是一种JTextField对象,用于显示和编辑单行文本。 • 在创建文本域可以指定显示字符数。 • 文本域聚焦的情况下按Enter键,将引发Actionevent事件。 构造方法: (1) JTextField( ):初始文本为空串、列数为0。 (2) JTextField(String text):初始文本为text 、列数为0。 (3) JTextField(int columns) 初始文本为空串、列数为columns。 (4) JTextField(String text,int columns) 指定初始文本和列数。
11.4.5 文本域 常用方法: (1) void setHorizontalAlignment(int alignment) 指定文本内容在文本域显示区域内的对齐方式,左,中,右. (2) addActionListener(ActionListener l) 向文本域注册ActionListener型监听器 (3) Document getDocument( ):返回文本组件的模型对象 (4) String getText( ):返回文本组件的当前文本 (5) void setText( ):设置文本组的当前文本 接口Document描述了所有文本组件模型对象的一些共同行为方法: (1) int getLength( ):返回Document对象中文本内容的字符数。 (2) String getText(int offset,int length)throws BadLocationException 返回指定位置上的文本字符串。 (3) void addDocumentListener(DocumentListener listener) 向Document模型对象注册一个DocumentListener监听器。
11.4.6 文本区 __JTextArea • 文本区是一种JTextArea对象用于显示和编辑多行 文本。 • 创建文本区时可以指定初始文本和行、列数。 构造方法: (1) JTextArea( ): 初始文本为空串,行列数为0。 (2) JTextArea(String text ): 指定初始文本,行列数为0。 (3) JTextArea(int rows,int columns) 初始文本为空串,行列数。 (4) JTextArea(String text,int rows,int columns) 指定初始文本和行、列数。
当行的长度超过显示 区域时, 另起一行。 11.4.6 文本区 文本区可以设置行卷绕特性: (1) void setLineWrap(boolean wrap) 是否行卷绕,默认值为。 (2) void setWrapStyleWord(boolean word) 是否在字符的边界处卷绕,默认值为。 字符流数据Read/Write (1) void read(Reader in,Object desc)throws IOException 从字符流中读入数据,作为文本区要显示和编辑的内容。 (2) write(Writer out)throws IOException 将文本区的当前内容写出到字符流中。
11.4.7 组合框 __JComboBox • 组合框是一种对象,允许用户从它提供的下拉列表中选择一个项目。 • 组合框分不可编辑和可编辑两种: (1)不可编辑组合框 是由一个按钮和一个下拉列表组成。 (2)可编辑组合框 是由一个文本域和一个下拉列表组成。
11.4.7 组合框 常用方法1: (1) JComboBox( ): 初始状态不包含项目。 (2) JComboBox(Object[] items): 初始时指定一组项目。 (3) void setEditable(boolean aFlag):设置组合框是否可编辑。 (4) addItem(Object anObject): 添加一个项目。 (5) void removeItem(Object anObject): 移去一个项目。 (6) int getSelectedIndex( ): 返回被选项目的索引号。
11.4.7 组合框 常用方法2: (7) void setSelectedIndex(int anIndex) 选择指定位置上的项目。 (8) Object getSelectedItem( ):返回被选项目。 (9) void setSelectedItem(Object anObject) 选择指定项目。 (10) void addActionListener(ActionListener l) 注册ActionListener监听器。 (11) void addItemListener(ItemListener aListener) 注册ItemListener监听器。
11.4.8 列表框 __JList • 列表框是一种JList对象,用于提供显示一组项目供用户选择。 • 通常,用户可以从列表框中选择一个或多个项目。
11.4.8 列表框 构造方法: (1) JList(Object[] listData) 根据指定项目数组创建列表。(项目不可增减) (2) JList(ListModel dataModel) 根据指定的模型对象创建列表。 *可以利用在DefaultListModel类中定义的方法修改 列表框中的项目。 * 创建列表框后,可以调用列表框的 setSelectionMode(int selectionMode)方法设置选择模式。
11.4.8 列表框 常用实例方法: (1) Object getSelectedValue( ) 返回被选项目中索引值最小的项目。 (2) Object[] getSelectedValue( ) 返回所有被选中的项目。 (3) void setSelectedIndex(int index) 将指定位置上的项目设置为选中状态。 (4) void setSelectedIndices(int[] indices) 将多个项目设置为选中状态。
11.5 窗口、菜单和对话框 11.5.1 窗口 11.5.2 菜单 11.5.3 对话框 11.5.4 Swing简介
11.5.1.1 创建可关闭窗口 创建一个可以关闭的窗口——方法1 这个窗口,它可以移动、改变大小、最大化、变成图标等,并且可以关闭。 ——例题1
11.5.1.2 窗口事件适配器 该类继承了一个窗口事件适配器类的子类Win。这样可以随意使用类中的方法,不像借口要实现所有的方法。 ——例题2 import java.awt.*; import java.awt.event.*; public class W2 extends Frame { W2( ) { super("Window2"); setSize(350,200); setVisible(true); addWindowListener(new Win()); } public static void main(String[] args) { new W2( ); } } class Win extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } 创建一个可以关闭的空白窗口——方法2
11.5.1.3 匿名类 在声明一个类时不给它命名。程序直接将子类的创建过程变为类的声明定义。将定义的适配器参数传递给窗口对象,并实现子类的继承和实例化…… ——例题3 import java.awt.*; import java.awt.event.*; public class W3 { public static void main(String[] args) { Frame f=new Frame("Windows3"); f.setSize(350,200); f.setVisible(true); f.addWindowListener(new WindowAdapter( ) { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } } 创建一个可以关闭的空白窗口——方法3
11.5.1.4为窗口加入菜单 ——例题4
11.5.2.1在窗口中加入菜单—1 菜单由菜单条、菜单、菜单项和带复选框的菜单等对象组成。 例题6
11.5.2.2菜单综合应用—1 如果在菜单中加入另外一个菜单的话,就会变成多级菜单。菜单项可以添加快捷键,以便快速打开。菜单现也可以设计成带复选框的菜单项,即用CheckboxMenuItems生成菜单项对象。——例题7
11.5.3 对话框 对话框是GUI中很常见的窗口对象,有着广泛的应用。对话框和普通窗口最大的不同就是对话框是依附在某个窗口上,一旦它所依附的窗口关闭了,对话框也要随着关闭。
11.5.3.1 自定义对话框 • Java提供的Dialog类用于制作自定义对话框。 • Dialog有7个构造方法: (1)Dialog(Dialog owner); (2)Dialog(Dialog owner,String title); (3)Dialog(Dialog owner,String title,boolean modal); (4)Dialog(Frame owner); (5)Dialog(Frame owner,boolean modal); (6)Dialog(Frame owner,String title); (7)Dialog(Frame owner,String title,boolean modal)。 说明:owner是自定义对话框的所有者,可以是一个 Dialog或Frame对象。 title是对话框的标题。 modal取值为true为模式对话框,否则无模式。 模式对话框是指打开后必须作出响应的对话框。
11.5.3.2 创建自己定义对话框实例—1 ——例题9