Java Swing 教程

2025年4月2日 | 7 分钟阅读

Java Swing 教程是 Java 基础类 (JFC) 的一部分,用于创建基于窗口的应用程序。它建立在 AWT(抽象窗口工具包)API 之上,并完全用 Java 编写。

Java Swing 是一个图形用户界面 (GUI) 工具包,几十年来一直是 Java 开发的基石。自诞生以来,Swing 为 Java 开发人员提供了一个强大的框架,用于创建交互式、平台独立的应用程序。在本文中,我们将深入探讨 Java Swing 的基础知识,探索其主要功能,并讨论其在现代应用程序开发中的相关性。

在本节中,我们将讨论 Java Swing 的基础知识,探索其主要功能,并讨论其在现代应用程序开发中的相关性。

Java Swing

Java Swing 在 20 世纪 90 年代末作为 Java 基础类 (JFC) 的一部分引入,旨在解决早期抽象窗口工具包 (AWT) 的局限性。与 AWT 依赖原生平台组件进行渲染不同,Swing 完全用 Java 编写,在不同操作系统上提供一致的外观和感觉。

Swing 提供了一套全面的组件用于构建 GUI,包括按钮、文本字段、面板等。这些组件高度可定制,允许开发人员创建视觉上吸引人且用户友好的界面。

Java Swing 的主要功能

平台独立性: Swing 的主要优势之一是其平台独立性。使用 Swing 开发的应用程序可以在任何支持 Java 的平台上运行,无需修改。

丰富的组件集: Swing 提供广泛的组件,可用于创建复杂的 GUI。开发人员可以从按钮和标签等基本组件中进行选择,也可以选择表格、树和滚动窗格等高级组件。

可定制性: Swing 组件高度可定制,允许开发人员控制其外观和行为的各个方面。可以轻松调整大小、颜色、字体和布局等属性,以满足特定的设计要求。

事件处理: Swing 提供了一个强大的事件处理机制,允许开发人员响应用户交互,例如按钮点击和鼠标移动。它能够创建交互式和响应式应用程序。

布局管理器: Swing 包含一组布局管理器,可方便组件在容器内的排列。布局管理器根据容器的大小自动调整组件的位置和大小,确保在不同屏幕分辨率和设备上行为一致。

Java Swing 的现代应用

虽然 JavaFX 等较新的 GUI 框架以及 React 和 Angular 等 Web 技术近年来已广受欢迎,但 Java Swing 对于某些类型的应用程序仍然是可行的选择。

桌面应用程序: Swing 非常适合开发需要丰富且响应式用户界面的桌面应用程序。IDE(集成开发环境)、生产力工具和多媒体播放器等应用程序可以受益于 Swing 广泛的功能集。

遗留系统: 许多使用 Swing 构建的企业应用程序至今仍在使用。虽然这些应用程序可能没有利用最新技术,但 Swing 为维护和扩展现有系统提供了稳定可靠的平台。

教育目的: Swing 通常在计算机科学课程中用作教学工具,向学生介绍 GUI 编程概念。其简单性和多功能性使其成为学习 Java 编程的初学者的理想选择。

什么是 JFC

Java 基础类 (JFC) 是一组 GUI 组件,可简化桌面应用程序的开发。

Java Swing 类层次结构

Java Swing API 的层次结构如下所示。

hierarchy of javax swing

Component 类的常用方法

Component 类的方法在 Java Swing 中广泛使用,如下所示。

方法描述
public void add(Component c)它在另一个组件上添加一个组件。
public void setSize(int width,int height)它设置组件的大小。
public void setLayout(LayoutManager m)它为组件设置布局管理器。
public void setVisible(boolean b)它设置组件的可见性。它默认为 false。

Java Swing 示例

创建框架有两种方法

  • 通过创建 Frame 类的对象(关联)
  • 通过扩展 Frame 类(继承)

我们可以在 main()、构造函数或任何其他方法中编写 Swing 代码。

通过创建 Frame 类的对象

让我们看一个简单的 Swing 示例,我们在 main() 方法中创建一个按钮并将其添加到 JFrame 对象中。

示例

输出

simple example of java swing

构造函数中通过关联的 Swing 示例

我们还可以将创建 JFrame、JButton 和方法调用的所有代码写入 Java 构造函数中。

示例

上面的示例中使用了 setBounds(int xaxis, int yaxis, int width, int height) 来设置按钮的位置。

输出

Java Swing Tutorial

通过扩展 Frame 类的 Swing 示例

我们还可以继承 JFrame 类,这样就不需要显式创建 JFrame 类的实例。

示例

输出

Java Swing Tutorial

AWT 与 Swing 的区别

下表描述了 AWT 与 Swing 的主要区别。

Java AWTJava Swing
AWT 组件是平台相关的Java Swing 组件是平台独立的
AWT 组件是重量级的。Swing 组件是轻量级的。
AWT 不支持可插拔的外观和感觉Swing 支持可插拔的外观和感觉
AWT 提供的组件少于 Swing。Swing 提供了更强大的组件,例如表格、列表、滚动窗格、颜色选择器、选项卡式窗格等。
AWT 不遵循 MVC(模型-视图-控制器),其中模型表示数据,视图表示呈现,控制器充当模型和视图之间的接口。Swing 遵循 MVC

要阅读更多 Java 中 AWT 与 Swing 的区别

结论

Java Swing 经受住了时间的考验,成为 Java 开发人员可靠而强大的 GUI 工具包。凭借其平台独立性、丰富的组件集和可定制性,Swing 仍然是各行业构建桌面应用程序的首选。

虽然较新的 GUI 框架提供了现代功能和增强功能,但 Swing 在某些用例中仍然具有相关性,尤其是在维护遗留系统和教育环境中。随着技术的发展,Swing 也在不断适应,确保 Java 开发人员拥有创建引人注目的用户体验所需的工具。

总而言之,Java Swing 仍然是 Java 生态系统不可或缺的一部分,为构建跨平台 GUI 应用程序提供了坚实的基础。它的多功能性和可靠性使其成为寻求创建精美直观用户界面的开发人员的宝贵资产。


Java Swing MCQ

1. 在 Swing 中,哪个类是表示应用程序主窗口的顶级容器?

  1. JFrame
  2. JWindow
  3. JDialog
  4. JPanel
 

答案:a)

解释: JFrame 是 Swing 中表示应用程序主窗口的顶级容器类。它提供了一个带有装饰和功能的窗口,用于添加和管理组件。


2. 如何确保 Swing 应用程序在执行长时间运行的任务时正确更新 UI?

  1. 通过使用事件调度线程 (EDT) 执行任务。
  2. 通过使用 SwingUtilities.invokeLater 或 SwingWorker。
  3. 通过直接从长时间运行的任务更新 UI。
  4. 通过使用单独的线程进行 UI 更新。
 

答案:b)

解释: 为确保 UI 在长时间运行的任务期间保持响应并正确更新,我们应该使用 SwingUtilities.invokeLater 或 SwingWorker。这些工具允许在单独的线程上执行任务,同时在事件调度线程上更新 UI。


3. 在 Java Swing 中哪个类用于显示图像?

  1. JButton
  2. JRadioButton
  3. JLabel
  4. JTextArea
 

答案:c)

解释: JLabel 类用于在 Java Swing 中显示图像。


4. 哪个布局管理器以单行或单列的顺序排列容器中的组件?

  1. BorderLayout
  2. GridLayout
  3. FlowLayout
  4. BoxLayout
 

答案:d)

解释: BoxLayout 是一种布局管理器,它将组件水平排列成一行或垂直排列成一列。它对于将组件对齐成一行或将它们堆叠在一起很有用。


5. 在 Java Swing 中哪个组件用于在弹出对话框中显示短消息?

  1. JOptionPane
  2. JPopupMenu
  3. JDialog
  4. JMessage
 

答案:a)

解释: JOptionPane 是一个用于创建标准对话框的组件,用于提示用户输入值或告知用户某些信息。


你知道吗
  • 如何在 Java 中创建可运行的 jar 文件?
  • 如何在 Swing 中在按钮上显示图像?
  • 如何通过从 ColorChooser 中选择颜色来更改组件颜色?
  • 如何在 Swing 教程中显示数字时钟?
  • 如何在 Swing 中创建记事本?
  • 如何在 Swing 中创建拼图游戏和图片拼图游戏?
  • 如何在 Swing 中创建井字游戏?