GUI(图形用户接口)

第8章 GUI(图形用户接口)

Swing 组件、容器与布局、事件处理——给程序做一个能点的界面。

界面101 页课件8 个知识点

本章学习目标

  • 能创建窗口并添加按钮、文本框等组件
  • 会用常见布局管理器排布组件
  • 能给组件注册事件监听器并响应点击
  • 能做一个简单的小工具界面

本章导览

核心内容

8.1

Swing概述

什么是AWT?

定义:在早期JDK1.0发布时,Sun公司就为GUI开发提供了一套基础类库,这套类库被称为AWT(Abstract Window Toolkit),即抽象窗口工具包。

目的:AWT的起初设想就是为了统一实现不同操作系统的图像界面。

缺陷:

不同操作系统图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在,为此AWT不得不通过牺牲功能来实现平台无关性。

AWT是一个重量级组件,使用麻烦,设计出的图形界面不够美观且功能有限。

什么是Swing?

定义:Swing是在原有的AWT的基础上进行了补充和改进,提供了更加丰富的组件和功能,来满足GUI设计的一切需求。

说明:

Swing是一种轻量级组件,它由Java语言开发,同时底层以AWT为基础。

同AWT相比,在实际开发中,更多的是使用Swing进行图形用户界面开发。

Swing组件为实现图形用户界面提供了很多基础类库,多数位于java.awt、javax.swing包及其子包下。

Swing组件继承关系:

Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了2个主要分支:容器分支(包括Window窗口和Panel面板)和组件分支。

容器分支就是为了实现图形用户界面窗口容器而设计的。

组件分支则是为了实现向容器中填充数据、元素以及人机交互组件等功能。

Swing组件类中,常用的顶级容器类包括有JApplet、JFrame和JDialog。

常用组件AbstractButton类及其子类是用来定义按钮常见行为的工具类。

JTextComponent类及其子类就是用来定义文本内容编辑区域的工具类。

第13页 · 课件截图
第13页 · 课件截图
📄 展开课件原文(第 11–14 页,共 4 页)
第 11 页

8.1 Swing概述

什么是AWT?

定义:在早期JDK1.0发布时,Sun公司就为GUI开发提供了一套基础类库,这套类库被称为AWT(Abstract Window Toolkit),即抽象窗口工具包。

目的:AWT的起初设想就是为了统一实现不同操作系统的图像界面。

缺陷:

不同操作系统图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在,为此AWT不得不通过牺牲功能来实现平台无关性。

AWT是一个重量级组件,使用麻烦,设计出的图形界面不够美观且功能有限。

第 12 页

8.1 Swing概述

什么是Swing?

定义:Swing是在原有的AWT的基础上进行了补充和改进,提供了更加丰富的组件和功能,来满足GUI设计的一切需求。

说明:

Swing是一种轻量级组件,它由Java语言开发,同时底层以AWT为基础。

同AWT相比,在实际开发中,更多的是使用Swing进行图形用户界面开发。

Swing组件为实现图形用户界面提供了很多基础类库,多数位于java.awt、javax.swing包及其子包下。

第 13 页

8.1 Swing概述

Swing组件继承关系:

第 14 页

8.1 Swing概述

说明:

Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了2个主要分支:容器分支(包括Window窗口和Panel面板)和组件分支。

容器分支就是为了实现图形用户界面窗口容器而设计的。

组件分支则是为了实现向容器中填充数据、元素以及人机交互组件等功能。

Swing组件类中,常用的顶级容器类包括有JApplet、JFrame和JDialog。

常用组件AbstractButton类及其子类是用来定义按钮常见行为的工具类。

JTextComponent类及其子类就是用来定义文本内容编辑区域的工具类。

8.2

Swing顶级容器

说明:

在Swing组件中,最常见的一个容器就是JFrame。

JFrame是一个独立存在的顶级容器(也叫窗口),不能放置在其他容器之中。

JFrame支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等。

示例:

JAVA
private static void createAndShowGUI() {
// 创建并设置JFrame容器窗口
JFrame frame = new JFrame("JFrameTest");
// 设置关闭窗口时的默认操作
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(250, 150); // 设置窗口尺寸
frame.setVisible(true); // 展示JFrame容器窗口

}

JAVA
public static void main(String[] args) {
//使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序
SwingUtilities.invokeLater(Example01::createAndShowGUI);

结果:

示例通过JFrame类创建了一个窗体,并指定窗体对象标题为“JFrameTest”。

通过JFrame类的相关方法分别设置了窗体对象关闭时的操作、窗体尺寸大小以及窗体信息可见。

在main()方法中,使用了javax.swing包下中SwingUtilities(封装有一系列操作Swing的方法集合工具类)工具类的invokeLater()方法执行了GUI程序。

JDialog是Swing的另外一个顶级容器,通常用来表示对话框窗口。

JDialog对话框可分为两种:模态对话框和非模态对话框。

是指用户需要等到处理完对话框后才能继续与其他窗口交互。

模态对话框

是指允许用户在处理对话框的同时与其他窗口交互。

非模态对话框

VS

说明:对话框是模态或者非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建JDialog对象后调用它的setModal()方法来进行设置。

常用构造方法:

课件表格 · 第19页
方法声明功能描述
JDialog(Frame owner)构造方法,用来创建一个非模态的对话框,owner为对话框所有者(顶级窗口JFrame)
JDialog(Frame owner,String title)构造方法,创建一个具有指定标题的非模态对话框
JDialog(Frame owner,boolean modal)创建一个有指定模式的无标题对话框,默认值false(即非模态对话框)
JAVA
frame.setSize(350, 150);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "JDialog对话框",true);
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
dialog.setSize(200, 100);
dialog.setVisible(true);
SwingUtilities.invokeLater(Example02::createAndShowGUI);

虽然JFrame和JDialog都可以创建顶级容器窗口,但JDialog创建的窗口右上角没有放大和缩小功能。

由于创建JDialog容器对象时,设置的模态参数modal为true,所以在操作时,必须先关闭JDialog对话框后才可以与JFrame窗口进行交互。

第17页 · 课件截图
第17页 · 课件截图
第21页 · 课件截图
第21页 · 课件截图
📄 展开课件原文(第 15–21 页,共 7 页)
第 15 页

8.2 Swing顶级容器

8.2.1 JFrame

说明:

在Swing组件中,最常见的一个容器就是JFrame。

JFrame是一个独立存在的顶级容器(也叫窗口),不能放置在其他容器之中。

JFrame支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等。

第 16 页

示例:

private static void createAndShowGUI() {

// 创建并设置JFrame容器窗口

JFrame frame = new JFrame("JFrameTest");

// 设置关闭窗口时的默认操作

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(250, 150); // 设置窗口尺寸

frame.setVisible(true); // 展示JFrame容器窗口

}

public static void main(String[] args) {

//使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序

SwingUtilities.invokeLater(Example01::createAndShowGUI);

}

8.2 Swing顶级容器

第 17 页

8.2 Swing顶级容器

结果:

说明:

示例通过JFrame类创建了一个窗体,并指定窗体对象标题为“JFrameTest”。

通过JFrame类的相关方法分别设置了窗体对象关闭时的操作、窗体尺寸大小以及窗体信息可见。

在main()方法中,使用了javax.swing包下中SwingUtilities(封装有一系列操作Swing的方法集合工具类)工具类的invokeLater()方法执行了GUI程序。

8.2.1 JFrame

第 18 页

8.2 Swing顶级容器

8.2.2 JDialog

说明:

JDialog是Swing的另外一个顶级容器,通常用来表示对话框窗口。

JDialog对话框可分为两种:模态对话框和非模态对话框。

是指用户需要等到处理完对话框后才能继续与其他窗口交互。

模态对话框

是指允许用户在处理对话框的同时与其他窗口交互。

非模态对话框

VS

第 19 页

8.2 Swing顶级容器

8.2.2 JDialog

说明:对话框是模态或者非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建JDialog对象后调用它的setModal()方法来进行设置。

常用构造方法:

方法声明功能描述
JDialog(Frame owner)构造方法,用来创建一个非模态的对话框,owner为对话框所有者(顶级窗口JFrame)
JDialog(Frame owner,String title)构造方法,创建一个具有指定标题的非模态对话框
JDialog(Frame owner,boolean modal)创建一个有指定模式的无标题对话框,默认值false(即非模态对话框)
第 20 页

示例:

private static void createAndShowGUI() {

JFrame frame = new JFrame("JFrameTest");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(350, 150);

frame.setVisible(true);

JDialog dialog = new JDialog(frame, "JDialog对话框",true);

dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);

dialog.setSize(200, 100);

dialog.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(Example02::createAndShowGUI);

}

8.2 Swing顶级容器

第 21 页

8.2 Swing顶级容器

结果:

说明:

虽然JFrame和JDialog都可以创建顶级容器窗口,但JDialog创建的窗口右上角没有放大和缩小功能。

由于创建JDialog容器对象时,设置的模态参数modal为true,所以在操作时,必须先关闭JDialog对话框后才可以与JFrame窗口进行交互。

8.2.2 JDialog

8.3

布局管理器

说明:Swing组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。

分类:

GridBagLayout(网格包布局管理器)

5

GridLayout(网格布局管理器)

6

GroupLayout(分组布局管理器)

7

SpringLayout(弹性布局管理器)

8

BorderLayout(边界布局管理器)

1

BoxLayout(箱式布局管理器)

2

CardLayout(卡片布局管理器)

3

FlowLayout(流式布局管理器)

4

说明:

BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER)。

组件可以被放置在这五个区域中的任意一个位置。

官方布局效果图:

使用:

向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。

参数comp表示要添加的组件,constraints指定将组件添加到布局中的位置,它是一个Object类型。

传参时可以使用BorderLayout类提供的5个常量设置组件位置,它们分别是PAGE_START、PAGE_END、LINE_START、LINE_END和CENTER。

BorderLayout的好处就是可以限定各区域的边界,当用户改变容器窗口大小时,各个组件的相对位置不变。

向BorderLayout的布局管理器添加组件时,如果不指定添加到哪个区域,则默认添加到CENTER区域。

每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

案例演示(参考教材文件8-3)

小提示

在使用BorderLayout边界布局管理器过程中,当使用add(Component comp,Object constraints)方法向容器区域中添加指定组件和位置时,除了可以使用前面介绍的PAGE_START、PAGE_END、LINE_START、LINE_END和CENTER常量参数指定组件位置,也可以使用NORTH、SOUTH、EAST、WEST和CENTER常量参数来指定组件位置,只不过在文件8-3中使用的常量参数是JDK 1.4版本开始出现的,适合不同语言标准,也是官方相对推荐的。

FlowLayout(流式布局管理器)是最简单的布局管理器。

在这种布局下,容器会将组件按照添加顺序从左向右放置,当到达容器的边界时,会自动将组件放到下一行的开始位置。

这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。

构造方法:

参数align决定组件在每行中相对于容器边界的对齐方式,分别为左对齐、右对齐、居中对齐。

对齐方式可以使用该类中提供的常量FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER表示。

参数hgap和参数vgap分别设定组件之间的水平和垂直间距,可以填入一个任意数值。

课件表格 · 第28页
方法声明功能描述
FlowLayout()组件默认居中对齐,水平、垂直间距默认为5个单位
FlowLayout(int align)指定组件相对于容器的对齐方式,水平、垂直间距默认为5个单位
FlowLayout(int align,int hgap,int vgap)指定组件的对齐方式和水平、垂直间距

效果:

案例演示(参考教材文件8-4)

GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加一个组件。

添加到容器中的组件会从左向右、从上向下依次填充到网格中。

与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域

说明:参数rows代表行数,cols代表列数,hgap和vgap规定窗格之间水平和垂直方向的间距。

课件表格 · 第31页
方法声明功能描述
GridLayout()默认只有一行,每个组件占一列
GridLayout(int rows,int cols)指定容器的行数和列数
GridLayout(int rows,int cols,int hgap,int vgap)指定容器的行数和列数以及组件之间的水平、垂直间距

案例演示(参考教材文件8-5)

特点:组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变,组件始终占据网格的整个区域。

缺点:总是忽略组件的最佳大小,所有组件的宽高都相同。

第23页 · 课件截图
第23页 · 课件截图
第29页 · 课件截图
第29页 · 课件截图
第32页 · 课件截图
第32页 · 课件截图
📄 展开课件原文(第 22–32 页,共 11 页)
第 22 页

8.3 布局管理器

说明:Swing组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。

分类:

GridBagLayout(网格包布局管理器)

5

GridLayout(网格布局管理器)

6

GroupLayout(分组布局管理器)

7

SpringLayout(弹性布局管理器)

8

BorderLayout(边界布局管理器)

1

BoxLayout(箱式布局管理器)

2

CardLayout(卡片布局管理器)

3

FlowLayout(流式布局管理器)

4

第 23 页

8.3 布局管理器

8.3.1 BorderLayout

说明:

BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是页头(PAGE_START)、页尾(PAGE_END)、行首(LINE_START)、行尾(LINE_END)、中部(CENTER)。

组件可以被放置在这五个区域中的任意一个位置。

官方布局效果图:

第 24 页

8.3 布局管理器

8.3.1 BorderLayout

使用:

向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。

参数comp表示要添加的组件,constraints指定将组件添加到布局中的位置,它是一个Object类型。

传参时可以使用BorderLayout类提供的5个常量设置组件位置,它们分别是PAGE_START、PAGE_END、LINE_START、LINE_END和CENTER。

第 25 页

8.3 布局管理器

8.3.1 BorderLayout

说明:

BorderLayout的好处就是可以限定各区域的边界,当用户改变容器窗口大小时,各个组件的相对位置不变。

向BorderLayout的布局管理器添加组件时,如果不指定添加到哪个区域,则默认添加到CENTER区域。

每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

案例演示(参考教材文件8-3)

第 26 页

8.3 布局管理器

小提示

在使用BorderLayout边界布局管理器过程中,当使用add(Component comp,Object constraints)方法向容器区域中添加指定组件和位置时,除了可以使用前面介绍的PAGE_START、PAGE_END、LINE_START、LINE_END和CENTER常量参数指定组件位置,也可以使用NORTH、SOUTH、EAST、WEST和CENTER常量参数来指定组件位置,只不过在文件8-3中使用的常量参数是JDK 1.4版本开始出现的,适合不同语言标准,也是官方相对推荐的。

第 27 页

8.3 布局管理器

8.3.2 FlowLayout

说明:

FlowLayout(流式布局管理器)是最简单的布局管理器。

在这种布局下,容器会将组件按照添加顺序从左向右放置,当到达容器的边界时,会自动将组件放到下一行的开始位置。

这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。

第 28 页

8.3 布局管理器

构造方法:

说明:

参数align决定组件在每行中相对于容器边界的对齐方式,分别为左对齐、右对齐、居中对齐。

对齐方式可以使用该类中提供的常量FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER表示。

参数hgap和参数vgap分别设定组件之间的水平和垂直间距,可以填入一个任意数值。

方法声明功能描述
FlowLayout()组件默认居中对齐,水平、垂直间距默认为5个单位
FlowLayout(int align)指定组件相对于容器的对齐方式,水平、垂直间距默认为5个单位
FlowLayout(int align,int hgap,int vgap)指定组件的对齐方式和水平、垂直间距
第 29 页

8.3 布局管理器

8.3.2 FlowLayout

效果:

案例演示(参考教材文件8-4)

第 30 页

8.3 布局管理器

8.3.3 GridLayout

说明:

GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加一个组件。

添加到容器中的组件会从左向右、从上向下依次填充到网格中。

与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域

第 31 页

8.3 布局管理器

构造方法:

说明:参数rows代表行数,cols代表列数,hgap和vgap规定窗格之间水平和垂直方向的间距。

方法声明功能描述
GridLayout()默认只有一行,每个组件占一列
GridLayout(int rows,int cols)指定容器的行数和列数
GridLayout(int rows,int cols,int hgap,int vgap)指定容器的行数和列数以及组件之间的水平、垂直间距
第 32 页

8.3 布局管理器

8.3.3 GridLayout

效果:

案例演示(参考教材文件8-5)

特点:组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变,组件始终占据网格的整个区域。

缺点:总是忽略组件的最佳大小,所有组件的宽高都相同。

8.4

事件处理

定义:Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的单击鼠标、按下键盘等操作。

Swing事件处理涉及的三类对象:

事件源

(Event Source)

监听器

(Listener)

事件对象

(Event)

事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等。

封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。

负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。

说明:事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。

外部

动作

事件源(组件)

监听器(含处理器)

1、将监听器注册到事件源

2、触发事件源上的事件

3、产生并传递事件对象

4、接收事件对象,激活事件处理器,实现预定功能

效果:

案例演示(参考教材文件8-6)

1、创建事件源

2、自定义事件监听器

3、为事件源注册监听器

除了一些常见的按钮、键盘等组件可以作为事件源外,包括JFrame窗口在内的顶级容器也可以作为事件源;

根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的Java类,必须实现XxxListener接口(根据组件触发的动作进行区分,如WindowListener用于监听窗口事件,ActionListener用于监听动作事件);

使用addXxxListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听的事件后,就会触发绑定的事件监听器,然后由监听器中的方法进行相应处理。

鼠标事件(MouseEvent)

2

键盘事件(KeyEvent)

3

动作事件(ActionEvent)

4

窗体事件(WindowEvent)

1

主要事件分类

说明:

对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件。

Java中提供了一个WindowEvent类用于表示窗体事件。

使用:

首先需要定义一个实现了WindowListener接口的类作为窗体监听器;

然后通过addWindowListener()方法将窗体对象与窗体监听器进行绑定。

窗体事件

案例演示(参考教材文件8-7)

分别执行最小化、单击任务栏图标、单击关闭按钮时

用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。

Java中提供了一个MouseEvent类用于表示鼠标事件。

几乎所有的组件都可以产生鼠标事件。

首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类来实现);

然后调用addMouseListener()方法将监听器绑定到事件源对象。

鼠标事件

案例演示(参考教材文件8-8)

先把鼠标移进按钮区域,接着单击按钮然后释放,再移出按钮区域

说明:MouseEvent类中定义了很多常量来识别鼠标动作。

MouseEvent.BUTTON1:用来判定鼠标左击事件;

MouseEvent.BUTTON3:用来判定鼠标右击事件;

MouseEvent.BUTTON2:用来判定鼠标滚轮点击事件;

键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件。

Java中提供了一个KeyEvent类表示键盘事件。

处理键盘事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类;

然后调用addKeyListener()方法将监听器绑定到事件源对象。

键盘事件

案例演示(参考教材文件8-9)

在窗口中,依次输入键盘上的a、s、1字符

动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作发生了。

例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。

在Java中,动作事件用ActionEvent类表示。

使用:处理动作事件的监听器对象需要实现ActionListener接口。

动作事件

第39页 · 课件截图
第39页 · 课件截图
第39页 · 课件截图
第39页 · 课件截图
第41页 · 课件截图
第41页 · 课件截图
第41页 · 课件截图
第41页 · 课件截图
📄 展开课件原文(第 33–45 页,共 13 页)
第 33 页

8.4 事件处理

8.4.1 事件处理机制

定义:Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的单击鼠标、按下键盘等操作。

Swing事件处理涉及的三类对象:

事件源

(Event Source)

监听器

(Listener)

事件对象

(Event)

事件发生的场所,通常就是产生事件的组件,例如窗口、按钮、菜单等。

封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。

负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。

第 34 页

8.4 事件处理

8.4.1 事件处理机制——事件处理流程

说明:事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。

外部

动作

事件源(组件)

监听器(含处理器)

事件对象

1、将监听器注册到事件源

2、触发事件源上的事件

3、产生并传递事件对象

4、接收事件对象,激活事件处理器,实现预定功能

第 35 页

8.4 事件处理

8.4.1 事件处理机制

效果:

案例演示(参考教材文件8-6)

第 36 页

8.4 事件处理

8.4.1 事件处理机制——主要步骤

1、创建事件源

2、自定义事件监听器

3、为事件源注册监听器

除了一些常见的按钮、键盘等组件可以作为事件源外,包括JFrame窗口在内的顶级容器也可以作为事件源;

根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的Java类,必须实现XxxListener接口(根据组件触发的动作进行区分,如WindowListener用于监听窗口事件,ActionListener用于监听动作事件);

使用addXxxListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听的事件后,就会触发绑定的事件监听器,然后由监听器中的方法进行相应处理。

第 37 页

8.4 事件处理

8.4.2 Swing常用事件处理

鼠标事件(MouseEvent)

2

键盘事件(KeyEvent)

3

动作事件(ActionEvent)

4

窗体事件(WindowEvent)

1

主要事件分类

第 38 页

8.4 事件处理

说明:

对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件。

Java中提供了一个WindowEvent类用于表示窗体事件。

使用:

首先需要定义一个实现了WindowListener接口的类作为窗体监听器;

然后通过addWindowListener()方法将窗体对象与窗体监听器进行绑定。

窗体事件

第 39 页

8.4 事件处理

效果:

案例演示(参考教材文件8-7)

窗体事件

分别执行最小化、单击任务栏图标、单击关闭按钮时

第 40 页

8.4 事件处理

说明:

用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。

Java中提供了一个MouseEvent类用于表示鼠标事件。

几乎所有的组件都可以产生鼠标事件。

使用:

首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类来实现);

然后调用addMouseListener()方法将监听器绑定到事件源对象。

鼠标事件

第 41 页

8.4 事件处理

效果:

案例演示(参考教材文件8-8)

先把鼠标移进按钮区域,接着单击按钮然后释放,再移出按钮区域

鼠标事件

第 42 页

8.4 事件处理

说明:MouseEvent类中定义了很多常量来识别鼠标动作。

MouseEvent.BUTTON1:用来判定鼠标左击事件;

MouseEvent.BUTTON3:用来判定鼠标右击事件;

MouseEvent.BUTTON2:用来判定鼠标滚轮点击事件;

鼠标事件

第 43 页

8.4 事件处理

说明:

键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件。

Java中提供了一个KeyEvent类表示键盘事件。

使用:

处理键盘事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类;

然后调用addKeyListener()方法将监听器绑定到事件源对象。

键盘事件

第 44 页

8.4 事件处理

效果:

案例演示(参考教材文件8-9)

在窗口中,依次输入键盘上的a、s、1字符

键盘事件

第 45 页

8.4 事件处理

说明:

动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作发生了。

例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。

在Java中,动作事件用ActionEvent类表示。

使用:处理动作事件的监听器对象需要实现ActionListener接口。

动作事件

8.5

Swing常用组件

说明:Swing组件中供了一些面板组件(中间容器),这些面板组件不能单独存在,只能放置在顶级窗口容器中。

常见组件:

JPanel

JScrollPane

JPanel面板组件是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。

JScrollPane是一个带有滚动条的面板容器,且只能添加一个组件;

想向JScrollPane面板中添加多个组件,应先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane中。

说明:第三个构造方法,是在第二个构造方法的基础上指定滚动条策略。如果在构造方法中没用指定显示组件和滚动条策略,也可以使用JScrollPane提供的方法进行设置。

课件表格 · 第47页
方法声明功能描述
JScrollPane()创建一个空的JScrollPane面板
JScrollPane(Component view)创建一个显示指定组件的JScrollPane面板,只要组件的内容超过视图大小就会显示水平和垂直滚动条
JScrollPane(Component view, int vsbPolicy,int hsbPolicy)创建一个显示指定容器、并具有指定滚动条策略的JScrollPane。参数vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略

说明:

上述表格方法是JScrollPane滚动面板组件对象提供的设置滚动策略的方法。

滚动策略方法取值可以使用ScrollPaneConstants接口中声明了多个常量属性来进行设置。

课件表格 · 第48页
方法声明功能描述
void setHorizontalBarPolicy(int policy)指定水平滚动条策略,即水平滚动条何时显示在滚动面板上
void setVerticalBarPolicy(int policy)指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上
void setViewportView(Component view)设置在滚动面板显示的组件
课件表格 · 第49页
常量属性功能描述
VERTICAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_AS_NEEDED当填充的组件视图超过客户端窗口大小时,自动显示水平和竖直放行滚动条(JscrollPane组件的默认值)
VERTICAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_ALWAYS无论填充的组件视图大小,始终显示水平和竖直放行滚动条
VERTICAL_SCROLLBAR_NEVER HORIZONTAL_SCROLLBAR_NEVER无论填充的组件视图大小,始终不显示水平和竖直放行滚动条

效果:

案例演示(参考教材文件8-10)

定义:文本组件用于接收用户输入的信息,包括文本框(JTextField)、文本域(JTextArea)等。

说明:它们都有一个共同父类JTextComponent,JTextComponent是一个抽象类。

常用方法:

课件表格 · 第51页
方法声明功能描述
String String getText()返回文本组件中所有的文本内容
String getSelectedText()返回文本组件中选定的文本内容
void selectAll()在文本组件中选中所有内容
void setEditable()设置文本组件为可编辑或者不可编辑状态
void setText(String text)设置文本组件的内容
void replaceSelection(String content)用给定的内容替换当前选定的内容

定义:JTextField称为文本框,它只能接收单行文本的输入。

常用构造方法:

课件表格 · 第52页
方法声明功能描述
JTextField()创建一个空的文本框,初始字符串为null
JTextFiled(int columns)创建一个具有指定列数的文本框,初始字符串为null
JTextField(String text)创建一个显示指定初始字符串的文本框
JTextField(String text,int column)创建一个具有指定列数、并显示指定初始字符串的文本框

JTextField有一个子类JPasswordField,表示一个单行输入密码框。

在此框中是通过显示指定的回显字符作为占位符。

新创建的密码框默认的回显字符为“*”。

定义:JTextArea称为文本域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数。

课件表格 · 第53页
方法声明功能描述
JTextArea()构造方法,创建一个空的文本域
JTextArea(String text)构造方法,创建显示指定初始字符串的文本域
JTextArea(int rows,int columns)构造方法,创建具有指定行和列的空的文本域
JTextArea(String text,int rows,int columns)构造方法,创建显示指定初始文本并指定了行列的文本域

案例演示(参考教材文件8-11)

在聊天窗口中输入聊天信息,并单击【发送】按钮

定义:Swing中提供了用于仅供展示的标签组件。

说明:标签组件主要用到的是JLabel,JLabel组件可以显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。

构造方法:

课件表格 · 第55页
方法声明功能描述
JLabel()创建无图像并且其标题为空字符串的JLabel
JLabel(Icon image)创建具有指定图像的JLabel实例
JLabel(Icon image, int horizontalAlignment)创建具有指定图像和水平对齐方式的JLabel实例
JLabel(String text)创建具有指定文本的JLabel实例
JLabel(String text, Icon icon, int horizontalAlignment)创建具有指定文本、图像和水平对齐方式的 JLabel 实例
JLabel(String text, int horizontalAlignment)创建具有指定文本和水平对齐方式的 JLabel 实例

案例演示(参考教材文件8-12)

说明:在Swing中常见的按钮组件有JButton、JCheckBox、JRadioButton等,它们都是抽象类AbstractButton类的直接或间接子类。

AbstractButton常用方法:

课件表格 · 第57页
方法声明功能描述
Icon getIcon()获取按钮的图标
void setIcon(Icon icon)设置按钮的图标
String getText()获取按钮的文本
void setText(String text)设置按钮的文本
void setEnable(boolean b)设置按钮是否可用
boolean setSelected(boolean b)设置按钮是否为选中状态
boolean isSelected()返回按钮的状态(true为选中,反之为未选中)

说明:JCheckBox组件被称为复选框组件,它有选中和未选中两种状态,通常复选框会有多个,用户可以选中其中一个或者多个。

课件表格 · 第58页
方法声明功能描述
JCheckBox()创建一个没有文本信息,初始状态未被选中的复选框
JCheckBox(String text)创建一个带有文本信息,初始状态未被选定的复选框
JCheckBox(String text,boolean selected)创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框

说明:除了上述构造方法,还可以调用从父类继承的setText(String text)来设置复选框文本信息,调用setSelected(boolean b)方法来设置复选框状态(是否被选中),也可以调用isSelected()方法来判断复选框是否被选中。。

案例演示(参考教材文件8-13)

未勾选

勾选一个

勾选两个

说明:JRadioButton组件被称为单选按钮组件,单选按钮只能选中一个。

使用:

要JRadioButton按钮之间的互斥,需要使用ButtonGroup类。

ButtonGroup是一个不可见的单选按钮组。将多个JRadioButton按钮添加到同一个单选按钮组中就能实现JRadioButton按钮的单选功能。

课件表格 · 第60页
方法声明功能描述
JRadioButton ()创建一个没有文本信息、初始状态未被选中的单选框
JRadioButton (String text)创建一个带有文本信息、初始状态未被选定的单选框
JRadioButton (String text,boolean selected)创建一个具有文本信息,并指定初始状态(选中/未选中)的单选框。

案例演示(参考教材文件8-14)

勾选第一个

勾选第二个

定义:

JComboBox组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项。

当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。

JComboBox下拉框组件分为可编辑和不可编辑两种形式。

对于不可编辑的下拉框,用户只能选择现有的选项列表。

对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新的内容。

注意:自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。

课件表格 · 第64页
方法声明功能描述
JComboBox()创建一个没有可选项的下拉框
JComboBox(Object[] items)创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项
JComboBox(Vector items)创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项

JComboBox常用构造方法:

JComboBox常用方法:

课件表格 · 第65页
方法声明功能描述
void addItem(Object anObject)为下拉框添加选项
void insertItemAt(Object anObject,int index)在指定的索引处插入选项
Objct getItemAt(int index)返回指定索引处选项,第一个选项的索引为0
int getItemCount()返回下拉框中选项的数目
Object getSelectedItem()返回当前所选项
void removeAllItems()删除下拉框中所有的选项
void removeItem(Object object)从下拉框中删除指定选项
void removeItemAt(int index)移除指定索引处的选项
void setEditable(boolean aFlag)设置下拉框的选项是否可编辑,aFlag为true则可编辑,反之则不可编辑

案例演示(参考教材文件8-15)

在下拉框中选中某个选项

计算机中很多文件的菜单都是下拉式的,如记事本的菜单。

在Swing中,创建下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、JMenu(菜单)和JMenuItem(菜单项)。

图示(以记事本为例):

JMenuBar表示一个水平的菜单栏,它用来管理一组菜单,不参与同用户的交互式操作。

菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器(如JFrame、Jdialog)的setJMenuBar()方法将它放置在顶级容器的顶部。

创建菜单栏时,只需要使用new关键字创建JMenubar对象即可。

创建完菜单栏对象后,可以调用它的add(JMenu c)方法为其添加JMenu菜单。

JMenuBar(菜单栏)

JMenu表示一个菜单,它用来整合管理菜单项。

菜单可以是单一层次的结构,也可以是多层次的结构。

大多情况下,会使用JMenu(String text)构造函数创建JMenu菜单,参数text表示菜单上的文本内容。

JMenu(菜单)

JMenu(菜单)——常用方法

课件表格 · 第70页
方法声明功能描述
JMenuItem add(JMenuItem menuItem)将菜单项添加到菜单末尾,返回此菜单项
void addSeparator()将分隔符添加到菜单的末尾
JMenuItem getItem(int pos)返回指定索引处的菜单项,第一个菜单项的索引为0
int getItemCount()返回菜单上的项数,菜单项和分隔符都计算在内
JMenuItem insert(JmenuItem menuItem,int pos)在指定索引处插入菜单项
void insertSeparator(int pos)在指定索引处插入分隔符
void remove(int pos)从菜单中移除指定索引处的菜单项
void remove(JMenuItem menuItem)从菜单中移除指定的菜单项
void removeAll()从菜单中移除所有的菜单项

JMenuItem表示一个菜单项,它是菜单系统中最基本的组件。

通常会使用JMenumItem(String text)这个构造方法为菜单项指定文本内容。

JMenuItem继承自AbstractButton类,因此可以把它看成是一个按钮。

如果使用无参的构造方法创建了一个菜单项,则可以调用从AbstractButton类中继承的setText(String text)方法和setIcon()方法为其设置文本和图标。

JMenuItem(菜单项)

案例演示(参考教材文件8-16)

例如在Windows桌面单击鼠标右键会出现一个菜单,这就是弹出式菜单。

在Swing组件中,弹出式菜单可以用JPopupMenu来实现。

JPopupMenu弹出式菜单同样通过调用add()方法添加JMenuItem菜单项,但它默认是不可见的。

想要显示弹出式菜单,必须调用show(Component invoker,int x,int y)方法。参数invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。

案例演示(参考教材文件8-17)

第50页 · 课件截图
第50页 · 课件截图
第54页 · 课件截图
第54页 · 课件截图
第54页 · 课件截图
第54页 · 课件截图
第59页 · 课件截图
第59页 · 课件截图
📄 展开课件原文(第 46–74 页,共 29 页)
第 46 页

8.5 Swing常用组件

说明:Swing组件中供了一些面板组件(中间容器),这些面板组件不能单独存在,只能放置在顶级窗口容器中。

常见组件:

8.5.1 面板组件

JPanel

JScrollPane

JPanel面板组件是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。

JScrollPane是一个带有滚动条的面板容器,且只能添加一个组件;

想向JScrollPane面板中添加多个组件,应先将这多个组件添加到某个组件中,然后再将这个组件添加到JScrollPane中。

第 47 页

8.5 Swing常用组件

说明:第三个构造方法,是在第二个构造方法的基础上指定滚动条策略。如果在构造方法中没用指定显示组件和滚动条策略,也可以使用JScrollPane提供的方法进行设置。

8.5.1 面板组件——JScrollPane常用构造方法

方法声明功能描述
JScrollPane()创建一个空的JScrollPane面板
JScrollPane(Component view)创建一个显示指定组件的JScrollPane面板,只要组件的内容超过视图大小就会显示水平和垂直滚动条
JScrollPane(Component view, int vsbPolicy,int hsbPolicy)创建一个显示指定容器、并具有指定滚动条策略的JScrollPane。参数vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略
第 48 页

8.5 Swing常用组件

说明:

上述表格方法是JScrollPane滚动面板组件对象提供的设置滚动策略的方法。

滚动策略方法取值可以使用ScrollPaneConstants接口中声明了多个常量属性来进行设置。

8.5.1 面板组件——JScrollPane设置面板滚动策略的方法

方法声明功能描述
void setHorizontalBarPolicy(int policy)指定水平滚动条策略,即水平滚动条何时显示在滚动面板上
void setVerticalBarPolicy(int policy)指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上
void setViewportView(Component view)设置在滚动面板显示的组件
第 49 页

8.5 Swing常用组件

8.5.1 面板组件——JScrollPane滚动策略常量值

常量属性功能描述
VERTICAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_AS_NEEDED当填充的组件视图超过客户端窗口大小时,自动显示水平和竖直放行滚动条(JscrollPane组件的默认值)
VERTICAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_ALWAYS无论填充的组件视图大小,始终显示水平和竖直放行滚动条
VERTICAL_SCROLLBAR_NEVER HORIZONTAL_SCROLLBAR_NEVER无论填充的组件视图大小,始终不显示水平和竖直放行滚动条
第 50 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-10)

8.5.1 面板组件

第 51 页

8.5 Swing常用组件

定义:文本组件用于接收用户输入的信息,包括文本框(JTextField)、文本域(JTextArea)等。

说明:它们都有一个共同父类JTextComponent,JTextComponent是一个抽象类。

常用方法:

8.5.2 文本组件

方法声明功能描述
String String getText()返回文本组件中所有的文本内容
String getSelectedText()返回文本组件中选定的文本内容
void selectAll()在文本组件中选中所有内容
void setEditable()设置文本组件为可编辑或者不可编辑状态
void setText(String text)设置文本组件的内容
void replaceSelection(String content)用给定的内容替换当前选定的内容
第 52 页

8.5 Swing常用组件

定义:JTextField称为文本框,它只能接收单行文本的输入。

常用构造方法:

8.5.2 文本组件——JTextField

方法声明功能描述
JTextField()创建一个空的文本框,初始字符串为null
JTextFiled(int columns)创建一个具有指定列数的文本框,初始字符串为null
JTextField(String text)创建一个显示指定初始字符串的文本框
JTextField(String text,int column)创建一个具有指定列数、并显示指定初始字符串的文本框

说明:

JTextField有一个子类JPasswordField,表示一个单行输入密码框。

在此框中是通过显示指定的回显字符作为占位符。

新创建的密码框默认的回显字符为“*”。

第 53 页

8.5 Swing常用组件

定义:JTextArea称为文本域,它能接收多行文本的输入,使用JTextArea构造方法创建对象时可以设定区域的行数、列数。

常用构造方法:

8.5.2 文本组件——JTextArea

方法声明功能描述
JTextArea()构造方法,创建一个空的文本域
JTextArea(String text)构造方法,创建显示指定初始字符串的文本域
JTextArea(int rows,int columns)构造方法,创建具有指定行和列的空的文本域
JTextArea(String text,int rows,int columns)构造方法,创建显示指定初始文本并指定了行列的文本域
第 54 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-11)

8.5.2 文本组件

在聊天窗口中输入聊天信息,并单击【发送】按钮

第 55 页

8.5 Swing常用组件

定义:Swing中提供了用于仅供展示的标签组件。

说明:标签组件主要用到的是JLabel,JLabel组件可以显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。

构造方法:

8.5.3 标签组件

方法声明功能描述
JLabel()创建无图像并且其标题为空字符串的JLabel
JLabel(Icon image)创建具有指定图像的JLabel实例
JLabel(Icon image, int horizontalAlignment)创建具有指定图像和水平对齐方式的JLabel实例
JLabel(String text)创建具有指定文本的JLabel实例
JLabel(String text, Icon icon, int horizontalAlignment)创建具有指定文本、图像和水平对齐方式的 JLabel 实例
JLabel(String text, int horizontalAlignment)创建具有指定文本和水平对齐方式的 JLabel 实例
第 56 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-12)

8.5.3 标签组件

第 57 页

8.5 Swing常用组件

说明:在Swing中常见的按钮组件有JButton、JCheckBox、JRadioButton等,它们都是抽象类AbstractButton类的直接或间接子类。

AbstractButton常用方法:

8.5.4 按钮组件

方法声明功能描述
Icon getIcon()获取按钮的图标
void setIcon(Icon icon)设置按钮的图标
String getText()获取按钮的文本
void setText(String text)设置按钮的文本
void setEnable(boolean b)设置按钮是否可用
boolean setSelected(boolean b)设置按钮是否为选中状态
boolean isSelected()返回按钮的状态(true为选中,反之为未选中)
第 58 页

8.5 Swing常用组件

说明:JCheckBox组件被称为复选框组件,它有选中和未选中两种状态,通常复选框会有多个,用户可以选中其中一个或者多个。

常用构造方法:

8.5.4 按钮组件——JCheckBox

方法声明功能描述
JCheckBox()创建一个没有文本信息,初始状态未被选中的复选框
JCheckBox(String text)创建一个带有文本信息,初始状态未被选定的复选框
JCheckBox(String text,boolean selected)创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框

说明:除了上述构造方法,还可以调用从父类继承的setText(String text)来设置复选框文本信息,调用setSelected(boolean b)方法来设置复选框状态(是否被选中),也可以调用isSelected()方法来判断复选框是否被选中。。

第 59 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-13)

8.5.4 按钮组件——JCheckBox

未勾选

勾选一个

勾选两个

第 60 页

8.5 Swing常用组件

说明:JRadioButton组件被称为单选按钮组件,单选按钮只能选中一个。

使用:

要JRadioButton按钮之间的互斥,需要使用ButtonGroup类。

ButtonGroup是一个不可见的单选按钮组。将多个JRadioButton按钮添加到同一个单选按钮组中就能实现JRadioButton按钮的单选功能。

常用构造方法:

8.5.4 按钮组件——JRadioButton

方法声明功能描述
JRadioButton ()创建一个没有文本信息、初始状态未被选中的单选框
JRadioButton (String text)创建一个带有文本信息、初始状态未被选定的单选框
JRadioButton (String text,boolean selected)创建一个具有文本信息,并指定初始状态(选中/未选中)的单选框。
第 61 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-14)

8.5.4 按钮组件——JRadioButton

未勾选

勾选第一个

勾选第二个

第 62 页

8.5 Swing常用组件

定义:

JComboBox组件被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示的是第一个添加的选项。

当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。

8.5.5 下拉框组件

第 63 页

8.5 Swing常用组件

说明:

JComboBox下拉框组件分为可编辑和不可编辑两种形式。

对于不可编辑的下拉框,用户只能选择现有的选项列表。

对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新的内容。

注意:自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。

8.5.5 下拉框组件

第 64 页

8.5 Swing常用组件

8.5.5 下拉框组件

方法声明功能描述
JComboBox()创建一个没有可选项的下拉框
JComboBox(Object[] items)创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项
JComboBox(Vector items)创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项

JComboBox常用构造方法:

第 65 页

8.5 Swing常用组件

8.5.5 下拉框组件

JComboBox常用方法:

方法声明功能描述
void addItem(Object anObject)为下拉框添加选项
void insertItemAt(Object anObject,int index)在指定的索引处插入选项
Objct getItemAt(int index)返回指定索引处选项,第一个选项的索引为0
int getItemCount()返回下拉框中选项的数目
Object getSelectedItem()返回当前所选项
void removeAllItems()删除下拉框中所有的选项
void removeItem(Object object)从下拉框中删除指定选项
void removeItemAt(int index)移除指定索引处的选项
void setEditable(boolean aFlag)设置下拉框的选项是否可编辑,aFlag为true则可编辑,反之则不可编辑
第 66 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-15)

8.5.5 下拉框组件

在下拉框中选中某个选项

第 67 页

8.5 Swing常用组件

说明:

计算机中很多文件的菜单都是下拉式的,如记事本的菜单。

在Swing中,创建下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、JMenu(菜单)和JMenuItem(菜单项)。

图示(以记事本为例):

8.5.6 菜单组件——下拉式菜单

第 68 页

8.5 Swing常用组件

JMenuBar表示一个水平的菜单栏,它用来管理一组菜单,不参与同用户的交互式操作。

菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器(如JFrame、Jdialog)的setJMenuBar()方法将它放置在顶级容器的顶部。

创建菜单栏时,只需要使用new关键字创建JMenubar对象即可。

创建完菜单栏对象后,可以调用它的add(JMenu c)方法为其添加JMenu菜单。

JMenuBar(菜单栏)

第 69 页

8.5 Swing常用组件

JMenu表示一个菜单,它用来整合管理菜单项。

菜单可以是单一层次的结构,也可以是多层次的结构。

大多情况下,会使用JMenu(String text)构造函数创建JMenu菜单,参数text表示菜单上的文本内容。

JMenu(菜单)

第 70 页

8.5 Swing常用组件

JMenu(菜单)——常用方法

方法声明功能描述
JMenuItem add(JMenuItem menuItem)将菜单项添加到菜单末尾,返回此菜单项
void addSeparator()将分隔符添加到菜单的末尾
JMenuItem getItem(int pos)返回指定索引处的菜单项,第一个菜单项的索引为0
int getItemCount()返回菜单上的项数,菜单项和分隔符都计算在内
JMenuItem insert(JmenuItem menuItem,int pos)在指定索引处插入菜单项
void insertSeparator(int pos)在指定索引处插入分隔符
void remove(int pos)从菜单中移除指定索引处的菜单项
void remove(JMenuItem menuItem)从菜单中移除指定的菜单项
void removeAll()从菜单中移除所有的菜单项
第 71 页

8.5 Swing常用组件

JMenuItem表示一个菜单项,它是菜单系统中最基本的组件。

通常会使用JMenumItem(String text)这个构造方法为菜单项指定文本内容。

JMenuItem继承自AbstractButton类,因此可以把它看成是一个按钮。

如果使用无参的构造方法创建了一个菜单项,则可以调用从AbstractButton类中继承的setText(String text)方法和setIcon()方法为其设置文本和图标。

JMenuItem(菜单项)

第 72 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-16)

8.5.6 菜单组件——下拉式菜单

第 73 页

8.5 Swing常用组件

说明:

例如在Windows桌面单击鼠标右键会出现一个菜单,这就是弹出式菜单。

在Swing组件中,弹出式菜单可以用JPopupMenu来实现。

使用:

JPopupMenu弹出式菜单同样通过调用add()方法添加JMenuItem菜单项,但它默认是不可见的。

想要显示弹出式菜单,必须调用show(Component invoker,int x,int y)方法。参数invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。

8.5.6 菜单组件——弹出式菜单

第 74 页

8.5 Swing常用组件

效果:

案例演示(参考教材文件8-17)

8.5.6 菜单组件——弹出式菜单

8.6

Swing组件的整合使用

任务案例

案例代码

接下来,通过一个模拟QQ登录的案例来熟悉Swing的综合使用。请查看教材8.6小节。

📄 展开课件原文(第 75–75 页,共 1 页)
第 75 页

8.6 Swing组件的整合使用

任务案例

案例代码

接下来,通过一个模拟QQ登录的案例来熟悉Swing的综合使用。请查看教材8.6小节。

8.7

JavaFX图形用户界面工具

什么是JavaFX?

定义:JavaFX同Swing一样,都用于处理图形用户界面。

说明:

JavaFX是一个强大的图形和多媒体处理工具包集合。

它允许开发者来设计、创建、测试、调试和部署富客户端程序(Rich Client Applications)。

JavaFX和Java一样具有跨平台特性。

1

2

3

JavaFX 1.0:使用JavaFX Script的静态、声明式的编程语言来开发JavaFX应用程序。

JavaFX 2.0:之后的版本摒弃了JavaFX Script语言,而是作为一个Java API来使用。同时该版本包含非常丰富的UI控件、图形和多媒体特性用于简化可视化应用的开发。

JavaFX 8:从JDK 7u6开始,JavaFX就与JDK捆绑使用,并结合JDK 8的新增特性,直接将其新版本定为JavaFX 8。JavaFX 8版本进一步增加了多种功能,如动画、3D效果等。

JavaFX 8

主要特性

支持Java API直接调用

提供WebView组件,实现Web页面嵌入

支持与Swing互操作

内嵌UI控件和CSS样式

支持3D图形处理能力

可以使用FXML和Scene Builder设计图形用户界面

从JDK 7u6才开始包含JavaFX类库,并且最新比较稳定的JavaFX完全结合了JDK 8的特性。

要运行JavaFX应用程序,建议在系统中安装JDK 8或更高版本,否则,使用低版本的JDK还需要额外导入jfxrt.jar等包。

IDE(如Eclipse、NetBeans、IntelliJ IDEA)也为JavaFX提供了支持,在使用这些IDE工具进行JavaFX开发时,需要进行相应配置。

在使用Eclipse进行JavaFX开发时,除了所依赖的JDK 8,还需要用到一个名为e(fx)clipse的插件,该插件是JavaFX开发所需的工具库。

8.7.2 JavaFX开发环境配置——Eclipse中安装配置e(fx)clipse插件

(1)打开Eclipse工具,选中并打开“Help”菜单栏下拉列表中的“Install New Software…”选项,如图所示。

(2)在打开的弹窗中,单击【Add...】按钮,在新出现的“Add Repository”窗口中,分别输入需要安装的插件名称和地址,然后单击【OK】按钮,如图所示。

【注意】

图中在Eclipse 4.6版本上安装e(fx)clipse插件,e(fx)clipse插件链接地址版本为2.4.0,必须与Eclipse版本匹配,否则安装过程中可能会出现所需版本软件不存在的错误。

(3)添加完e(fx)clipse插件的配置信息后,在“Install”窗口中选中出现的两个复选框选项,如图所示。

接着依次单击【Next】按钮,直到弹出“Review Licenses”窗口界面,在该界面中选中“I accept the terms of the license agreement”选项,单击【Finish】按钮即可进入插件安装状态,安装完成后根据提示重启Eclipse即可。

(4)重启Eclipse后,依次选择“File”->“New”->“Ohter...”会出现“Select a wizard”弹窗,展示JavaFX插件信息,说明e(fx)clipse插件安装成功,如图所示。

(1)创建JavaFX项目。打开Eclipse,并在Eclipse中依次选择“File”->“New”->“Others..”->“JavaFX Project”选项,创建一个名称为“javaFX”的项目,项目创建成功后,如图所示。

JavaFX项目默认创建的程序的入口文件,

内部初始化了一个空白图形界面

JavaFX项目默认创建的CSS样式文件

(2)编辑Main.java文件。

JAVA
public class Main extends Application {
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));
Scene scene = new Scene(root, 300, 275);
stage.setTitle("FXML Welcome");
stage.setScene(scene);
stage.show(); // 将图形界面窗口设置为可见

}

JAVA
public static void main(String[] args) {

launch(args); // 通过Application抽象类的launch()方法启动程序

(3)创建fxml_example.fxml文件。在Main.java文件同级目录下依次选择“File”->“New”->“Others..”->“New FXML Document”选项,创建一个名称为“fxml_example”的fxml格式文件(详见教材文件8-22所示)。

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入JavaFX工具相关类 -->

<?import java.net.*?>

...

<!-- 创建一个GridPane网格式面板组件 -->

<GridPane fx:controller="application.FXMLExampleController"

xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">

</GridPane>

(4)创建并编辑FXMLExampleController.java文件。在Main.java文件同级目录下创建一个名为FXMLExampleController的事件处理类,并编写事件处理方法。

JAVA
public class FXMLExampleController {
// 与fxml_example.fxml文件中的登录提示框fx:id一致
@FXML private Text actiontarget;
// 为fxml_example.fxml文件中的登录按钮编写事件处理
@FXML protected void handleSubmitButtonAction(ActionEvent event) {
actiontarget.setText("点击了登录按钮");

(4)完成上述4步操作后,运行主程序Main类,结果如图所示。

(5)为fxml_example.fxml图形布局文件引入外联的CSS样式文件(详见教材8.7.3小节第5步)。

(6)编辑application.css样式文件。打开application.css样式文件,为图8-37所示的JavaFX图形用户接口项目编写CSS样式(详见教材文件8-24)。

(6)当编写完并引入application.css样式文件成功后,再次启动主程序入口Main类中的main()方法,结果如图所示。

JavaFX Scene Builder是什么?

说明:JavaFX Scene Builder是一种可视布局管理工具,允许用户快速设计JavaFX应用程序用户界面,而无需编码。

使用:

用户可以将UI组件拖放到工作区,修改其属性、应用样式表。

创建的布局会在后台自动生成一个结果为FXML格式的文件。

想在Eclipse中使用JavaFX Scene Builder工具,就必须先进行配置,在配置之前要先保证Eclipse安装了e(fx)clipse插件。

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的下载与安装

(1)下载JavaFX Scene Builder。进入http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-1x-archive-2199384.html下载页面,选择对应平台的版本进行下载,这里以JavaFX Scene Builder2版本为例,如图所示。

(2)安装JavaFX Scene Builder。下载完成后,会得到一个javafx_scenebuilder-2_0-windows.msi安装文件,直接双击文件进行安装,安装过程中可以通过【更改(C)...】按钮来更改安装目录,如图所示。

(3)在Eclipse中配置JavaFX Scene Builder。在Eclipse中,打开Window菜单下的“Preferences”选项窗口,找到JavaFX的配置位置,在右侧窗口中通过【Browse...】按钮配置安装的JavaFX Scene Builder工具位置,最后单击【OK】按钮即可,如图所示。

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(1)创建test.fxml文件。在javaFX项目的application目录下创建一个名为test.fxml的fxml格式文件,鼠标右键选中并使用“Open with SceneBuilder”选项打开,结果如图所示。

(2)先用鼠标选中中间区域的AnchorPane面板组件(打开fxml文件时默认的面板组件),将该组件拉伸至合适大小,接着在左上角区域选择Lable组件拖拽至AnchorPane面板组件内,并在右边组件属性设置区域对该Lable组件进行简单设置,结果如图所示。

(2)接着,可以参考上述方式再次添加其他组件,如输入框、密码、登录按钮等,结果如图所示。

说明:完成需求组件的设计后,可以直接保存并关闭该窗口,此时通过可视化工具设计的布局文件代码会在自动生成到test.fxml文件中。

(3)为了验证JavaFX Scene Builder工具的设计效果,可以对文件8-21所示的Main.java文件中第8~9行代码进行修改,引入test.fxml布局文件。

JAVA
Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));

(3)然后,再次启动主程序入口Main类,结果如图所示。

第80页 · 课件截图
第80页 · 课件截图
第81页 · 课件截图
第81页 · 课件截图
第82页 · 课件截图
第82页 · 课件截图
第83页 · 课件截图
第83页 · 课件截图
📄 展开课件原文(第 76–99 页,共 24 页)
第 76 页

8.7 JavaFX图形用户界面工具

什么是JavaFX?

定义:JavaFX同Swing一样,都用于处理图形用户界面。

说明:

JavaFX是一个强大的图形和多媒体处理工具包集合。

它允许开发者来设计、创建、测试、调试和部署富客户端程序(Rich Client Applications)。

JavaFX和Java一样具有跨平台特性。

第 77 页

8.7 JavaFX图形用户界面工具

8.7.1 JavaFX概述——核心版本发展

1

2

3

JavaFX 1.0:使用JavaFX Script的静态、声明式的编程语言来开发JavaFX应用程序。

JavaFX 2.0:之后的版本摒弃了JavaFX Script语言,而是作为一个Java API来使用。同时该版本包含非常丰富的UI控件、图形和多媒体特性用于简化可视化应用的开发。

JavaFX 8:从JDK 7u6开始,JavaFX就与JDK捆绑使用,并结合JDK 8的新增特性,直接将其新版本定为JavaFX 8。JavaFX 8版本进一步增加了多种功能,如动画、3D效果等。

第 78 页

JavaFX 8

主要特性

8.7 JavaFX图形用户界面工具

8.7.1 JavaFX概述

支持Java API直接调用

提供WebView组件,实现Web页面嵌入

支持与Swing互操作

内嵌UI控件和CSS样式

支持3D图形处理能力

可以使用FXML和Scene Builder设计图形用户界面

第 79 页

8.7 JavaFX图形用户界面工具

8.7.2 JavaFX开发环境配置

说明:

从JDK 7u6才开始包含JavaFX类库,并且最新比较稳定的JavaFX完全结合了JDK 8的特性。

要运行JavaFX应用程序,建议在系统中安装JDK 8或更高版本,否则,使用低版本的JDK还需要额外导入jfxrt.jar等包。

IDE(如Eclipse、NetBeans、IntelliJ IDEA)也为JavaFX提供了支持,在使用这些IDE工具进行JavaFX开发时,需要进行相应配置。

在使用Eclipse进行JavaFX开发时,除了所依赖的JDK 8,还需要用到一个名为e(fx)clipse的插件,该插件是JavaFX开发所需的工具库。

第 80 页

8.7 JavaFX图形用户界面工具

8.7.2 JavaFX开发环境配置——Eclipse中安装配置e(fx)clipse插件

(1)打开Eclipse工具,选中并打开“Help”菜单栏下拉列表中的“Install New Software…”选项,如图所示。

第 81 页

8.7 JavaFX图形用户界面工具

8.7.2 JavaFX开发环境配置——Eclipse中安装配置e(fx)clipse插件

(2)在打开的弹窗中,单击【Add...】按钮,在新出现的“Add Repository”窗口中,分别输入需要安装的插件名称和地址,然后单击【OK】按钮,如图所示。

【注意】

图中在Eclipse 4.6版本上安装e(fx)clipse插件,e(fx)clipse插件链接地址版本为2.4.0,必须与Eclipse版本匹配,否则安装过程中可能会出现所需版本软件不存在的错误。

第 82 页

8.7 JavaFX图形用户界面工具

8.7.2 JavaFX开发环境配置——Eclipse中安装配置e(fx)clipse插件

(3)添加完e(fx)clipse插件的配置信息后,在“Install”窗口中选中出现的两个复选框选项,如图所示。

接着依次单击【Next】按钮,直到弹出“Review Licenses”窗口界面,在该界面中选中“I accept the terms of the license agreement”选项,单击【Finish】按钮即可进入插件安装状态,安装完成后根据提示重启Eclipse即可。

第 83 页

8.7 JavaFX图形用户界面工具

8.7.2 JavaFX开发环境配置——Eclipse中安装配置e(fx)clipse插件

(4)重启Eclipse后,依次选择“File”->“New”->“Ohter...”会出现“Select a wizard”弹窗,展示JavaFX插件信息,说明e(fx)clipse插件安装成功,如图所示。

第 84 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(1)创建JavaFX项目。打开Eclipse,并在Eclipse中依次选择“File”->“New”->“Others..”->“JavaFX Project”选项,创建一个名称为“javaFX”的项目,项目创建成功后,如图所示。

JavaFX项目默认创建的程序的入口文件,

内部初始化了一个空白图形界面

JavaFX项目默认创建的CSS样式文件

第 85 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(2)编辑Main.java文件。

public class Main extends Application {

public void start(Stage stage) throws Exception {

Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

Scene scene = new Scene(root, 300, 275);

stage.setTitle("FXML Welcome");

stage.setScene(scene);

stage.show(); // 将图形界面窗口设置为可见

}

public static void main(String[] args) {

launch(args); // 通过Application抽象类的launch()方法启动程序

}

}

第 86 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(3)创建fxml_example.fxml文件。在Main.java文件同级目录下依次选择“File”->“New”->“Others..”->“New FXML Document”选项,创建一个名称为“fxml_example”的fxml格式文件(详见教材文件8-22所示)。

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入JavaFX工具相关类 -->

<?import java.net.*?>

...

<!-- 创建一个GridPane网格式面板组件 -->

<GridPane fx:controller="application.FXMLExampleController"

xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">

...

</GridPane>

第 87 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(4)创建并编辑FXMLExampleController.java文件。在Main.java文件同级目录下创建一个名为FXMLExampleController的事件处理类,并编写事件处理方法。

public class FXMLExampleController {

// 与fxml_example.fxml文件中的登录提示框fx:id一致

@FXML private Text actiontarget;

// 为fxml_example.fxml文件中的登录按钮编写事件处理

@FXML protected void handleSubmitButtonAction(ActionEvent event) {

actiontarget.setText("点击了登录按钮");

}

}

第 88 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(4)完成上述4步操作后,运行主程序Main类,结果如图所示。

第 89 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(5)为fxml_example.fxml图形布局文件引入外联的CSS样式文件(详见教材8.7.3小节第5步)。

(6)编辑application.css样式文件。打开application.css样式文件,为图8-37所示的JavaFX图形用户接口项目编写CSS样式(详见教材文件8-24)。

第 90 页

8.7 JavaFX图形用户界面工具

8.7.3 JavaFX基础入门

(6)当编写完并引入application.css样式文件成功后,再次启动主程序入口Main类中的main()方法,结果如图所示。

第 91 页

8.7 JavaFX图形用户界面工具

JavaFX Scene Builder是什么?

说明:JavaFX Scene Builder是一种可视布局管理工具,允许用户快速设计JavaFX应用程序用户界面,而无需编码。

使用:

用户可以将UI组件拖放到工作区,修改其属性、应用样式表。

创建的布局会在后台自动生成一个结果为FXML格式的文件。

想在Eclipse中使用JavaFX Scene Builder工具,就必须先进行配置,在配置之前要先保证Eclipse安装了e(fx)clipse插件。

第 92 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的下载与安装

(1)下载JavaFX Scene Builder。进入http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-1x-archive-2199384.html下载页面,选择对应平台的版本进行下载,这里以JavaFX Scene Builder2版本为例,如图所示。

第 93 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的下载与安装

(2)安装JavaFX Scene Builder。下载完成后,会得到一个javafx_scenebuilder-2_0-windows.msi安装文件,直接双击文件进行安装,安装过程中可以通过【更改(C)...】按钮来更改安装目录,如图所示。

第 94 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的下载与安装

(3)在Eclipse中配置JavaFX Scene Builder。在Eclipse中,打开Window菜单下的“Preferences”选项窗口,找到JavaFX的配置位置,在右侧窗口中通过【Browse...】按钮配置安装的JavaFX Scene Builder工具位置,最后单击【OK】按钮即可,如图所示。

第 95 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(1)创建test.fxml文件。在javaFX项目的application目录下创建一个名为test.fxml的fxml格式文件,鼠标右键选中并使用“Open with SceneBuilder”选项打开,结果如图所示。

第 96 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(2)先用鼠标选中中间区域的AnchorPane面板组件(打开fxml文件时默认的面板组件),将该组件拉伸至合适大小,接着在左上角区域选择Lable组件拖拽至AnchorPane面板组件内,并在右边组件属性设置区域对该Lable组件进行简单设置,结果如图所示。

第 97 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(2)接着,可以参考上述方式再次添加其他组件,如输入框、密码、登录按钮等,结果如图所示。

说明:完成需求组件的设计后,可以直接保存并关闭该窗口,此时通过可视化工具设计的布局文件代码会在自动生成到test.fxml文件中。

第 98 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(3)为了验证JavaFX Scene Builder工具的设计效果,可以对文件8-21所示的Main.java文件中第8~9行代码进行修改,引入test.fxml布局文件。

Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));

第 99 页

8.7 JavaFX图形用户界面工具

8.7.4 JavaFX可视化管理工具——JavaFX Scene Builder工具的基本使用

(3)然后,再次启动主程序入口Main类,结果如图所示。

8.8

本章小结

GUI是本教材中相对独立的一章内容,本章主要针对Java中比较流行的两种GUI图形用户工具分两部分进行阐述,向初学者讲解了GUI的一些基本原理、开发技巧和思想。第一部分,主要讲解了Swing图形用户工具的组件架构、顶级容器、布局管理器、事件处理以及一些常用的组件,并通过一个模拟QQ登录界面设计的案例进行了整合使用;第二部分,主要讲解了JavaFX图形用户工具的基本概念、开发环境配置、使用入门等。

📄 展开课件原文(第 100–101 页,共 2 页)
第 100 页

GUI是本教材中相对独立的一章内容,本章主要针对Java中比较流行的两种GUI图形用户工具分两部分进行阐述,向初学者讲解了GUI的一些基本原理、开发技巧和思想。第一部分,主要讲解了Swing图形用户工具的组件架构、顶级容器、布局管理器、事件处理以及一些常用的组件,并通过一个模拟QQ登录界面设计的案例进行了整合使用;第二部分,主要讲解了JavaFX图形用户工具的基本概念、开发环境配置、使用入门等。

8.8 本章小结

第 101 页

课件里的提醒 课件原文中的“注意 / 说明 / 定义”

  • 定义:在早期JDK1.0发布时,Sun公司就为GUI开发提供了一套基础类库,这套类库被称为AWT(Abstract Window Toolkit),即抽象窗口工具包。
  • 定义:Swing是在原有的AWT的基础上进行了补充和改进,提供了更加丰富的组件和功能,来满足GUI设计的一切需求。
  • 说明:对话框是模态或者非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建JDialog对象后调用它的setModal()方法来进行设置。
  • 说明:Swing组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。
  • 说明:参数rows代表行数,cols代表列数,hgap和vgap规定窗格之间水平和垂直方向的间距。
  • 定义:Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的单击鼠标、按下键盘等操作。
  • 说明:事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。
  • 说明:MouseEvent类中定义了很多常量来识别鼠标动作。
  • 例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。
  • 说明:Swing组件中供了一些面板组件(中间容器),这些面板组件不能单独存在,只能放置在顶级窗口容器中。
  • 说明:第三个构造方法,是在第二个构造方法的基础上指定滚动条策略。如果在构造方法中没用指定显示组件和滚动条策略,也可以使用JScrollPane提供的方法进行设置。
  • 定义:文本组件用于接收用户输入的信息,包括文本框(JTextField)、文本域(JTextArea)等。

本章代码速览 把课件里的示例代码集中起来,可直接复制运行

JAVA
private static void createAndShowGUI() {
JAVA
// 创建并设置JFrame容器窗口
JAVA
JFrame frame = new JFrame("JFrameTest");
JAVA
// 设置关闭窗口时的默认操作
JAVA
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JAVA
frame.setSize(250, 150); // 设置窗口尺寸
JAVA
frame.setVisible(true); // 展示JFrame容器窗口
JAVA
public static void main(String[] args) {
JAVA
//使用SwingUtilities工具类调用createAndShowGUI()方法显示GUI程序
JAVA
SwingUtilities.invokeLater(Example01::createAndShowGUI);
JAVA
frame.setSize(350, 150);
JAVA
frame.setVisible(true);