1、面向对象程序设计面向对象程序设计与系统开发与系统开发第13章 功能拓展-GUI2驱动驱动任任务务一一采用GUI的常用容器和组件设计如下的程序界面3目标及知识点目标及知识点GUI容器和容器和组组件的基本概念件的基本概念1 1GUI容器和容器和组组件的使用件的使用2GUI概述概述vGUI(Graphical User Interface)的中文意思是图形用户界面。允许用户以图形的方式与系统进行互动。在GUI推广之前,用户通常要以文本命令的方式来控制计算机。GUI直观的将计算机的功能呈现给用户,降低了用户使用计算机的门槛。v 抽象窗口工具包:java.awt:提供基本GUI组件,视觉控制,绘图工具等
2、 java.awt.event:事件处理 4AWT和和SwingvAbstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。AWT 的主要优点是,它在 Java 技术的每个版本上都成为了一种标准配置,包括早期的 Web 浏览器中的 Java 实现vSwing 是在 AWT 组件基础上构建的。所有 Swing 组件实际上也是 AWT 的一部分。Swing 使用了 AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。Swing 组件、布局管理器以及事件。5AWT和和Swing的常用组件与容器对应表的常用组件与容器对应表功能AWT
3、Swing按钮ButtonJButton标签LabelJLabel下拉选项框ChoiceJComboBox滚动列表ListJList复选框(含单选框)CheckboxJCheckBox,JRadioButton文本框(单行)TextFieldJTextField文本框(多行)TextAreaJTextArea菜单MenuJMenu以下为常用容器面板PanelJPanel对话框DialogJDialog窗体框架FrameJFrame6容器容器vAWT组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。类Container是所有容器的父类,常见容器类有窗体(Frame)、对话框(Di
4、alog)、面板(Panel),他们的对象都可以使用方法add()向其中添加组件7窗体框架(窗体框架(Frame)v 一个Frame对象就是一个常见的窗口,它包含有标题栏,可选菜单栏,边框,关闭、最大、最小化按钮v 常用方法:8【例【例13-1】创建一个窗体。】创建一个窗体。v import java.awt.*;v public class exam13_1vpublic static void main(String args)vFrame f=new Frame();/创建一个框架对象fvf.setTitle(My Frame);/设定框架标题vf.setSize(250,200);/设
5、定框架大小vf.setBackground(Color.green);/设定背景颜色vf.setVisible(true);/显示窗体vv 9DialogvDialog的对象就是一个对话框,主要用于接受用户输入,它只能基于Frame对象或者另一个Dialog对象上进行显示v 常用方法10【例【例13-2】创建模式对话框。】创建模式对话框。import java.awt.*;public class exam13_2public static void main(String args)Frame frm=new Frame(Dialog 示例);Dialog dig=new Dialog(fr
6、m,对话框对话框,true);/模式对话框 frm.setBounds(100,100,200,100);/设置窗体位置和大小。dig.setBounds(305,100,200,100);/设置对话框位置和大小 frm.setVisible(true);/设置窗体为可见 dig.setVisible(true);/设置对话框为可见 11面板(面板(Panel)v Panel 是最简单的容器类。和Frame一样,可以将其他组件放在面板提供的空间内,这些组件包括其他面板,但是和Frame不同的是,Panel(面板)不能生成对象将窗口显示出来,它也必须要作为一个组件放到Frame、Window这样
7、的顶层容器中使用v 常用方法12【例【例13-3】演示面板的使用。】演示面板的使用。13import java.awt.*;public class exam13_3 extends Frame public static void main(String args)Button btn1=new Button(按按钮钮1);/按按钮组钮组件件Button btn2=new Button(按按钮钮2);/按按钮组钮组件件Panel panel=new Panel();/创创建一个面板建一个面板Frame frame1=new Frame();/创创建一个窗体建一个窗体frame1.setBou
8、nds(100,100,200,200);frame1.setBackground(Color.yellow);/设设置窗体的置窗体的颜颜色色frame1.setTitle(AWT Frame测试测试);/设设置窗体的置窗体的标题标题panel.add(btn1);/将按将按钮钮添加到面板中添加到面板中panel.add(btn2);/将按将按钮钮添加到面板中添加到面板中frame1.add(panel);/将面板添加到窗体中将面板添加到窗体中frame1.setVisible(true);/将窗体将窗体显现显现出来出来组件组件v 组件是以图形方式显示在屏幕上提供人机交互的对象 按钮按钮(Bu
9、tton)标签(标签(Label)单行文本输入框(单行文本输入框(TextField)多行输入框(多行输入框(TextArea)下拉选项框(下拉选项框(Choice)滚动列表滚动列表(List)复选框(复选框(Checkbox)复选框组复选框组(CheckboxGroup)菜单(菜单(Menu)14按钮按钮(Button)v 常用方法:15【例【例13-4】演示按钮的创建】演示按钮的创建16import java.awt.*;public class exam13_4public static void main(String args)Frame f=new Frame();/创建一个窗体f
10、.setTitle(我的GUI窗口);f.setLayout(null);/将窗体的布局方式去掉,布局我们后面将会讲到f.setSize(300,300);/设置窗体的大小f.setBackground(Color.green);/设置窗体的颜色f.setVisible(true);/将窗体显示出来/按钮Button but1=new Button(确定确定);/创建一个确定按钮Button but2=new Button(取消取消);/创建一个取消按钮but1.setBounds(40,40,80,30);/设置按钮在窗体上的位置和大小but2.setBounds(40,70,80,30);
11、/设置按钮在窗体上的位置和大小f.add(but1);/将按钮添加到窗体上f.add(but2);/将按钮添加到窗体上标签(标签(Label)v Label 对象是一个用来放置文本的组件v 常用方法:17【例【例13-5】演示标签的使用。】演示标签的使用。18import java.awt.*;public class exam13_5 public static void main(String args)Frame f=new Frame();f.setTitle(我的GUI窗口);f.setLayout(null);/不采用布局f.setSize(200,200);f.setBackgr
12、ound(Color.green);f.setVisible(true);/标签 Label label1=new Label();Label label2=new Label(欢欢迎你使用迎你使用标签标签!);Label label3=new Label(“这这是一个写是一个写标签标签的的例子例子”,Label.RIGHT)label1.setBounds(40,20,150,20);/标签的位置和大小 label2.setBounds(40,40,150,20);/标签的位置和大小 label3.setBounds(40,60,150,20);/标签的位置和大小 f.add(label1)
13、;/向窗体容器中添加标签 f.add(label2);/向窗体容器中添加标签 f.add(label3);/向窗体容器中添加标签单行文本输入框(单行文本输入框(TextField)v Label 对象是一个用来放置文本的组件v 常用方法:19【例【例13-6】创建文本框。】创建文本框。20import java.awt.*;public class exam13_5public static void main(String args)Frame frame=new Frame(登录对话框);/创建Frameframe.setLayout(null);/指定布局管理器,关于布局后面我们将专题解
14、frame.setSize(200,150);frame.setVisible(true);Label lblid=new Label(ID:,Label.CENTER);/居中对齐lblid.setBounds(20,30,50,20);TextField id=new TextField();/创建一个单文本框,用于接受用户ID输入 id.setBounds(75,30,110,20);Label lblpwd=new Label(PWD:,Label.CENTER);lblpwd.setBounds(20,55,50,20);TextField pw=new TextField();/创
15、建一个单文本框,用于接受用户密码输入 pw.setBounds(75,55,110,20);Button login=new Button(登录);/登录按钮login.setBounds(40,80,60,20);-Button cancel=new Button(取消取消);/取消按钮取消按钮cancel.setBounds(105,80,60,20);pw.setEchoChar(*);/指定密码显示字符为指定密码显示字符为*/向向frame顺序添加组件顺序添加组件frame.add(lblid);/添加标签组件添加标签组件frame.add(id);/添加文本框添加文本框frame.a
16、dd(lblpwd);frame.add(pw);/添加文本框添加文本框frame.add(login);/添加按钮添加按钮frame.add(cancel);/添加按钮添加按钮下拉选项框(下拉选项框(Choice)v 常用方法:21【例【例13-7】演示创建下拉选项框。】演示创建下拉选项框。22import java.awt.*;public class exam13_7public static void main(String args)Frame f=new Frame();f.setTitle(我的GUI窗口);f.setLayout(null);f.setSize(500,300)
17、;f.setBackground(Color.green);f.setVisible(true);/选项框Label label=new Label(选项框的例子:);label.setBounds(20,50,80,20);-Choice c=new Choice();/创创建一个下拉建一个下拉选项选项框框c.addItem(北北 京京);/添加添加选项选项c.addItem(上上 海海);c.addItem(天天 津津);c.addItem(南南 京京);c.addItem(郑郑 州州);c.addItem(武武 汉汉);c.setBounds(110,50,60,20);/设设置置选项选
18、项框的位置和大框的位置和大小小f.add(label);f.add(c);滚动列表滚动列表(List)v 常用方法:23【例【例13-8】演示滚动菜单的使用。】演示滚动菜单的使用。24import java.awt.*;public class exam13_8public static void main(String args)Frame frame=new Frame(List test);List list1=new List();/不可多选的列表 List list2=new List(6,true);/true表示可以多选,显示6行 -frame.add(list2);frame.
19、add(list1,Center);/向frame添加list1 frame.add(list2,South);/向frame添加list2 frame.setSize(300,200);frame.setVisible(true);list1.add(长长江江);list1.add(黄河黄河);list1.add(“淮河淮河”);list2.add(北京大学北京大学);list2.add(清清华华大学大学);list2.add(吉林大学吉林大学);list2.add(复旦大学复旦大学);list2.add(南开大学南开大学);list2.add(天津大学天津大学);list2.add(南京大
20、学南京大学);复选框(复选框(Checkbox)v 常用方法:25复选框组复选框组(CheckboxGroup)v 常用方法:26【例【例13-10】单选按钮示例】单选按钮示例27import java.awt.*;public class exam13_10public static void main(String args)Frame frame=new Frame(CheckboxGroup);CheckboxGroup radioGroup=new CheckboxGroup();/复选框组/cb1、cb2、cb3属于复选框组radioGroupCheckbox cb1=new Ch
21、eckbox(红色,radioGroup,true);Checkbox cb2=new Checkbox(黄色,radioGroup,false);Checkbox cb3=new Checkbox(蓝色,radioGroup,false);frame.add(cb1);frame.add(cb2);frame.add(cb3);frame.setLayout(new FlowLayout();frame.setSize(200,100);frame.setVisible(true);菜单(菜单(Menu)v Java提供下列类来创建和管理菜单:MenuBar:菜单条 Menu:菜单 Menu
22、Item:菜单项 CheckboxMenuItem:带复选框的菜单项28菜单(菜单(Menu)v 创建一个完整的菜单参照如下的步骤:创建MenuBar类的对象 为你想在菜单栏上出现的每个菜单,创建Menu类对象 调用MenuBar类的add()方法来为菜单栏增加菜单对象 为每个子菜单项创建MenuItem或CheckboxMenuItem类的对象 调用Menu对象的add()方法来增加菜单选项到相应的菜单里。2930任务实现任务实现1分析分析该该任任务务中涉及到的中涉及到的GUI容器和容器和组组件件23创创建窗体建窗体类类给给窗体窗体类类添加所需要的添加所需要的组组件件45创创建初始化容器和建
23、初始化容器和组组件的方法件的方法利用构造函数在利用构造函数在创创建建对对象的象的时时候自候自动调动调用步用步骤骤4所所创创建的方法建的方法6让让窗体窗体显显示出来示出来31驱动驱动任任务务二二在上一节任务开设新账号界面的基础上实现注册账号功能32目标及知识点目标及知识点事件机制、事件与事件源及事件事件机制、事件与事件源及事件监监听器的概念听器的概念1 1捕捕获获事件并事件并进进行事件行事件处处理理2事件和事件源事件和事件源v 事件就是在用户界面上发生与用户交互行为而产生的一种效果,如鼠标的各种动作(点击、移入、移出等)、键盘的操作(按下、释放等)以及发生在组件上的各种动作(获得焦点、失去焦点等
24、)v 事件源就是产生事件的那个组件,比如点击按钮产生了一个点击事件,那么这个被点击的按钮就是事件源。33事件监听器事件监听器v 如何捕获事件是我们在做事件处理的时候首先要考虑的问题,这就需对各个事件进行监听,判断该事件是否发生。v 常见的事件监听器34【例【例13-11】35Frame frame=new Frame();frame.addWindowListener(new WindowListener()public void windowActivated(WindowEvent e)/处处理当窗口在最前面理当窗口在最前面时时的事件的事件public void windowClosed(
25、WindowEvent e)/处处理窗口关理窗口关闭闭完成后的事件完成后的事件public void windowClosing(WindowEvent e)frame.dispose();/处处理点理点击击了关了关闭闭窗口事件窗口事件public void windowDeactivated(WindowEvent e)/处处理当窗口不在最前面理当窗口不在最前面时时的事件的事件public void windowIconified(WindowEvent e)/处处理当窗口最小化理当窗口最小化时时的事件的事件public void windowOpened(WindowEvent e)/处处
26、理窗口打开成功事件理窗口打开成功事件);frame.setVisible(true);事件适配器事件适配器v 事件监听器是接口,因此要生成对象完成监听功能则必须要把它所有的抽象方法实现,这给我们开发带来了很多的空方法,如我们只想做窗口关闭事件的时候却要把WindowListener接口的7个方法全部实现出来,而我们实际上只关心windowClosing()方法。有没有一种办法让代码中只包括我们所关心的方法呢?这就要采用事件适配器,36事件适配器事件适配器v 常用适配器37【例【例13-12】Java面向对象软件开发38Frame frame=new Frame();frame.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)frame.dispose();/处处理点理点击击了关了关闭闭窗口事件窗口事件);frame.setVisible(true);39任务实现任务实现1分析注册分析注册业务业务流程,并构建数据流程,并构建数据库库表表结结构构23给给各个按各个按钮钮添加事件添加事件监监听器听器完成关完成关闭闭窗口事件窗口事件处处理理45完成取消按完成取消按钮钮事件事件处处理理完成确定按完成确定按钮钮事件事件处处理,理,实现账户实现账户注册功能注册功能40课堂总结课堂总结
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。