Java基础案例教程第8章 GUI(图形用户界面课件.ppt
《Java基础案例教程第8章 GUI(图形用户界面课件.ppt》由会员分享,可在线阅读,更多相关《Java基础案例教程第8章 GUI(图形用户界面课件.ppt(67页珍藏版)》请在三一办公上搜索。
1、第八章 GUI(图形用户界面),布局管理器常用事件,AWT事件处理机制常用Swing组件,学习目标,点击查看本小节知识架构,点击查看本小节知识架构,点击查看本小节知识架构,点击查看本小节知识架构,目录,返回目录,8.2.1,8.2.2,FlowLayout,BorderLayout,8.2.3,GridLayout,8.2.4,GridBagLayout,8.2.5,CardLayout,8.2.6,不使用布局管理器,8.2 布局管理器,知识架构,返回目录,8.3.1,8.3.2,8.3.3,事件处理机制,事件适配器,用匿名内部类实现事件处理,8.3 AWT事件处理,知识架构,8.4 常用事件
2、分类,返回目录,8.4.1,8.4.2,8.4.3,窗体事件,鼠标事件,键盘事件,8.4.4,动作事件,知识架构,返回目录,8.6 Swing,8.6.1,8.6.2,8.6.3,8.6.4,8.6.5,8.6.6,8.6.7,8.6.8,Jframe,JDialog,中间容器,文本组件,按钮组件,JComboBox,菜单组件,JTable,知识架构,GUI全称是Graphical User Interface,即图形用户界面。顾名思义,就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种图形界面元素。目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了G
3、UI设计功能。Java中针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing。其中,AWT是SUN公司最早推出的一套API,它需要利用本地操作系统所提供的图形库,属于重量级组件,不跨平台,它的组件种类有限,可以提供基本的GUI设计工具,却无法实现目前GUI设计所需的所有功能。随后,SUN公司对AWT进行改进,提供了Swing组件,Swing组件由纯Java语言编写,属于轻量级组件,可跨平台,Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。Swing会用到AWT中的许多知识,掌握
4、了AWT,学习Swing就变成了一件很容易的事情,因此本章将从AWT开始学习图形用户界面。,GUI(图形用户界面),AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。在JDK中针对每个组件都提供了对应的Java类,这些类都位于java.awt包中,接下来通过一个图例来描述这些类的继承关系,如图所示。从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是Component和MenuComponent。其中,MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AWT组件的父类,它表示一个
5、能以图形化方式显示出来,并可与用户交互的对象。,8.1 AWT概述,Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本组件类是诸如按钮、文本框之类的图形界面元素,而容器类则是通过Component的子类Container实例化的对象。Container类表示容器,它是一种特殊的组件,可以用来容纳其他组件。Container容器又分为两种类型,分别是Window和Panel,接下来对两种类型进行详细讲解。1WindowWindow类是不依赖其他容器而独立存在的容器,它有两个子类,分别是Frame类和Dialog类。Frame类用于创建一个具有
6、标题栏的框架窗口,作为程序的主界面,Dialog类用于创建一个对话框,实现与用户的信息交互,如图所示。,8.1 AWT概述,2PanelPanel也是一个容器,但是它不能单独存在,只能存在其他容器(Window或其子类)中,一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳其他组件。在程序中通常会使用Panel来实现一些特殊的布局。,了解了AWT组件的相关类后,为了使读者对GUI有一个更直观的认识,接下来通过一个案例来创建一个简单的图形界面,请查看教材文件8-1。,案例代码,8.1 AWT概述,8.1小节提到过,组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布
7、局管理器来决定的。在java.awt包中提供了五种布局管理器,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)和CardLayout(卡片布局管理器)。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局管理。例如把一个Frame窗体的布局管理器设置为FlowLayout,代码如下所示:,8.2 布局管理器,流式布局管理器(FlowLayout)是最简单的布局管理器,在
8、这种布局下,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。FlowLayout对象有三个构造方法,如表所示。表中,列出了FlowLayout的三个构造方法,其中,参数align决定组件在每行中相对于容器边界的对齐方式,可以使用该类中提供的常量作为参数传递给构造方法,其中FlowLayout.LEFT用于表示左对齐、FlowLayout.RIGHT用于表示右对齐、FlowLayout.CENTER用于表示居中对齐。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,可以填入一个任意数
9、值。,FlowLayout,8.2 布局管理器,接下来通过一个添加按钮的案例来学习一下FlowLayout布局管理器的用法,请查看教材文件8-2。,案例代码,8.2 布局管理器,BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这五个区域中的任意一个。BorderLayout布局的效果如图所示。从图可以看出BorderLayout边界布局管理器,将容器划分为五个区域,其中箭头是指改变容器大小时,各个区域需要改变的方向。也就是说,在改变容器时NO
10、RTH和SOUTH区域高度不变长度调整,WEST和EAST区域宽度不变高度调整,CENTER会相应进行调整。,BorderLayout,8.2 布局管理器,当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。其中参数comp表示要添加的组件,constraints指定将组件添加到布局中的方式和位置的对象,它是一个Object类型,在传参时可以使用BorderLayout类提供的5个常量,它们分别是EAST、SOUTH、WEST、NORTH和CENTER。,接下来通过一个案例来演示一下BorderLa
11、yout布局管理器对组件布局的效果,请查看教材文件8-3。,案例代码,8.2 布局管理器,GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1列(左上角)的网格中,然后在第1行的网格中从左向右依次放置其他组件,行满后,继续在下一行中从左到右放置组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。接下来学习下GridLayout的构造方法,如表所示。表中,列出了GridLayout的三个构造方法,其中,参数rows代表行数,cols代表列数,hgap
12、和vgap规定水平和垂直方向的间隙。水平间隙指的是网格之间的水平距离,垂直间隙指的是网格之间的垂直距离。,GridLayout,8.2 布局管理器,接下来通过一个案例演示GridLayout布局的用法,请查看教材文件8-4。,案例代码,8.2 布局管理器,GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。使用GridBagLayout布局管理器的步骤如下:(1)创建GridbagLayout布局管理器,并使容器采用该布局管理器(2)创建GridBagC
13、ontraints对象(布局约束条件),并设置该对象的相关属性,GridBagLayout,8.2 布局管理器,(3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联 (4)向容器中添加组件GridBagConstraints对象可以重复使用,只需要改变它的属性即可。如果要向容器中添加多个组件,则重复(2)、(3)、(4)步骤。从上面的步骤可以看出,使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在GridBagConstra
14、ints类中有很多表示约束的属性,下面对GridBagConstraints类的一些常用属性进行介绍,如表所示。,8.2 布局管理器,表8-3中,列出了GridBagConstraints的常用属性,其中,gridx和 gridy用于设置组件左上角所在网格的横向和纵向索引,gridwidth和gridheight用于设置组件横向、纵向跨越几个网格,fill用于设置是否及如何改变组件大小,weightx和weighty用于设置组件在容器中的水平方向和垂直方向的权重。需要注意的是,如果希望组件的大小随着容器的增大而增大,必须同时设置GridBagConstraints对象的fill属性和weigh
15、tx、weighty属性。,8.2 布局管理器,接下来通过一个案例来演示GridBagLayout的用法,请查看教材文件8-5。,案例代码,8.2 布局管理器,在操作程序时,经常会遇到通过选项卡按钮来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器就是卡片布局管理器(CardLayout)。卡片布局管理器将界面看做是一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。在CardLayout布局管理中经常会用到下面几个方法,如表所示。,CardLayout,8.2 布局管理器,接下来通过一个案例来演示这些方法的使用,请查看教材文件8-6。,案例代码
16、,8.2 布局管理器,当一个容器被创建后,它们都会有一个默认的布局管理器。Window、Frame和Dialog的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。如果不希望通过布局管理器来对容器进行布局,也可以调用容器的setLayout(null)方法,将布局管理器取消。在这种情况下,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接收四个参数,分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位。,不使用布局管理器,接下来通过一个案例来演示不使用布局管理器对组件进
17、行布局,请查看教材文件8-7。,案例代码,8.2 布局管理器,8.1小节中的文件8-1实现了一个图形化窗口,单击窗口右上角的关闭按钮会发现窗口无法关闭,这说明该按钮的单击功能没有实现。按理说Frame对象应该实现这个按钮的功能,之所以没有实现,是因为Frame的设计者无法确定用户关闭Frame窗口的方式,例如,是直接关闭窗口还是需要弹出对话框询问用户是否关闭。如果想要关闭窗口,就需要通过事件处理机制对窗口进行监听。事件处理机制专门用于响应用户的操作,比如,想要响应用户的单击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制。在学习如何使用AWT事件处理机制之前,首先向读者介绍几个比较重要的概
18、念,具体如下所示:事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。,事件处理机制,8.3 AWT事件处理,事件源(组件):事件发生的场所,通常就是产生事件的组件。监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。事件处理器:监听器对象对接收的事件对象进行相应处理的方法。上面提到的事件对象、事件源、监听器、事件处理器在整个事件处理机制中都起着非常重要的作用,它们彼此之间有着非常紧密的联系。接下来用一个图例来描述事件处理的工作流程,如图所示。,8.3 AWT事件处理,在程序中,如果想实现事件的监听机制
19、,首先需要定义一个实现了事件监听器接口的类,例如Window类型的窗口需要实现WindowListener。接着通过addWindowListener()方法为事件源注册事件监听器对象,当事件源上发生事件时,便会触发事件监听器对象,由事件监听器调用相应的方法来处理相应的事件。,接下来,通过一个案例来实现对文件8-1中的窗口关闭的功能,请查看教材文件8-8。,案例代码,8.3 AWT事件处理,文件8-8中的MyWindowListener类实现WindowListener接口后,需要实现接口中定义的7个方法,然而在程序中需要用到的只有windowClosing()一个方法,其他六个方法都是空实现
20、,没有发挥任何作用,这样代码的编写明显是一种多余但又必需的工作。针对这样的问题,JDK提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法,但方法中没有任何代码,程序可以通过继承适配器类来达到实现监听器接口的目的。,事件适配器,接下来通过继承适配器类来实现与文件8-8相同的功能,请查看教材文件8-9。,案例代码,8.3 AWT事件处理,文件8-9通过继承适配器类对事件源对象实现了监听,但在实际开发中,为了代码的简洁,经常通过匿名内部类来创建事件的监听器对象,针对所发生的事件进行处理。,用匿名内部类实现事件处理,接下来通过案例来演示如何为窗口添加一个具有单击事件的按
21、钮,请查看教材文件8-10。,案例代码,8.3 AWT事件处理,大部分GUI应用程序都需要使用Window窗体对象作为最外层的容器,可以说窗体对象是所有GUI应用程序的基础,应用程序中通常都是将其他组件直接或者间接地置于窗体中。当对窗体进行操作时,比如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件,JDK中提供了一个类WindowEvent用于表示这些窗体事件。在应用程序中,当对窗体事件进行处理时,首先需要定义一个实现了WindowListener接口的类作为窗体监听器,然后通过addWindowListener()方法将窗体对象与窗体监听器绑定。,窗口事件,接下来通过一个案例来实现对
22、窗体事件的监听,请查看教材文件8-11。,案例代码,8.4 常用事件分类,在图形用户界面中,用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。JDK中提供了一个MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件。处理鼠标事件时,首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类来实现),然后调用addMouseListener()方法将监听器绑定到事件源对象。,鼠标事件,接下来通过一个案例来学习如何监听鼠标事件,请查看教材文件8-12。,案例代码,8.4 常
23、用事件分类,读者可能会问,鼠标的操作分为左键单击双击和右键单击双击,而且还有滚轮。上面只给出这些事件的处理,能满足实际需求吗?答案是肯定的,MouseEvent类中定义了很多常量来标识鼠标动作。如下面的代码所示:从上面的代码可以看出,MouseEvent类中针对鼠标的按键都定义了对应的常量,可以通过MouseEvent对象的getButton()方法获取被操作按键的常量键值,从而判断是哪个按键的操作。另外,鼠标的单击次数也可以通过MouseEvent对象的getClickCount()方法获取到。因此,在鼠标事件中,可以根据不同的操作,做出相应的处理。,8.4 常用事件分类,键盘操作也是最常用
24、的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件。JDK中提供了一个KeyEvent类表示键盘事件,处理KeyEvent事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类。,键盘事件,接下来通过一个案例来学习如何监听键盘事件,请查看教材文件8-13。,案例代码,8.4 常用事件分类,动作事件与前面三种事件有所不同,它不代表某个具体的动作,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。在这里读者不需要关心使用哪种方式对文件进行关闭,只要是对关闭按钮进行操作,即触发了动作事件。在Java中,动作事件用ActionE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java基础案例教程第8章 GUI图形用户界面课件 Java 基础 案例 教程 GUI 图形 用户界面 课件

链接地址:https://www.31ppt.com/p-1869007.html