-图形用户界面剖析讲解课件

上传人:无*** 文档编号:241801687 上传时间:2024-07-25 格式:PPT 页数:57 大小:979.50KB
返回 下载 相关 举报
-图形用户界面剖析讲解课件_第1页
第1页 / 共57页
-图形用户界面剖析讲解课件_第2页
第2页 / 共57页
-图形用户界面剖析讲解课件_第3页
第3页 / 共57页
点击查看更多>>
资源描述
Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面JAVA GUI第九章Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面目标了解 AWT包及其组件掌握如何创建 GUI程序掌握 AWT组件的基本用法掌握如何使用布局管理器构造复杂的布局2Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面Java GUI编程GUIGraphicUserInterface的缩写,图形用户界面的意思。前面编写的程序都是在控制台下进行的,用户交互的形式非常单一,GUI程序就是为了创建所见即所得的用户交互界面而产生。GUI由一些组件组成,这些组件在java中称为Component,比如所见到的诸如窗口、按钮、文本框、单选按钮、多选按钮等等。GUI设计主要包含三方面的工作:创建组件、布局管理和事件处理。3Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面主要图形控件4Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面抽象窗口工具包图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。AWT提供用于创建生动而高效的GUI的各种组件。5Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面Swing GUI继承关系6Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面容器7可以存放组件的区域,可以存放组件的区域,可在容器上进行可在容器上进行绘制和着色绘制和着色 java.awt包中的包中的Container类可直接或间类可直接或间接派生出两个常用容器:接派生出两个常用容器:框架(框架(Frame类)和面板(类)和面板(Panel类)。类)。框架是一个带有边框的独立的窗口。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的面板是包含在窗口中的一个不带边框的区域。区域。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面容器 框架8框架是独立于框架是独立于Applet和浏览器的一个窗口。和浏览器的一个窗口。可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:Frame():创建一个不含标题的标准窗口创建一个不含标题的标准窗口Frame(StringTitle):创建一个含有标题的窗创建一个含有标题的窗口,这个标题是由参数口,这个标题是由参数title指定的。指定的。当一个当一个Frame窗口被创建以后,需要调用窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用方法来设置窗口的大小,并调用setVisible()来显示窗口。来显示窗口。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面容器-面板9面板不是一个单独的窗口,它只是包含面板不是一个单独的窗口,它只是包含在窗口中的一个区域。在窗口中的一个区域。面板是可以将许多组件组合起来的一种面板是可以将许多组件组合起来的一种容器。容器。最简单的创建面板的方式就是通过面板最简单的创建面板的方式就是通过面板的构造函数的构造函数 Panel()Panel()来进行。来进行。必须将面板添加到窗体中。必须将面板添加到窗体中。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面使用容器示例importjava.swing.*;Importjava.awt.*;classPanelTestextendsJPanelpublicstaticvoidmain(Stringargs)PanelTestp=newPanelTest();JFramejf=newJFrame(正在测试面板!);jf.add(p);jf.setSize(300,200);jf.setVisible(true);10使用使用GUIGUI组件必组件必须导入该包须导入该包Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面AWT组件11组件指可以放置在用户界面上的任何东西组件指可以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小。可以将组件设置为可见或重新调整其大小。AWT支持的组件:标签、文本域、文本区、支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。按钮、复选框、选择框等。高级组件包括滚动条、滚动窗格和对话框。高级组件包括滚动条、滚动窗格和对话框。向窗口加入一个组件:首先生成所需组件的向窗口加入一个组件:首先生成所需组件的实例,然后调用实例,然后调用add()方法,此方法是在方法,此方法是在Container类中定义的。类中定义的。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面标签12可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:JLabel():新建一个空标签新建一个空标签JLabel(Stringlabeltext):新建一个包含给定新建一个包含给定文本的标签文本的标签JLabel(Stringlabeltext,intalignment):新新建一个包含给定对齐方式的标签,对齐方式可建一个包含给定对齐方式的标签,对齐方式可以为以为 Label.LEFT、Label.RIGHT 或或 Label.CENTERv通常用来指明项目的用途通常用来指明项目的用途v标签不可以被用户编辑标签不可以被用户编辑Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面文本域13可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:-JTextField():新建一个文本新建一个文本域域 -JTextField(intcolumns):新建一个包含新建一个包含给定列数的文本给定列数的文本域域 -JTextField(Strings):新建一个包含给定新建一个包含给定字符串的文本字符串的文本域域 -JTextField(Strings,intcolumns):新建新建一个包含给定字符串和列数的文本一个包含给定字符串和列数的文本域域 v一种用来输入文本的一种用来输入文本的GUI组组件件v只能接受一行输入只能接受一行输入Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面标签和文本域使用示例importjava.awt.*;importjavax.swing.*;classTextLabelDemoextendsJFrameJLabellblName=newJLabel(“名称:”);JTextFieldtxtName=newJTextField(20);publicTextLabelDemo(Stringtitle)super(title);Containercp=getContentPane();cp.setLayout(newFlowLayout();cp.add(lblName);cp.add(txtName);publicstaticvoidmain(Stringargs)TextLabelDemot=newTextLabelDemo(正在测试组件!);t.setSize(300,200);t.setVisible(true);14Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面文本区15可以通过以下构造函数来创建:可以通过以下构造函数来创建:-JTextArea():新建一个新建一个TextArea-JTextArea(introws,intcols):新建一个包新建一个包含给定行数和列数的含给定行数和列数的TextArea-JTextArea(Stringtext,introws,intcols):新建一个包含给定字符串、行数和列数的新建一个包含给定字符串、行数和列数的J JTextAreav要接受输入多行文本时使用要接受输入多行文本时使用v可以包括滚动条可以包括滚动条.JTextAreatxtComment=newJTextArea();cp.add(txtComment);.Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面按钮16可以使用以下任一构造函数来创建按钮:可以使用以下任一构造函数来创建按钮:-JButton():新建一个空的按钮新建一个空的按钮-JButton(Stringtext):新建一个包含给定新建一个包含给定字符串的按钮字符串的按钮v按钮是任何按钮是任何GUI都都不可或缺的组不可或缺的组件件v用来捕捉用户操作的最为简便的用来捕捉用户操作的最为简便的方式方式.JButtonbtnOk=newJButton(确定确定!);JButtonbtnCancel=newJButton(取消取消!);cp.add(btnOk);cp.add(btnCancel);.Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面布局管理器17用户界面上的组件可以按不同方式排列。用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。幕上任一项目时,就要用到布局管理器。AWT提供一组用来进行布局管理的类,称提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现为布局管理器或布局。所有布局都实现 LayoutManager接口。接口。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面布局类型18Java中的中的布局类型包括以下几种:布局类型包括以下几种:-FlowLayout(流式布局)流式布局)-BorderLayout(边界布局)(边界布局)-GridLayout(网格布局)(网格布局)-GridBagLayout(网格包布局)(网格包布局)-CardLayout(卡片布局)(卡片布局)Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面布局类型的选用19每个布局管理器都有自己特定的用途。每个布局管理器都有自己特定的用途。-要按行和列显示几个同样大小的组件,要按行和列显示几个同样大小的组件,GridLayout会比较合会比较合-要在尽可能大的空间里显示一个组件,就要要在尽可能大的空间里显示一个组件,就要选择选择BorderLayout或或GridBagLayoutProgramming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面如何设置布局20每个容器(每个容器(Container对象)都有一个与对象)都有一个与它相关的缺省的布局管理器。它相关的缺省的布局管理器。-Applet的缺省布局是的缺省布局是FlowLayout在没有设置新的布局前,在容器中添加在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。组件都按照该容器的缺省布局排列。可以通过可以通过setLayout()方法为容器设置新方法为容器设置新的布局。的布局。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面FlowLayout21FlowLayout的构造函数有:的构造函数有:-FlowLayout():生成一个默认的流式布局生成一个默认的流式布局-FlowLayout(intalignment):可以设定每一可以设定每一行组件的对齐方式行组件的对齐方式-FlowLayout(intalignment,inthorz,intvert):可以设定组件间的水平和垂直距离可以设定组件间的水平和垂直距离vApplet和面板的缺省布局和面板的缺省布局v组件从左上角开始按从左组件从左上角开始按从左到右、从上到下的方式排列到右、从上到下的方式排列FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器设置新布局为容器设置新布局Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面BorderLayout 2-122下面是下面是BorderLayout所定义的构造函数:所定义的构造函数:-BorderLayout():生成默认的边界布局生成默认的边界布局-BorderLayout(inthorz,intvert):可可以以设设定定组件间的水平和垂直距离组件间的水平和垂直距离v窗口窗口、框架和对话框框架和对话框等的缺省布局等的缺省布局v组件可被置于容器的组件可被置于容器的北、南、东、西或中间北、南、东、西或中间位置位置Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面BorderLayout 2-2BorderLayout类定义了几个常量值以指定相应区域:-BorderLayout.NORTH对应容器的顶部对应容器的顶部-BorderLayout.EAST对应容器的右部对应容器的右部-BorderLayout.SOUTH对应容器的底部对应容器的底部-BorderLayout.WEST对应容器的左部对应容器的左部-BorderLayout.CENTER对应容器的中部对应容器的中部加入组件方法:加入组件方法:voidadd(ComponentObj,intregion);23.setLayout(newBorderLayout();ButtonbtnEast=newButton(东东);ButtonbtnWest=newButton(西西);ButtonbtnNorth=newButton(北北);ButtonbtnSouth=newButton(南南);ButtonbtnCenter=newButton(中中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);.Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridLayout24GridLayout的构造函数如下所示:的构造函数如下所示:-GridLayout():生成一个单列的网格布局生成一个单列的网格布局-GridLayout(introw,intcol):生生成成一一个个设设定定行行数数和列数的网格布局和列数的网格布局-GridLayout(introw,intcol,inthorz,intvert):可以设置组件之间的水平和垂直间隔可以设置组件之间的水平和垂直间隔v用于将容器区域划分用于将容器区域划分为一个矩形网格为一个矩形网格v组件按行和列排列组件按行和列排列.JButtonbtn;/声明按钮数组声明按钮数组Stringstr=1,2,3,4,5,6,7,8,9;setLayout(newGridLayout(3,3);btn=newJButtonstr.length;/创建按钮数组创建按钮数组for(inti=0;istr.length;i+)btni=newJButton(stri);add(btni);Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridBagLayout 25通过使用以下语法容器可获得通过使用以下语法容器可获得GridBagLayout:GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布要使用此布局,必须提供各组件的大小和布局等信息。局等信息。GridBagConstraints类中包含类中包含GridBagLayout类用来定位及调整组件大类用来定位及调整组件大小所需的全部信息。小所需的全部信息。v组件大小不必相同组件大小不必相同v组件按行和列排列组件按行和列排列v放置顺序不一定为从左放置顺序不一定为从左至右和由上至下至右和由上至下Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridBagConstraints 类 2-126成员变量列表:成员变量列表:-gridx,gridy:指定组件放置于哪个单元中指定组件放置于哪个单元中-gridwidth,gridheight:指定组件将占用多指定组件将占用多少行和多少列少行和多少列-weightx,weighty:指定在一个指定在一个GridBagLayout中应如何分配空间中应如何分配空间,这些变这些变量的缺省值为量的缺省值为0-ipadx,ipady:指定组件的最小高度和宽度指定组件的最小高度和宽度Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridBagConstraints 类2-227成员变量列表:成员变量列表:-fill:指定在单元大于组件的情况下指定在单元大于组件的情况下,组件如组件如何填充此单元何填充此单元,共有共有4可选值。缺省值为:可选值。缺省值为:GridBagConstraints.NONE-anchor:指定将组件放置在单元中的位置,指定将组件放置在单元中的位置,共有共有9个可选值。缺省值为:个可选值。缺省值为:GridBagConstraints.CENTER Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridBagLayoutGBC.fill=GridBagConstraints.BOTH;(按钮可以在水平和垂直两个方向扩展)layout.setConstraints(button1,GBC);add(button1);GBC.gridwidth=GridBagConstraints.RELATIVE;(BOTH依然起作用,紧挨着最后一个按钮)28Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面GridBagLayoutlayout.setConstraints(button2,GBC);add(button2);GBC.gridwidth=GridBagConstraints.REMAINDER;(填充剩余部分)layout.setConstraints(button3,GBC);add(button3);29Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面事件模型目标事件控制的要点AWT事件结构基本事件控制使用多个监听器匿名类30Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面事件控制的要点Java最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。31Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面事件32在在授权事件模型授权事件模型中,事件是一个描述事件中,事件是一个描述事件源状态改变的对象源状态改变的对象。通过鼠标、键盘与通过鼠标、键盘与GUI界面直接或间接界面直接或间接交互都会生成事件。交互都会生成事件。如:按下一个按钮、如:按下一个按钮、通过键盘输入一个字符、选择列表框中的通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。一项、点击一下鼠标等。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面33事件源事件源事件源是一个生成事件的对象事件源是一个生成事件的对象一个事件源可能会生成不同类型的事件一个事件源可能会生成不同类型的事件事件源提供了一组方法,用于为事件注册事件源提供了一组方法,用于为事件注册一个或多个监听器。一个或多个监听器。每种事件的类型都有其自己的注册方法。每种事件的类型都有其自己的注册方法。一般形式为:一般形式为:publicvoidaddListener(TypeListenere)Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面34AWT采取的事件控制过程采取的事件控制过程监听器对象属于一个类的实例,这个类实监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为现了一个特殊的接口,名为“监听者接口监听者接口”事件源是一个对象,它可以注册一个或多事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。个监听器对象,并向其发送事件对象。事件源将在发生事件时向所有注册的监听事件源将在发生事件时向所有注册的监听器发送事件对象。器发送事件对象。监听器对象使用事件对象中的信息来确定监听器对象使用事件对象中的信息来确定它们对事件的响应。它们对事件的响应。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面按钮单击事件示例publicclassMyEventTestextendsPanelButtonmyButton=newButton(蓝色);./创建面板或其他GUI组件MyListenermyAction=newMyListener();MyButton.addActionListener(myAction);privateclassMyListenerimplementsActionListenerpublicMyListener()./初始化publicvoidactionPerformed(ActionEventevent)./需要为事件进行的操作35实现了实现了ActionListener接口的监听器接口的监听器实现了实现了actionPerformed方法,方法,以便根据参数以便根据参数 ActionEvent 对象的信息对事件做出响应对象的信息对事件做出响应为按钮事件为按钮事件注册监听器注册监听器Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面事件体系结构36FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObjectProgramming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面AWT 事件类型 2-137事件类事件类说明说明事件源事件源ActionEvent 通常按下按钮,双击列表项或选通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事中一个菜单项时,就会生成此事件。件。Button、List、MenuItem、TextField AdjustmentEvent 操纵滚动条时会生成此事件。操纵滚动条时会生成此事件。Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当单击复选框或列表项时,或者当一个选择框或一个可选菜单的项一个选择框或一个可选菜单的项被选择或取消时生成此事件。被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、List FocusEvent 组件获得或失去键盘焦点时会生组件获得或失去键盘焦点时会生成此事件。成此事件。ComponentProgramming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面AWT 事件类型 2-238事件类事件类说明说明事件源事件源KeyEvent 接收到键盘输入时会生成此事件。接收到键盘输入时会生成此事件。Component MouseEvent 拖动、移动、单击、按下或释放拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组鼠标或在鼠标进入或退出一个组件时,会生成此事件。件时,会生成此事件。Component ContainerEvent 将组件添加至容器或从中删除时将组件添加至容器或从中删除时会生成此事件。会生成此事件。Container TextEvent 在文本区或文本域的文本改变时在文本区或文本域的文本改变时会生成此事件会生成此事件 。TextField、TextArea WindowEvent 当一个窗口激活、关闭、当一个窗口激活、关闭、失效、失效、恢复、最小化、打开或退出时会恢复、最小化、打开或退出时会生成此事件。生成此事件。Window Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面监听器接口39监听器通过实现监听器通过实现java.awt.event包中定义包中定义的一个或多个接口来创建。的一个或多个接口来创建。在发生事件时,事件源将调用监听器定义在发生事件时,事件源将调用监听器定义的相应方法。的相应方法。有兴趣接收事件的任何监听器类都必须实有兴趣接收事件的任何监听器类都必须实现监听器接口。现监听器接口。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面监听器接口列表 2-140事件监听器事件监听器 方法方法 ActionListener actionPerformed AdjustmentListener adjustmentValueChanged ComponentListener componentResizedcomponentMovedcomponentShowncomponentHidden ContainerListener componentAddedcomponentRemoved FocusListener focusLost、focusGained ItemListener itemStateChanged Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面监听器接口列表 2-241事件监听器事件监听器 方法方法 KeyListener keyPressed、keyReleasedkeyTyped MouseListener mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased MouseMotionListener mouseDragged、mouseMoved TextListener textChanged WindowListener windowActivated、windowDeactivated windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面适配器类42适配器类适配器类事件监听器接口事件监听器接口ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener 为了使事件处理变得简单,为了使事件处理变得简单,Java Java 为为具有多个方法的监听器接口提供适具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,个事件监听器接口中的所有的方法,但这些方法都是空方法。但这些方法都是空方法。privateclassMyMouseAdapterextendsMouseAdapterprivateColorbgColor;publicMyMouseAdapter(Colorc)bgColor=c;publicvoidmouseClicked(MouseEventmevent)setBackground(bgColor);repaint();Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面事件源、监听器和监听器接口事件源描述事件对象中事件的性质。每个事件源都被映射至一个或多个事件监听器,发生事件时需要调用这些事件监听器。事件源随后通过将事件对象传递至监听器接口类的方法,将事件信息发送到监听器接口。监听器分析事件对象找出事件信息,以便给出响应。43Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面焦点事件44任何任何GUI对象的获得或失去焦点都被视为对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:焦点监听器需要实现两个方法:focusGained和和focusLost。要进行错误检查或数据校验时,对焦点的要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。捕捉就显得尤其重要。Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面焦点事件示例45publicvoidfocusLost(FocusEventevent)if(event.getComponent()=ccField&!event.isTemporary()if(!checkFormat(ccField.getText()ccField.requestFocus();实现了当捕捉到失去实现了当捕捉到失去焦点事件时如何响应焦点事件时如何响应 检验失去焦点的组件中检验失去焦点的组件中的文本格式是否正确的文本格式是否正确 如果格式不正确,将焦如果格式不正确,将焦点移回到该组件点移回到该组件 Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面窗口事件当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。需要实现的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened46Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面窗口事件示例47classMyFrameextendsFramebooleanw;publicMyFrame()w=false;setTitle(测试测试适配器适配器类类);setSize(300,200);MyPanelpanel=newMyPanel();add(panel);addWindowListener(newMyWindowAdapter();privateclassMyWindowAdapterextendsWindowAdapterpublicvoidwindowClosing(WindowEventwevent)if(w)dispose();elseSystem.exit(0);实现了实现了w windowClosing方法方法,以响应窗口关闭时的以响应窗口关闭时的事件事件importjava.awt.*;importjava.awt.event.*;publicclassMyAdapterDemopublicstaticvoidmain(Stringargs)MyFramefrm=newMyFrame();frm.show();Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面48在按下或释放键盘上的一个键时,将生在按下或释放键盘上的一个键时,将生成键盘事件。成键盘事件。keyEvent类包含用来表示按下或点击类包含用来表示按下或点击的键的常量。的键的常量。生成生成keyEvent时将调用时将调用keyListener。如果程序需要处理特殊的键,如方向键,如果程序需要处理特殊的键,如方向键,需要通过调用需要通过调用keyPressed()方法来处理。方法来处理。键盘事件键盘事件publicvoidkeypressed(keyEventk)intkeyCode=k.getKeyCode();if(keyCode=k.VK_RIGHT&k.isShiftDown().检测用户是否按下了检测用户是否按下了Shift+Shift+右箭头键右箭头键 Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面键盘事件示例classMyPanelextendsPanelpublicMyPanel()TextFieldtField=newTextField(20);add(tField);MyKeyAdapterbAction=newMyKeyAdapter();tField.addKeyListener(bAction);privateclassMyKeyAdapterextendsKeyAdapterpublicvoidkeyPressed(KeyEventkevent)setBackground(Color.blue);repaint();publicvoidkeyReleased(KeyEventkevent)setBackground(Color.red);repaint();publicvoidkeyTyped(KeyEventkevent)if(kevent.getKeyChar()=x)System.exit(0);49按下键时背景变为兰色,按下键时背景变为兰色,释放键时背景变为红色,释放键时背景变为红色,输入字符输入字符x x时退出程序时退出程序Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面50鼠标事件鼠标事件任何时候移动、单击、按下或释放鼠标,任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。都会生成鼠标事件。鼠标事件有两种监听器:鼠标事件有两种监听器:MouseListener和和MouseMotionListener。需要实现的方法如下:需要实现的方法如下:mouseClicked、mouseEntered、mouseExitedmousePressed、mouseReleasedmouseDragged、mouseMovedProgramming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面publicvoidmouseClicked(MouseEventm)intx=m.getX();inty=m.getY();intclickCount=m.getClickCount();if(clickCount=2)Graphicsg=getGraphics();g.drawString(鼠标双击!,x,y);g.dispose();51鼠标事件示例鼠标事件示例获得点击鼠标时鼠标获得点击鼠标时鼠标指针的指针的x x及及y y坐标坐标 确定单击和双击确定单击和双击Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面多个监听器所有AWT事件源均支持监听器的多点传送模型。可以将同一事件发送到多个监听器对象。需要向一个事件源添加多个监听器,以便使所有注册的监听器都能够对事件源生成的事件作出响应。52Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面匿名类53classMyPanelextendsPanelpublicMyPanel()ButtonbButton=newButton(蓝蓝色色);add(bButton);bButton.addMouseListener(newMouseAdapter()publicvoidmouseClicked(MouseEventmevent)setBackground(Color.blue);repaint(););v匿名类就是没有指定名称的类匿名类就是没有指定名称的类v可以便于编写事件处理程序可以便于编写事件处理程序Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面总结 1抽象窗口工具包(AWT)是一组类,它允许创建图形用户界面,并能够通过键盘和鼠标响应用户的操作。容器指可以存放组件的区域,两种常用容器类:框架(Frame类)和面板(Panel类)。框架是一个单独的窗口,而面板只是包含在窗口中的一个区域。AWT支持下列类型的组件:标签、文本域、文本区、按钮、复选框、列表框等。54Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面总结 2布局管理器类提供控制 GUI组件物理布局的一种方式。以下是几种不同类型的布局:-FlowLayout-BorderLayout-CardLayout-GridLayout-GridBagLayout布局可通过 setLayout()方法进行设置。55Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面总结 3FlowLayout是 Applet和 面板的缺省布局管理器。组件从左上角到右下角进行排列。BorderLayout 按北、南、东、西、中的不同区域划分将组件排列于容器中。GridLayout将组件按行和列排列。所有组件大小相同。GridBagLayout能将组件放置在最精确的位置。各组件的大小可以不同。CardLayout可存储几个不同的布局管理器 56Programming Language Java:西安邮电学院计算机学院西安邮电学院计算机学院王博王博第第第第九九九九章章章章图图图图形形形形用用用用户户户户界界界界面面面面总结 4Java最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。57
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!