版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/1/111Java程序设计及应用开发教程主编:虞益诚E-mail:yuyich@教学课件Java程序设计及应用开发教程构架Java语言以其面向对象性、可重用性、平台无关性、多线程、安全可靠等特性成为网络程序设计中的佼佼者,受到广泛的青睐三大模块Java概述与语言基础Java异常处理图形用户界面编程Java线程机制与AppletJavaJava应用开发与课程设计实例教参Java流程控制及数组与字符串高级GUI设计技术输入输出流Java网络编程基础Java数据库连接第13-15
章
应用开发篇
第1-6
章基础知识篇
第7-12章程序设计篇
面向对象程序设计和继承与多态2023/1/11第8章图形用户界面编程3第8章图形用户界面编程8.1组件概述8.2AWT图形化界面基础8.3事件处理机制8.4本章小结
图形用户界面是为应用程序提供一个图形化的界面,通过它用户和程序之间可以方便地进行交互,完成应用程序使用中的数据输入与输出等操作任务。本章主要讲述了容器AWT组件(包括:Frame、Panel、Button、Label、文本框与文本域、复选框与单选按钮、下拉列表与列表、Dialog与Canvas画布等),同时介绍了事件处理机制及其诸多事件等。
2023/1/11第8章图形用户界面编程48.1组件概述设计和实现图形用户界面的设计的主要任务包括如下两个层次:创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要布局排列,从而构成完整的图形用户界面的外观表象。定义图形用户界面的事件和各界面元素所对不同事件的响应,从而实现图形用户界面与用户间的交互功能。8.1.1组件Java图形用户界面最基本的组成部分是组件,组件是一个可以以图形化方式显示于屏幕上与用户进行交互的对象。如:按钮(button)等。8.1.2容器容器(Container)实际上是ComPonent的子类,由Container类的子类和间接子类创建的对象均称为容器,可以通过add()等方法向容器添加组件,容器本身也是组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套,它具有组件的所有性质。Java中AWT与Swing组件各含有3类常用的容器,前者为Frame、Panel和Applet,后者是JFrame、JPanel、Japplet,Swing同时还有JScrollPane(滚动窗格)、JSplitPane(拆分窗格)和JLayeredPane(分层窗格)。2023/1/11第8章图形用户界面编程58.1组件概述8.1.3AWT组件抽象窗口工具包AWT(AbstractWindowToolkit)可用于Java的applet和applications中,支持图形用户界面编程的功能,包括:用户界面组件、事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。JDK1.2新增加了一个javax.swing包,该包提供了功能更为强大的用来设计GUI界面的类。由java.awt包中的类创建的组件习惯上称为重组件。8.1.4Swing组件Swing是使用AWT作为基础构建起来的的,Javax.swing包为我们提供了更加丰富的、功能强大的Swing组件,其中大部分组件是轻组件,没有同位体。它的大多数组件都是AWT组件名前面加一个“J”,Swing的用法与AWT基本相同,它也使用AWT的事件处理机制,只是组件的风格不同与名字变了,所包含的包也不同(Swing的组件主要包含在javax.swing包中),同时还增加了一些原来没有的特性。例如,一个按钮可以有与之相关联的一幅图像和一个字符串,这幅图像还可以根据按钮状态的变化而更换。2023/1/11第8章图形用户界面编程68.1组件概述Swing组件无需同位体,故称之为轻组件。Javax.swing包中JComponent(轻组件)类是java.awt包中Container类的一个直接子类、Componenet类的一个间接子类。Javax.swing包中的JFame类和JDialog类分别是java.awt包中Frame类和Dialog类的直接子类、Window类的间接子类。在Java中必须理解容器和组件两个基本概念:Java把由Component类的子类或间接子类创建的对象称为一个组件。Java把由Container的子类或间接子类创建的对象称为一个容器。可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。调用removeAl()方法可以移掉容器中的全部组件,调用remove(Componentc)方法可以移掉容器中参数指定的组件。每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。
8.1.5Swing与AWT的区别:
Swing组件全部是由纯Java编写的,功能强大。AWT是由JDK1.0和JDK1.1平台提供的;Swing所有组件都以J开头:Jbutton、Jpanel等;Swing使用的包是:Javax.Swing;AWT使用的包为:Java.awt图8-1java.awt包中常用类及其类间继承关系2023/1/11第8章图形用户界面编程88.2AWT图形化界面基础
8.2.1Frame框架Frame组件在Java的顶层窗口中可以独立使用,它融含标题、边框,尚可加入菜单重置大小等。当Frame被关闭,将产生WindowEvent事件,Frame无法直接监听键盘输入事件。Frame类包括构造方法与一般常用类方法,如表8-1所示。此外还可使用setBackground(Colorc)设置组件的背景色。SetBounds(intx,inty,intwidth,intheight)可设置组件在容器中的坐标(x,y),组件的宽度为width,高度为height。这些方法可设置Frame对象的属性。
2023/1/11第8章图形用户界面编程98.2AWT图形化界面基础
【例8-2】创建一个带窗口图标的Frame类框架。importjava.awt.*;importjavax.swing.ImageIcon;classWindowyu{staticFramef=newFrame("这是个背景红色的框架程序"); staticImageIconicon=newImageIcon("BOOK1.JPG");//创建icon对象publicstaticvoidmain(Stringargs[]) { f.setBounds(0,0,200,100); f.setBackground(Color.red);//框架背景颜色
f.setIconImage(icon.getImage());//将icon对象设置为窗口图标
f.show();} //显示窗口
}//程序运行结果如图8-4所示。2023/1/11第8章图形用户界面编程108.2.2Panel面板
Panel面板类为Container类的子类,也是一种容器,可容纳其他组件(使用add()方法可将其他容器添加到Panel容器),但不是顶层窗口,因而不能独立存在。Panel类方法如表8-2所示。
8.2.3Button按钮按钮(Button)是java程序图形界面设计中最常用的一个组件,是可提供用户快速启动某一动作的类。【例8-4】创建按钮。
按钮的创建方法举例如下:ButtonNbutton=newButton(“按钮标签”);8.2AWT图形化界面基础2023/1/11第8章图形用户界面编程118.2.4Label标签
标签(Label)被称为标签组件,是一种用来显示说明性的静态文本的组件。标签是用户只能查看而不能简单地修改其内容的文本显示区域,标签创建方法为:Labelprompt=newLabel(“请输入标签说明信息:”);【例8-5】在窗口给定位置创建一个标签。8.2.5文本框与文本域
文本框(TextField)又称单行文本输入域,多用于单行显示,当按下回车键时会发生事件(ActionEvent),可以通过ActionListener中的actionPerformed()方法对事件进行相应处理,可以使用setEditable(boolean)方法设置为只读属性。而文本域TextArea是多行文本组件,用于显示程序中的多行文本信息。
8.2AWT图形化界面基础2023/1/11第8章图形用户界面编程12创建文本框:TextFieldtf=newTextField("Hello!",30);创建文本域:TextAreatextArea1=newTextArea(“编辑文本”,10,45);
【例8-6】创建文本框与文本域信息。
8.2AWT图形化界面基础2023/1/11第8章图形用户界面编程138.2.5文本框与文本域:例8-6importjava.awt.*;publicclassLogin{publicstaticvoidmain(Stringarg[]){Framef=newFrame("UserLogin");f.setBounds(0,0,400,300);//定位f.setBackground(Color.lightGray);//布局
Labell1=newLabel("用户:");//创建标签
TextFieldte1=newTextField("user1",20);//创建文本行
Labell2=newLabel("口令:");TextFieldte2=newTextField(20);//创建20列的文本行
Buttonb1=newButton("确认");Buttonb2=newButton("取消");//创建按钮TextAreata=newTextArea("编辑工资管理程序的文本信息",5,20);//创建文本域
f.setLayout(null);//关闭布局设置
l1.setBounds(50,50,50,20);te1.setBounds(100,50,180,20);l2.setBounds(50,80,50,20);te2.setBounds(100,80,180,20);b1.setBounds(70,110,50,20);b2.setBounds(200,110,50,20);ta.setBounds(50,140,230,80);f.add(l1);//在窗口框架中添加文本框、文本域等一系列对象
f.add(te1);f.add(l2);f.add(te2);f.add(b1);f.add(b2);f.add(ta);f.setVisible(true);}
2023/1/11第8章图形用户界面编程148.2AWT8.2.6复选框与单选按钮复选框又称为检测盒,用Checkbox类的对象表示,Checkbox由一个方形的选择区和一个标签组成,它有选中和未选中两种状态,可调用getState(),若复选按钮被选中,则返回true,否则返回false。创建复选框:Checkboxchbox=newCheckbox(“个人爱好”);单选按钮和复选框很类似,所不同的是:单独使用复选框类实现多项选择,而放入一个复选框组(CheckboxGroup)中时,构成一组单选按钮,实现单项选择。单选按钮和复选框一样,也触发ItemEvent事件。
【例8-7】创建复选框与单选按钮。
2023/1/11第8章图形用户界面编程15复选框与单选按钮例8-7: importjava.awt.*;publicclassChebox{publicstaticvoidmain(Stringarg[]){Framef=newFrame("单复选实例");Checkboxcb1=newCheckbox("系统管理员",true);//创建复选框
Checkboxcb2=newCheckbox("管理员",false);CheckboxGroupchg=newCheckboxGroup();Checkboxcb3=newCheckbox("系统用户",chg,true);Checkboxcb4=newCheckbox("普通用户",chg,false); //创建CheckboxGroupchg的Checkbox下两个cb3、cb4对象构成单选按钮
f.setLayout(null);cb1.setBounds(50,40,140,20);//关闭布局设置与复选框定位
cb2.setBounds(50,60,140,20);cb3.setBounds(50,80,140,20);//单选按钮定位
cb4.setBounds(50,100,140,20);f.add(cb1);//标签添加到面板上
f.add(cb2);f.add(cb3);f.add(cb4);f.setSize(200,150);//设置大小尺寸
f.setVisible(true);}}
2023/1/11第8章图形用户界面编程168.2AWT8.2.7Choice下拉列表
下拉列表(Choice)提供一个弹出式的菜单让用户选择,是“多选一”的输入界面,所有选项被折叠起来,只显示最前面的或是用户所选择的那一项,Choice用ItemListener接口来进行监听。创建下拉列表包括创建和添加选项两个步骤:如:Choiceyuchoice=newChoice();//创建下拉列表yuchoice.add(“计算机”);//为下拉列表添加选项yuchoice.add(“数据库”);yuchoice.add(“网格技术”);
2023/1/11第8章图形用户界面编程178.2AWT8.2.8List列表列表(List)是把所有供用户选择的项都显示出来以供选择,列表可以实现“多选多“,即允许复选,列表支持滚动条,可以同时浏览多项。列表可以产生两种事件:当用户单击列表中的某一个选项并选中它时,将产生ItemEvent类的选择事件;当用户双击列表中的某个选项时,将产生ActionEvent类的动作事件。若希望对这两种事件都做出响应,就要把列表分别注册给ItemEvent的监听者ItemListener和ActionEvent的监听者ActionListener。创建列表(List)的方法实例如下:ListMyList=newList(4,true);MyList.add(“北京”);MyList.add(“上海”);MyList.add(“天津”);
2023/1/11第8章图形用户界面编程18【例8-8】下拉列表与列表的创建和使用。
importjava.awt.*;importjava.awt.event.*;publicclassChoiceList{ privateChoiceList() { Framef=newFrame("下拉列表与列表的创建和使用"); f.setLayout(newGridLayout(2,3,25,25)); Choicech=newChoice(); //创建下拉列表
ch.addItem(“计算机”);ch.addItem(“数据库”);//添加对象
ch.addItem(“二叉树”);f.add(ch);//添加下拉列表对象
Listlt=newList(5);lt.addItem(“工人”);//创建列表与添加对象
lt.addItem(“农民”);lt.addItem(“军人”);lt.addItem(“画家”);//添加对象
f.add(lt); //添加列表对象
f.setSize(250,150);//设置大小尺寸
f.setVisible(true); } publicstaticvoidmain(Stringarg[]) { ChoiceListcl=newChoiceList();}
}2023/1/11第8章图形用户界面编程198.2AWT8.2.9Dialog对话框对话框(Dialog)与Frame类似,是有边框、有标题而独立存在的容器,但是Dialog不能作为程序的最外层容器,也不能包含菜单栏。Dialog必须隶属于一个Frame并由这个Frame负责弹出。Dialog可被设置为总是在激活窗口的最前面的模式窗口,即若其不关闭,则不能对其它窗口进行操作。通常Dialog又可起到与用户交互对话窗口作用,创建对话框:Dialogd=newDialog(f,"确认对话框,OK",false);【例8-9】对话框的创建与运行。
2023/1/11第8章图形用户界面编程208.3事件处理机制
8.2.10Canvas画布
对话框(Dialog)与Frame类似,是有边框、有标题而独立存在的容器,但是Dialog不能作为程序的最外层容器,也不能包含菜单栏。Dialog必须隶属于一个Frame并由这个Frame负责弹出。画布(Canvas)代表屏幕上一块空白的矩形区域,它不是容器,而是一个可以在这里绘画,也可捕获用户操作,产生相应事件要在程序中实现KeyListener、MouseListener、MouseMotionListener等接口,从而让程序对用户操作作出响应。用户要创建自己的画布对象的常用方法是继承Canvas类,并且覆盖Canvas类的paint()方法来绘制画布的图形。画布Canvas类构造方法的语句格式为:publicCanvas();【例8-10】画布:Canvas程序设计实例
8.3事件处理机制8.3.1事件处理基础
在设计和实现图形用户界面的交互过程中,主要是完成两大任务:其一是创建窗口并在窗口中添加各种组件,规划组件在窗口中的位置和相关属性,构成图形用户界面的外观效果;其二为设置各类组件对不同事件的响应,从而执行用户在用户界面所实施的交互行为。2023/1/11第8章图形用户界面编程218.3事件处理机制事件及其处理机制如果用户在用户界面执行了一个动作,这将导致一个事件的发生。事件是描述用户所执行的一个操作,所产生的一个行为。三个主要概念:事件、事件源、事件处理方法
事件的接口及方法事件监听器(或谓监视器或处理者)通常是一个类,每一个事件类都有一个对应的事件处理接口。例如,处理键盘输入事件“KeyEvent”类的接口为“KeyListener”
接口,监听器是接口,又称监听器接口。2023/1/11第8章图形用户界面编程222023/1/11第8章图形用户界面编程238.3事件处理机制3.事件处理主要步骤通常,处理的主要步骤如下(设表8-11所示某事件为XxxEvent):选择组件作为事件源,不同类型的组件会产生特定类型的事件。定义要接收并处理某种类型的事件XxxEvent,注册相应的事件监听器类。通过调用组件方法:eventSourceObject.addXxxListener(XxxListener)方法向组件注册事件监听器。实现XxxListener类的实例对象,据此可作为事件的监听器对象。注册与注销监听器常可表述成为如下两种形式:注册监听器:publicvoidadd<ListenerType>(<ListenerType>listener);销监听器:publicvoidremove<ListenerType>(<ListenerType>listener);事件源通过实例化事件类激发并产生事件,事件将被传送给已注册的一个或多个监听器。事件监听器在接收到激发事件信号后负责实现相应的事件处理方法。8.3.2键盘事件
当用户使用键盘上一个键进行操作时,就导致这个组件触发KeyEvent事件,监听器要完成对事件的响应,就要实现KeyListener接口程序中要添加如下语句:importjava.awt.event.*。并实现KeyListener接口,将键盘注册给监听器:eventSourceObject.addKeyListener(listener)。用KeyEvent类的getKeyCode()方法可以判断哪个键被按下、点击或释放并获取其键码值,getKeyChar()方法被按下键的字符。2023/1/11第8章图形用户界面编程248.3.2键盘事件
键盘事件相关方法可参阅表8-11与表8-12。1.简单键盘事件的使用组件使用addKeyListener()方法获得监视器。监视器是一个对象,创建该对象的类必然通过方法:publicvoidkeyPressed(KeyEvente),publicvoidkeyTyped(KeyEvente)和publicvoidKeyReleased(KeyEvente)实现接口。2023/1/11第8章图形用户界面编程258.3.3文本事件
当按下键盘上某个键时,监视器就会感知自动执行keyPressed()方法,且KeyEvent类自动创建一个对象传递给方法keyPressed()中的参数e。方法keyTyped()是keyPressed()和keyReleased()方法的组合。当键被按下又释放时,keyTyped()方法被调用。值(如用KeyEvent类的getKeyCode()方法可判断按下或释放的键及返回一个键码,(如表8-13所示)。2.复合键盘事件的使用键盘事件KeyEvent类对象可调用getModifiers()方法返回下列InputEvent类常量CTRL_MASK、ALT_MASK、SHIFT_MASK的整数值,程序可根据getModifiers()返回的复合键值处理事件。如,对于KeyEvent对象e。当使用CTRL+C复合键时,下面的逻辑表达式为true:e.getModifiers()==InputEvent.CTRL_MASK&&e.getKeyCode()==KeyEvent.VK_C
【例8-11】键盘事件的创建与响应实例。
8.3.3文本事件文本框TextField或文本域TextArea信息发生改变时,产生TextEvent文本事件。要使程序能响应并处理TextEvent事件,要实现TextListener接口,应将TextEvent事件注册给监听器:publicvoidaddTextListener(Listener),并实现TextListener接口中的textValueChanged(TextEvent)方法。【例8-13】文本事件程序设计实例。
2023/1/11第8章图形用户界面编程268.3.4鼠标事件当鼠标键被按下、释放、单击、移动、拖动时会产生MouseEvent鼠标事件,为响应并处理该事件,可通过java.awt.evten包中的MouseListener,MouseMotionListener实现接口。鼠标事件的类型是MouseEvent,组件触发鼠标事件时MouseEvent类自动创建一个事件对象。Java使用MouseListener与MouseMotionListener两接口来处理鼠标事件。1.MouseListener接口MouseListener接口事件源使用addMouseListener(MouseListenerListener)方法获取监视器,用户可通过4种操作使得事件源触发鼠标事件。2.MouseMotionListerner接口
MouseMotionListerner接口事件源使用方法addMouseMotionListener和(MouseMotionList-enerListener)获取监视器,用户通过2种操作使得事件源触发鼠标事件。由于处理鼠标事件的接口中的方法较多,Java提供了相应的适配器类MouseAdapter和MouseMotionAdapter,据此分别实现了MouseListener接口和MouseMotionListener接口。当处理鼠标事件时,程序经常关心鼠标在当前组件坐标系中的位置,以及触发鼠标事件使用的是鼠标的左键或右键等信息。鼠标事件及其相关方法可仔细参阅表8-11与表8-14。3.获取鼠标在系统桌面上的坐标4.弹出式菜单
2023/1/11第8章图形用户界面编程278.3.5窗口事件当一个窗口(Jframe或Frame)被激活、撤销、打开、关闭、图标化等操作时,就引发了窗口事件(WindowEvent)并创建一个窗口事件对象,JFrame类是Window类的子类,Window对象都能触发WindowEvent事件。窗口使用addWindowlistener()方法获得监视器且创建其类对象,可调用getWindow()方法以获取发生窗口事件的窗口,实现WindowListener接口,该接口中有7个不同的方法,详细见表8-11。当单击窗口的图标化按钮时,监视器调用WindowIconified()方法后,还将调用WindowDeactivated()方法。当撤销窗口图标化时,监视器调用WindowDeiconified()方法后还会调用WindowActivated()方法。【例8-15】窗口事件的创建与响应实例。
8.3.6焦点事件如表8-11所示,组件对象可以触发焦点事件,当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEvent事件。组件增加焦点事件监视器可以使用方法:publicvoidaddFocusListener(FocusListenerListener)。创建监视器的类必须实现FocusListener接口,一个组件可以调用:publicbooleanrequestFocusInWindow()方法获得输入焦点。当组件从无输入焦点变成有输入焦点触发焦点事件时,监视器调用类实现接口Focusgained(FocusEvente)方法;当组件从有输入焦点变成无输入焦点触发事件时,监视器调用类实现接口FocusLost(FocusEvente)方法。【例8-16】焦点事件的创建与响应实例。2023/1/11第8章图形用户界面编程288.3.7事件适配器3.事件处理主要步骤为简化编程,Java针对大多数事件监听器接口定义了相应的已经实现了接口功能的实现类:事件适配器。引入事件适配器的宗旨是使监听器的创建变得更加简便。在适配器类中系统自动实现相应监听器接口中所有的方法(只写出空的方法体),但不做任何事情。编程时定义继承事件适配器类的监听器,只重写需要的方法。如Java在提供WindowListener接口的同时,又提供了WindowAdapter类,该类实现了WindowListener类接口。因此,可使用WindowAdapte的子类创建的对象作为监视器,在子类中重写所需要的接口方法即可。常用的事件适配器类有:1
KeyAdapter:键盘事件适配器;1
MouseAdapter:鼠标事件适配器;1
MouseMotionAdapter:鼠标运行事件适配器;1
WindowAdapter:窗口事件适配器;1
FocusAdapter:焦点事件适配器;1
ComponentAdapter:组件事件适配器;1
ContainerAdapter:容器事件适配器;【例8-17】基于事件处理适配器的窗口关闭事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年某咨询公司与某企业咨询服务合同
- 2024年物业买卖信息保密合同
- 镁铬质耐火产品行业行业发展趋势及投资战略研究分析报告
- 高中语文教案模板
- 辅导员个人年终工作总结5篇范文
- 八年级生物教学工作总结【10篇】
- 教师个人工作辞职报告(合集15篇)
- 员工辞职报告(合集15篇)
- 计算机毕业实习报告合集五篇
- 2021年国庆节主题活动总结五篇
- 应用数理统计知到智慧树章节测试课后答案2024年秋中国农业大学
- 文艺复兴史学习通超星期末考试答案章节答案2024年
- 二级公立医院绩效考核三级手术目录(2020版)
- 6人小品《没有学习的人不伤心》台词完整版
- 活套法兰计算表
- 年产十万吨苯乙烯工艺设计
- 储罐受限空间作业方案DOC
- 压力容器耐压试验
- 课程设计---年产5.6万吨乙醇精馏塔的设计
- 部编本小学五年级上册语文期末考试(选择题)专项训练题及答案
- 化工生产车间人员配置方案(精编版)
评论
0/150
提交评论