第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之一).

Slides:



Advertisements
Similar presentations
四川机电职业技术学院 http: // 6.1 主控界面设计、编程 信息工程系 向模军 Tel: QQ:
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
广州市小学信息技术教学同步资源 第一册 第二章 第六节 《 Window窗口》 广州市荔湾区西华路小学 董绮珊.
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
图形界面设计 福州大学阳光学院 张海歆.
项目2 字符格式和段落编排 2017年3月7日6时54分.
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
UI(用户界面)集训班 Illustrator 高级班.
第八讲 图形用户界面与事件处理 1、使用AWT(Abstract Window Toolkit)组件
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
4.1 概述 4.2 AWT 与 Swing组件 4.3 事件处理 4.4 容器与布局管理器 4.5 对话框 4.6 菜单
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
在PHP和MYSQL中实现完美的中文显示
Java语言程序设计 马 皓
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
2018/11/11 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
GUI事件处理 主讲:赖国荣 QQ:
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Java语言程序设计 第六部分 Java图形用户界面.
Java程序设计 JAVA 授课教师:赵小敏 浙江工业大学 软件学院
第6章回顾 Applet Applet方法 Java Applet也称为小应用程序,嵌入在网页中运行
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
記事本 物件導向系統實務.
第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。
大学计算机基础 典型案例之一 构建FPT服务器.
第8章 图形用户界面的设计与实现 本章介绍Java基本的图形编程知识,包括窗口的显示、文字和图像的显示、事件处理以及图形用户界面中常用的组件等内容。 本章要点 8.1 Java图形用户界面概述 8.2 标准组件 8.3 简单图形用户界面 8.4 Java事件处理 8.5 布局管理 8.6.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
走进编程 程序的顺序结构(二).
辅导课程六.
AWT Event Model.
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
Windows 7 的系统设置.
事件處理.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 例:ButtonTest.java.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
组件 复选框(Checkbox)可以让用户进行多项选择。复选框有两种状态,分别为“开(on)”和“关(off)”。当用户点中复选框的时候,复选框的状态就会改变。 1、创建复选框 (1)声明复选框。 Checkbox mycheckbox =new Checkbox (); (2)添加复选框。将复选框组件放置到容器中。
项目二:HTML语言基础.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
Chapter 18 使用GRASP的对象设计示例.
Visual Basic程序设计 第13章 访问数据库
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
VRP教程 2011.
Python 环境搭建 基于Anaconda和VSCode.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
YOUR SUBTITLE GOES HERE
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
Summary
Presentation transcript:

第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之一)

学习目的 通过案例学习,理解组件、容器、布局管理器、事件源、事件、事件处理者等基本概念; 用抽象窗口工具包AWT和Swing包中来开发图形用户界面; 领悟事件处理机制,使程序能够与用户交互; 学会利用布局管理器管理来管理组件的布局; 掌握AWT包和Swing包中各容器和组件的用法; 了解Java Applet程序和Java Application应用程序创建图形用户界面的原理、联系及区别。

主要内容 应用AWT组件开发图形用户界面程序 Java事件处理 图形用户界面AWT组件学习 应用Swing组件开发图形用户界面 Applet应用程序与图形用户界面介绍

6.1 应用AWT组件开发图形用户界面程序 应用程序的图形用户界面设计在实际项目开发中具有重要作用,对用户来说比较友好,方便用户的操作,是程序设计者追求的目标,Java语言在开发图形用户界面方面具有独特优势,可以实现不同平台的一致性。

AWT支持图形用户界面编程的功能 AWT支持图形用户界面编程的功能: 抽象窗口工具包AWT(Abstract Window Toolkit) 图形用户界面工具集GUI(Graphics User Interface) AWT支持图形用户界面编程的功能: 用户界面组件; 事件处理模型; 图形和图像工具,包括形状、颜色和字体类; 布局管理器; 数据传送类。

【综合案例6-1 】 程序执行后结果如图。用户登录界面设计

程序代码 add(添加文本、标签、按钮组件到容器对象f。) import java.awt.*; public class TestAWT1{ public static void main(String [] args){ Frame f=new Frame("用户登录"); TextField name=new TextField(20); TextField pw=new TextField(20); Label la1=new Label("用户名"); Label la2=new Label("密 码"); Button btn1 = new Button("确定"); Button btn2 = new Button("退出"); pw.setEchoChar('*'); f.setLayout(new FlowLayout()); f.add(la1); f.add(name); f.add(la2); f.add(pw); f.add(btn1); f.add(btn2); f.setSize(250,130); f.setVisible(true); } Windows类_Frame子类_装载组件文本框、标签和按钮。 add(添加文本、标签、按钮组件到容器对象f。)

开发图形用户界面程序一般步骤 创建某组件的对象,设置对象属性,调用容器的add( )方法向容器中添加该组件对象。 使用某种布局策略,指定该基本组件对象在容器中的位置。Java中的布局管理器负责确定其容器中每个子组件的大小和布局策略。 将组件注册给它所能产生的事件对应的事件监听者,重载事件处理方法实现该组件对象与用户交互的功能。

6.1.1 容器的使用 容器是用来存放和组织其他组件的组件。 容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。

容器之间的继承关系 Container类 java.lang.Object 布局管理器类 MenuComponent类 Graphics类 Componet类 Font类 AWTEvent Window Frame Applet Panel Scrollpane Container类

Frame类的容器 Frame类用来建立标准的窗口组件,是编写Java程序时不可缺少的类。 Frame是Window的一个子类。它是带有标题和缩放角的窗口。 Frame继承于Java.awt.Container,可以用add()方式来给框架添加组件。 框架的缺省布局管理器就是BorderLayout;它可以用setLayout()方式来改变,并且在里面加入各种可视组件。 Frame是带标题的窗口。

6.1.2 标签、文本域、按钮组件的使用 常用的基本组件有: 基本组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。 基本组件的作用是完成与用户的一次交互,包括接收用户的一个命令、一项选择、显示一段文字等。 常用的基本组件有: 复选框(Checkbox) 单选按钮(CheckboxGroup) 下拉列表(List或Choice) 标签(Label) 文本编辑区(TextField或TextArea) 按钮(Button) 菜单(Menu)等。

标签(Label) 一个标签对象显示一行静态文本。程序可以改变文本,但用户不能改变。标签没有任何特殊的边框和装饰,标签通常不处理事件。 文本域(Textfield) TextField组件可以用来显示一行文字,并且允许在上面编辑,它是图形用户界面经常使用的组件。因为只允许有一行,所以当按下Enter或Return键时,ActionListener可以通过actionPerformed()知道这个事件。除了注册一个ActionListener,你还可以注册一个TextListener来接收关于个别击键的通知。 按钮(Button) Button组件是图形用户界面设计经常用到的组件,这个组件提供了“按下并动作”的基本操作。可以构造一个带文本标签的按钮,用来告诉用户它的作用。

6.2 Java事件处理 【综合案例6-1 】中当用鼠标单击确定按钮时并没有响应,另外当单击关闭窗口按钮时并不能关闭窗口,这是为什么?

【综合案例6-2】 添加事件处理机制的应用程序用户登录界面程序设计,程序执行结果如下图所示。

程序代码 import java.awt.*; import java.awt.event.*; public class TestAWTNew2 implements ActionListener{ static TextField name=new TextField(20); static TextField pw=new TextField(20); static Label la1=new Label("用户名"); static Label la2=new Label("密 码"); static Label la3=new Label(); static Button btn1 = new Button("确定"); static Button btn2 = new Button("退出"); static Frame f=new Frame("用户登录");

public static void main(String [] args) { f.setLayout(new FlowLayout()); pw.setEchoChar('*'); f.add(la1); f.add(name); f.add(la2); f.add(pw); f.add(btn1); f.add(btn2); f.add(la3); f.setSize(250,140); f.setVisible(true); f.addWindowListener(new MyWindowListener()); btn1. addActionListener(new TestAWTNew2()); btn2. addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { f.setVisible(false); f.dispose(); System.exit(0); }}); }

public void actionPerformed(ActionEvent e) { if (pw.getText().trim().equals("123456")) la3.setText("你输入的密码已经通过验证"); else la3.setText("你输入的密码没有通过验证"); } class MyWindowListener implements WindowListener { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); ((Window)e.getComponent()).dispose(); System.exit(0);} public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){}

6.2.1 Java事件处理机制 在Java应用程序中,组件的事件处理机制涉及以下三个内容: 事件源: 能够接收外部事件的载体,通常就是各个组件,例如按钮Button。 事件监听器: 能够接收事件源通知的对象。 事件处理程序: 用于接收事件对象并对其进行处理的对象。

Java事件编程一般步骤 第一步:程序开始装载事件包; 第二步:实现事件监听者所对应的接口,有三种方法可以实现接口类: (1)组件所在类本身作为事件监听类 (2)用外部类作为专门的事件监听类 (3)用匿名内部类作为事件监听类 第三步:对事件源,即组件添加事件监听者,事件源实例化以后,必须进行授权,注册该类事件的监听器,通常用addXXXListener(XXXListener) 方法来注册监听器; 第四步,重写相应事件接口类中的方法。

6.2.2 常用事件及适配器介绍 (AWT事件及其相应的监听器接口 ) 事件类别 描述信息 接口名 ActionEvent 动作事件 ActionListener ItemEvent 单击某些项目 ItemListener MouseEvent 鼠标移动事件 MouseMotionListener 鼠标单击等事件 MouseListener KeyEvent 键盘事件 KeyListener FocusEvent 组件收到或失去焦点事件 FocusListener AdjustmentEvent 移动滚动条等事件 AdjustmentListener ComponentEvent 对象移动缩放显示隐藏等 ComponentListener WindowEvent 窗口收到的事件 WindowListener ContainerEvent 容器增加或删除组件事件 ContainerListener TextEvent 文本区域发生改变事件 TextListener (AWT事件及其相应的监听器接口 )

java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。 AWT的相关事件继承于java.awt.AWTEvent类。 AWT事件分为两大类:低级事件和高级事件。

低级事件 是指基于组件和容器的事件,当一个组件上发生事件,如:鼠标的进入,点击,拖放等,或组件的窗口开关等,触发了组件事件。 常见低级事件: ComponentEvent(组件事件) ContainerEvent(容器事件) WindowEvent(窗口事件) FocusEvent(焦点事件) KeyEvent(键盘事件) MouseEvent(鼠标事件)。

高级事件 是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。 常见高级事件: ActionEvent(动作事件) ItemEvent(选项事件) KeyEvent(按键事件) TextEvent(文字事件) WindowsEvent(窗口事件)

类的适配器 对于表中事件接口类中包含的方法超过二个及以上事件类,Java语言提供了相应类的适配器XXXAdapter,与上表相对应,java.awt.event包中定义的事件适配器类包括以下几个: ComponentAdapter( 组件适配器) ContainerAdapter( 容器适配器) FocusAdapter( 焦点适配器) KeyAdapter( 键盘适配器) MouseAdapter( 鼠标适配器) MouseMotionAdapter( 鼠标运动适配器) WindowAdapter( 窗口适配器)

6.3 图形用户界面AWT组件学习 复选框、单选框、按钮组、文本区域、面板、布局管理器组件的使用 下拉列表、列表、滚动面板、以及对话框组件的使用 菜单条、菜单、菜单项组件的使用 AWT组件与监听器的对应关系

6.3.1 复选框、单选框、按钮组、文本 区域、面板、布局管理器组件的使用 6.3.1 复选框、单选框、按钮组、文本 区域、面板、布局管理器组件的使用 复选框(Checkbox) Checkbox组件提供一种简单的“开/关”输入设备,它旁边有一个文本标 单选框组(CheckboxGroup) 单选框组提供了将多个复选框作为互斥的一个集合的方法,因此在任何时刻,这个集合中只有一个单选框的值是true。值为true的单选框就是当前被选中的复选框。

文本区(TextArea) TextArea 对象是显示文本的多行区域。可以将它设置为允许编辑或只读,可以把它看成是多行的TextField组件。 Panel容器组件 Panel类是一个很简单的容器,象Frame一样,Panel提供空间,在这个空间中可以添加任何的GUI组件,包括其它的Panel。

布局管理器 布局管理器负责决定容器组件内所有其他组件的位置和大小。setLayout()用来指定要被使用的布局管理器。 (1)FlowLayout(顺序布局管理器) FlowLayout是按行来放置Component的,每当一行放满后,就新产生一行开始放。是Panel和Applet类缺省的布局管理器。 (2)BorderLayout(边界布局管理器) BorderLayout设置容器中的组件五个区域:南、北、东、西和中间区域。每个区域最多只能包含一个组件,该边界布局管理器是Window和Dialog缺省的布局管理器。 (3)GridLayout Manager(网格布局管理器) 提供了放置component的灵活手段。建立一个有多行和多列的布局管理器,然后component就可以按一定的次序(从左到右,从上到下)进行排列。

(4)CardLayout Manager(卡片布局管理器) CardLayout 对象是容器的布局管理器。它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,而容器充当卡片的堆栈。当容器第一次显示时,第一个添加到 CardLayout 对象的组件为可见组件。 (5)网格包型(GridBagLayout)布局管理器 该布局管理器是AWT提供的最灵活,最复杂,最常用的布局管理器之一,类似于网格布局,但它允许你把组件放在网格中任何行或列,也允许你的组件跨多行或多列。它是通过设置GridBagConstraints对象中的变量来约束组件布局的。 (6)自定义布局管理器 自定义布局(null)管理器是通过组件本身的setBounds()方法来设置组件在容器中的位置,是比较常用的一种布局管理器,相对于网格包型布局管理器而言,还是非常简单的,只不过需要计算每个组件大小以及容器位置。

【综合案例6-3】 编写程序实现如下面四幅图的图形用户界面程序,当单击复选框和单选框时,在文本显示区域将显示所单击的对象。

import java.awt.*; import java.awt.event.*; public class TestCheckNew3 extends Frame{ Label lb = new Label(“文本显示区域”); //创建标签对象 TextArea ta1=new TextArea(“显示选择的项目”,2,18); //创建文本区域对象 Checkbox ck1=new Checkbox("红色",true); //创建复选框对象 Checkbox ck2=new Checkbox("黄色",false); //创建复选框对象 Checkbox ck3=new Checkbox(“绿色”,true); //创建复选框对象 CheckboxGroup cg=new CheckboxGroup(); //创建单选框组对象 Checkbox ck4=new Checkbox("钢笔",true,cg); //创建单选框对象 Checkbox ck5=new Checkbox("水笔",false,cg); //创建单选框对象 Checkbox ck6=new Checkbox(“铅笔”,false,cg); //创建单选框对象 Panel p1 = new Panel(); //创建面板容器对象p1 Panel p2 = new Panel(); //创建面板容器对象p2

public TestCheckNew3(){ super("图形界面组件学习"); p1.setLayout(new FlowLayout()); //为p1设置流水线布局管理 p1.add(lb); //添加组件lb到p1 p1.add(ta1); //添加组件ta1到p1 p2.setLayout(new GridLayout(2,3)); //为p2设置表格布局管理 p2.add(ck1); p2.add(ck2); p2.add(ck3); //添加复、单选框组件到p2 p2.add(ck4); p2.add(ck5); p2.add(ck6); add(p1,"Center"); //添加面板p1到当前容器窗口 add(p2,"South"); //添加面板p2到当前容器窗口 setSize(250,130); setVisible(true); //设置窗口尺寸且为可见 setLayout(new BorderLayout()); //设置当前容器窗口布局 addWindowListener(new WindowAdapter(){ //添加窗口关闭事件 public void windowClosing(WindowEvent e){ System.exit(0); } }); ck1.addItemListener(new CheckListener ()); //添加选项事件 ck2.addItemListener(new CheckListener ()); //添加选项事件 ck3.addItemListener(new CheckListener ()); //添加选项事件 ck4.addItemListener(new CheckListener ()); //添加选项事件 ck5.addItemListener(new CheckListener ()); //添加选项事件 ck6.addItemListener(new CheckListener ()); //添加选项事件 }

class CheckListener implements ItemListener{ //选项事件处理方法 public void itemStateChanged(ItemEvent e){ String source=(String)(e.getItem()); if ( source == "红色" ) { if ( e.getStateChange() == e.SELECTED ) ta1.setText("选择的是红色"); else ta1.setText("去掉选择红色"); } else if ( source == "黄色" ) { ta1.setText("选择的是黄色"); ta1.setText("去掉选择黄色"); } else if ( source == "绿色" ) { ta1.setText("选择的是绿色"); ta1.setText("去掉选择绿色"); } if ( source == "钢笔" ) { ta1.setText("选择的是钢笔"); } if ( source == "水笔" ) { ta1.setText("选择的是水笔"); } if ( source == "铅笔" ) { ta1.setText("选择的是铅笔"); } } public static void main(String [] args){ new TestCheckNew3(); }

6.3.2 下拉列表、列表、滚动面板、 对话框组件的使用 6.3.2 下拉列表、列表、滚动面板、 对话框组件的使用 下拉列表(Choice) Choice组件,此种下拉列表选项框一次只能显示一个选项,要改变被选中的项目,可单击向下的箭头,从选项中选择一个项目。 列表(list) 一个列表将各个文本选项显示在一个区域中,这样就可以在同时看到若干个条目。列表可以滚动,并支持单选和多选两种模式。

滚动面板(ScrollPane) 对话框(Dialog) 滚动面板实现用于单个子组件的自动水平和/或 垂直滚动的容器类。 滚动条的显示策略可以有以下三种策略: as needed创建滚动条,且只在滚动窗格需要时显示; always创建滚动条,且滚动窗格总是显示滚动条; never滚动窗格永远不创建或显示滚动条。 对话框(Dialog) Dialog组件是一个带标题和边界的顶层窗口,边界一般用于从用户处获得某种形式的输入。

【综合案例6-4】 在综合案例1的基础上实现更加复杂和功能更多的用户身份验证图形用户界面。执行结果如图

import java.awt.event.*; public class TestUser4 extends Frame implements ActionListener { Label Label1 = new Label("用户ID :"); TextField textfieldialog= new TextField(10); Label Label2 = new Label("用户密码:"); TextField textfield2 = new TextField(10); Label Label5 = new Label("用户地区:" ); Choice choice = new Choice(); Label Label6 = new Label("用户类别:" ); List list = new List(3,false); Button button1 = new Button("确定"); Button button2 = new Button("取消"); Dialog dialog = new Dialog(this,"提示信息",false); ScrollPane sp = new ScrollPane();

add(Label1); add(textfieldialog); add(Label2); public TestUser4(){ super("用户身份验证"); add(Label1); add(textfieldialog); add(Label2); textfield2.setEchoChar('*'); add(textfield2); add(Label5); choice.addItem("广东"); choice.addItem("上海"); choice.addItem("北京"); add(choice); add(Label6); list.add("普通用户"); list.add("高级用户"); list.add("系统管理员"); sp.add(list); add(sp); add(button1); button1.addActionListener(this); add(button2); button2.addActionListener(this); setLayout(new GridLayout(5,2,5,5)); setSize(160, 220); setVisible(true); addWindowListener(new windowclose()); } public class windowclose extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); }

public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals("确定")){ if (textfield2.getText().trim().equals("123456")){ dialog.setLayout(new FlowLayout(FlowLayout.CENTER)); Label tf = new Label("您已经通过验证,欢迎您!"); dialog.add(tf); dialog.setSize(250,60); dialog.setVisible(true); dialog.addWindowListener(new windowclose()); } else{ Label tf = new Label("对不起,您输入的密码不正确,请重试"); dialog.addWindowListener(new windowclose());} } else System.exit(0); public static void main(String[] args) { new TestUser4(); }

6.3.3 菜单条、菜单、菜单项组件的使用 菜单是非常重要的GUI组件 每个菜单组件包括一个 菜单条——MenuBar, 6.3.3 菜单条、菜单、菜单项组件的使用 菜单是非常重要的GUI组件 每个菜单组件包括一个 菜单条——MenuBar, 每个菜单条又包括若干个 菜单项——Menu, 每个菜单项又包括若干个 菜单子项——MenuItem, 每个子菜单项的作用与按钮相似, 即用户点击时引发一个动作命令。

菜单条(MenuBar) 菜单(Menur) 菜单项(MenuItem) 一个菜单条组件是一个水平菜单。它只能加入到一个框架中,并成为所有菜单树的根。在一个时刻,一个框架可以显示一个菜单条。然而,你可以根据程序的状态修改菜单条,这样在不同的时刻就可以显示不同的菜单。 菜单(Menur) 菜单组件提供了一个基本的下拉式菜单。它可以加入到一个菜单条或者另一个菜单中。 菜单项(MenuItem) 菜单项组件是菜单树的文本“叶”结点。它们通常被加入到菜单中,以构成一个完整的菜单。

【综合案例6-5】 创建窗口及菜单项,菜单打开和保存响应鼠标单击事件,在标签中显示所单击菜单对象的名称。程序执行结果如下图所示:

{ Label tf1=new Label(); import java.awt.*; import java.awt.event.*; public class TestMenu5 implements ActionListener { Label tf1=new Label(); Frame f=new Frame("菜单组件"); MenuBar mb1=new MenuBar(); Menu fi = new Menu("文件"); Menu fi1 = new Menu("编辑"); Menu fi2 = new Menu("视图"); Menu fi3 = new Menu("查看"); Menu fi4 = new Menu("帮助"); MenuItem[] file={new MenuItem("打开", new MenuShortcut(KeyEvent.VK_O)), new MenuItem("保存",new MenuShortcut(KeyEvent.VK_S)), new MenuItem("退出",new MenuShortcut(KeyEvent.VK_E))};

private void TestMenu1() { f.setMenuBar(mb1); mb1.add(fi); mb1.add(fi1); mb1.add(fi2); mb1.add(fi3); mb1.add(fi4); for (int i=0;i<file.length ;i++) { fi.add(file[i]); } file[0].setActionCommand("打开"); file[0].addActionListener(this); file[1].setActionCommand("保存"); file[1].addActionListener(this); file[2].setActionCommand("退出"); file[2].addActionListener(this); f.setLayout(new BorderLayout()); f.add(tf1,BorderLayout.SOUTH); f.setSize(250,200); f.setVisible(true); f.addWindowListener(new MyWindowListener()); } MyWindowListener类与前面综合案例6-2相同,这里不重复打印显示。调试程序时必须添入到程序中。

public void actionPerformed(ActionEvent e){ MenuItem target=(MenuItem)e.getSource(); String ac=target.getActionCommand(); if(ac.equals("打开")) { tf1.setText("你选择的是打开菜单"); } else if(ac.equals("保存")) { tf1.setText("你选择的是保存菜单"); } else if(ac.equals("退出")) { f.setVisible(false); } } public static void main(String [] args){ TestMenu5 menu = new TestMenu5 (); menu.TestMenu1 ();

6.3.4 AWT组件与监听器的对应关系 监听器接口 Button + Canvas Checkbox CheckboxMenuItem Act Adj Cmp Cnt Foc Itm Key Mou MM Text Win Button + Canvas Checkbox CheckboxMenuItem Choice Component Container Dialog Frame Label List MenuItem Panel Scrollbar ScrollPane TextArea TextField Window

阶段复习要点 重点掌握知识内容: 图形界面设计的基本步骤? ——三步(组件设计、初始化、属性设定等) 布局管理的种类? 事件相关信息? ——六种(顺序、边界、网格、卡片、网格包、自定义) 事件相关信息? ——三个(事件源、事件监听器、事件处理程序) 常见组件名称、功能、属性设计?