关于GUI
Swing体系结构AWT体系结构组件概述 AWT事件处理机制AWT事件适配器窗体事件动作事件布局管理器FlowLayout布局管理器BorderLayout布局管理器GridLayout布局管理器GridBagLayout布局管理器CardLayout布局管理器 Graphics类个人笔记⑧
Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI)
java.awt 包 – 主要提供字体/布局管理器
javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
java.awt.event 包 – 事件处理,后台功能的实现。
Swing体系结构
swing在awt基础上,建立的一套图形界面系统,提供更多组件。AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。
Swing的插人式界面样式由一个基于Smalltalk的“模型-视图-控制器(Model-View-Controller,MVC)”设计的组件体系结构和用于管理界面样式的下层构件组成。
swing组件主要可分为三个部分
(1)顶层容器::常用有JFrame,JDialog
(2)中间容器:JPanel,JOptionPane,JScrollPane,JLayeredPane 等,主要以panel结尾。
(3)基本组件:JLabel,JButton,JTextField,JPasswordField,JRadioButton 等。
AWT体系结构
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。
组件概述
1.组件
组件(component)是构成图形用户界面的基本成分和核心元素,组件类(Component)是一个抽象类,是AWT组件类的根类,实际使用的组件都是Component的子类。
2.容器
容器(container)是一种特殊组件,他能容纳其他组件。它在可视区域内显示其他组件。由于容器是组件,在容器中还可以放置其他容器,所以可以使用多层容器构成富有变化的界面。
3.窗口和面板
容器有两种:窗口(window)和面板(panel).
窗口可独立存在,可被移动,也可被最大化和最小化,有标题栏,边框,可添加菜单栏。面板不能独立存在,必须包含在另一个容器中,面板没有标题。没有边框,不可以添加菜单栏,一个窗口可以包含多个面板,一个面板也可以包含另一个面板,但面板不能包含窗口。
窗口类和面板类都是容器类的子类。
4.框架与对话框
窗口类(Window)主要有两个子类:框架类(Frame)和对话框类(Dialog)。
框架是一种带标题栏并且可以改变的大小的窗口,在应用程序中,使用框架作为容器,在框架中放置组件。框架类在实例化时默认是最小化的,不可见的,必须通过setSize()方法设置框架大小,通过setVisible()方法使框架可见。
5.标签
标签类(Label)组件用于显示一行文本信息。标签只能显示信息,不能用于输入。
6.按钮
按钮(button)是最常用的组件,用来控制程序的运行方向,用户单击按钮时,计算机将执行一系列命令,完成一系列功能
按钮通过java.awt的Button类创建。
7.文本编辑组件
文本编辑组件有文本行和文本区。
文本行是一个单行文本编辑框,用于输入一行文字。文本行由java.awt包中的TextField类来创建。
Swing组件的关系图
习题
1、
下列组件中,不属于Container类的子类的是( )
A、Panel
B、Button
C、Window
D、Dialog
2、下列选项中,哪个不是Component的子类( )
A、Button
B、Dialog
C、Label
D、MenuBar
AWT事件处理机制
事件[Event]:用户对组件的一个操作,称之为一个事件;
事件源[Listener]:发生事件的组件就是事件源;
监听器:
事件处理:负责处理事件的方法;
事件监听机制的关系图
习题
1、想实现事件的监听机制,首先需要( )
A、通过addWindowListener()方法为事件源注册事件监听器对象
B、事件监听器调用相应的方法来处理相应的事件
C、定义一个类实现事件监听器的接口
D、实现WindowListener
2、事件处理机制能够让图形界面响应用户的操作,主要包括()
A、事件
B、事件处理
C、事件源
D、以上都是
AWT事件适配器
适配器类:接收窗口事件的抽象适配器类,此类中方法为空,此类创建的目的是为了方便创建监听器对象。
第一层是EventListener顶层事件接口类,它只是定义了一个接口,没有包含任何接口函数。
第二层是AWT的事件监听器接口(以Listener为结尾),每一个监听器接口对应一种窗口事件,其中定义了多个事件处理函数。
第三层是AWT的事件适配器抽象类(以Adapter为结尾),它们分别为对应的监听器接口提供了默认的函数实现。
实例
习题
1、下列选项中,不属于适配器类的是( )
A、WindowAdapter
B、MouseAdapter
C、KeyAdapter
D、AdapterActivator
窗体事件
关于窗体事件的监听
1.添加 窗口事件监听器: addWindowListener( new 自定义的窗口监听器对象
2.自定义 窗口监听器类,此类要实现一个java awt窗口监听器的接口( 名为WindowListener )
实例
点击窗体的X,实现关闭功能
拓展:在监听接口的方法只有两个以内,都没有适配器类
动作事件
动作事件(ActionEvent)
ActionEvent包含一个事件,该事件为执行动作事件ACTION_PERFORMED.触发这个事件的动作为:
1》点击按钮。
2》双击列表中选项。
3》选择菜单项。
4》在文本框中输入回车。
习题
1、处理ActionEvent事件的监听器对象需要实现哪个接口( )
A、ActionListener
B、KeyListener
C、KeyEvent
D、KeyAdapter
2、下列选项中,用于表示动作事件的类是?()
A、KeyListener
B、KeyEvent
C、ActionEvent
D、MenuKeyEvent
3、ActionEvent的对象会被传递给以下哪个事件处理器方法()
A、addChangeListener()
B、addActionListener()
C、stateChanged()
D、actionPerformed()
布局管理器
容器中的组件排放方式,就是布局。
在使用 Swing 向容器添加组件时,需要考虑组件的位置和大小。为了加快开发速度,Java 提供了一些布局管理器,它们可以将组件进行统一管理,这样开发人员就不需要考虑组件是否会重叠等问题。介绍 Swing 提供的 5种布局类型,所有布局都实现 LayoutManager 接口。
AWT提供了以下5种布局管理器类:
FlowLayout布局管理器
FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的默认布局管理器。FlowLayout 会将组件按照从上到下、从左到右的放置规律逐行进行定位。与其他布局管理器不同的是,FlowLayout 布局管理器不限制它所管理组件的大小,而是允许它们有自己的最佳大小。(从左至右,不够换行至下一行第一个位置)
FlowLayout 布局管理器的构造方法如下。
FlowLayout():创建一个布局管理器,使用默认的居中对齐方式和默认 5 像素的水平和垂直间隔。
FlowLayout(int align):创建一个布局管理器,使用默认 5 像素的水平和垂直间隔。其中,align 表示组件的对齐方式,对齐的值必须是 FlowLayoutLEFT、FlowLayout.RIGHT 和 FlowLayout.CENTER,指定组件在这一行的位置是居左对齐、居右对齐或居中对齐。
FlowLayout(int align, int hgap,int vgap):创建一个布局管理器,其中 align 表示组件的对齐方式;hgap 表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素。
()布局管理器使容器中各个构件呈网格布局,平均占据容器空间。
A、FlowLayout
B、BorderLayout
C、GridLayout
D、CardLayout
BorderLayout布局管理器
BorderLayout(边框布局管理器)是 Window、JFrame 和 JDialog 的默认布局管理器。边框布局管理器将窗口分为 5 个区域:North、South、East、West 和 Center。其中,North 表示北,将占据面板的上方;Soufe 表示南,将占据面板的下方;East表示东,将占据面板的右侧;West 表示西,将占据面板的左侧;中间区域 Center 是在东、南、西、北都填满后剩下的区域
BorderLayout 布局管理器的构造方法如下所示。
BorderLayout():创建一个 Border 布局,组件之间没有间隙。
BorderLayout(int hgap,int vgap):创建一个 Border 布局,其中 hgap 表示组件之间的横向间隔;vgap 表示组件之间的纵向间隔,单位是像素。
布局示意图
实例
GridLayout布局管理器
GridLayout(网格布局管理器)为组件的放置位置提供了更大的灵活性。它将区域分割成行数(rows)和列数(columns)的网格状布局,组件按照由左至右、由上而下的次序排列填充到各个单元格中。
GridLayout 的构造方法如下。
GridLayout(int rows,int cols):创建一个指定行(rows)和列(cols)的网格布局。布局中所有组件的大小一样,组件之间没有间隔。
GridLayout(int rows,int cols,int hgap,int vgap):创建一个指定行(rows)和列(cols)的网格布局,并且可以指定组件之间横向(hgap)和纵向(vgap)的间隔,单位是像素。
GridBagLayout布局管理器
GridBagLayout(网格包布局管理器)是在网格基础上提供复杂的布局,是最灵活、 最复杂的布局管理器。GridBagLayout不需要组件的尺寸一致,允许组件扩展到多行多列。每个 GridBagLayout 对象都维护了一组动态的矩形网格单元,每个组件占一个或多个单元,所占有的网格单元称为组件的显示区域。
GridBagLayout 所管理的每个组件都与一个GridBagConstraints约束类的对象相关。
使用GridBagLayout的步骤:
1.创建GridBagLayout对象管理器,
2.创建GridBagConstraints对象,并设置其相关属性
3.调用GridBagLayout对象的setConstraints()方法,来建立GridBagConstraints对象与组件的联系
4.向容器中提那家组件
gridx,gridy(设置网格位置)设置组件所处行与列的起始坐标。例如gridx=0,gridy=0表示将组件放置在0行0列单元格内。gridwidth 和 gridheight(设置网格占几行几列)
用来指定组件显示区域所占的列数和行数,以网格单元而不是像素为单位,默认值为 1。fill(填充方式)
指定组件填充网格的方式,可以是如下值:GridBagConstraints.NONE(默认值)、GridBagConstraints.HORIZONTAL(组件横向充满显示区域,但是不改变组件高度)、GridBagConstraints.VERTICAL(组件纵向充满显示区域,但是不改变组件宽度)以及 GridBagConstraints.BOTH(组件横向、纵向充满其显示区域)。
4.weightx,weighty
设置窗口变大时的缩放比例。weightx 和 weighty 的取值一般在 0.0 与 1.0 之间,数值大表明组件所在的行或者列将获得更多的空间。
实例
CardLayout布局管理器
CardLayout(卡片布局管理器)能够帮助用户实现多个成员共享同一个显不空间,并且一次只显示一个容器组件的内容。
CardLayout 布局管理器将容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件。
实例
习题
1、在CardLayout布局管理中,用于显示parent容器的前一张卡片的方法是( )
A、void previous(Container parent)
B、void show(Container parent,String name)
C、void next(Container parent)
D、void first(Container parent)
2、( )布局管理器使容器中各个构件呈网格布局,平均占据容器空间。
A、FlowLayout
B、BorderLayout
C、GridLayout
D、CardLayout
Graphics类
Java提供的Graphics类是用于绘图和显示格式化文字的工具。绘图必须在一个窗口(容器)中进行,Java小程序Applet就是一个窗口。
Graphics类是所有图形上下文的抽象基类,允许应用程序绘制在各种设备上实现的组件,以及屏幕上的图像。
一个Graphics对象封装了Java支持的基本渲染操作所需的状态信息。
setColor
public abstract void setColor(Color c)将此图形上下文的当前颜色设置为指定的颜色。 使用此图形上下文的所有后续图形操作都使用此指定颜色。
drawLine
public abstract void drawLine(int x1,
int y1,
int x2,
int y2)在该图形上下文的坐标系中的点 (x1, y1)和 (x2, y2)之间绘制一条使用当前颜色的线。
如果觉得《图形化的用户界面——GUI⑧》对你有帮助,请点赞、收藏,并留下你的观点哦!