Swing简述

news2024/11/14 14:55:55

一、Swing概述

  • GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的GUI,使其能够在所有的平台上运行,但Java 1.0中基础类AWT(抽象窗口工具箱)并没有达到这个要求,于是Swing出现了,它是AWT组件的增强组件,但是它并不能完全替代AWT组件,这两种组件需要同时出现在一个图形用户界面中。

1. Swing特点

  • 原来的AWT组件来自java.awt包,当含有AWT组件的Java应用程序在不同平台上执行时,每个平台的GUI组件的显示会有所不同,但是在不同平台上运行使用Swing开发的程序时,就可以统一GUI组件的显示风格,因为Swing组件允许编程人员在跨平台时指定统一的外观和风格。
  • Swing组件通产被称为"轻量型组件",因为它完全由Java语言编写,而Java是不依赖于操作系统的语言,它可以在任何平台上运行;相反,依赖于本地平台的组件被称为“重量级组件”,如AWT组件就是依赖本地平台的窗口系统来决定组件的功能、外观和风格。
  • Swing主要具有以下特点:
    • 轻量级组件。
    • 可插入外观组件。

2. Swing包

  • 为了有效使用Swing组件,必须了解Swing包的结构层次和继承关系,其中比较重要的类是Component类、Container类、JComponent类。
  • Swing组件的类的层次和继承关系:
    在这里插入图片描述
  • 在Swing组件中大多数GUI组件都是Component类的直接子类或间接子类,JComponent类是Swing组件各种特性的存放位置,这些组件的特性包括设定组件边界、GUI组件自动滚动等。
  • 在Swing组件中最重要的弗雷是Container类,而Container类有两个最重要的子类,分别为java.awt.Window与java.awt.Frame,除了以往的AWT类组件会继承这两个类之外,现在的Swing组件也扩展了这两个类。顶层父类是Component类与Container类,所以Java关于窗口组件的编写,都与组件以及容器的概念相关联。

3. 常用Swing组件概述

组件名称定义
JButton代表Swing按钮,按钮可以带一些图片或文字。
JCheckBox代表Swing中的复选框组件。
JcomBox代表下拉列表框,可以在下拉显示区域显示多个选项。
JFrame代表Swing的框架类。
JDialog代表Swing版本的对话框。
JLabel代表Swing中的标签组件。
JRadioButton代表Swing中的单选按钮。
JList代表能够在用户界面中显示一系列条目的组件。
JTextField代表文本框。
JPasswordField代表密码框。
JTextArea代表Swing中的文本区域。
JOptionPane代表Swing中的一些对话框。

二、常用窗体

  • 作为Swing应用程序中组件的承载体,处于非常重要的位置。Swing中常用的窗体包括JFrame和JDialog。

1. JFrame窗体

  • JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时,可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗体继承了JFrame类,所以它拥有“最大化”、“最小化”、“关闭”等按钮。
  • JFrame的语法:
JFrame jf = new JFrame(title);
Contianer container = jf.getContentPane();
// jf:JFrame类的对象。
// container:Container类的对象,可以使用JFrame对象调用getContentPane()方法获取。
  • Swing组件的窗体通常与组件和容器有关,所以在JFrame对象创建完成后,需要掉哦用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。通常,这个容器用来包含和显示组件。如果需要将组件添加至容器,可以使用来自Container类的add()方法进行设置。
container.add(new JButton("按钮"));    // JButton组件
  • 在容器中添加组件后,也可以使用Container类的remove()方法将这些组件从容器中删除。
container.remove(new JButton("按钮"));     

实例1 使用JLabel简单标签组件

  • 下面的实例中实现了JFrame对象创建一个窗体,并在其中添加一个组件。
package pack1;
import java.awt.*;    // 导入awt包
import javax.swing.*;   // 导入swing包


public class Example1 extends JFrame {

	public void CreateJFrame(String title) {
		JFrame jf = new JFrame(title);       // 实例化一个JFrame对象
		Container container = jf.getContentPane();     // 获取一个容器
		JLabel jl = new JLabel("这是一个JFrame窗体");    // 获取一个JLabel标签
		jl.setHorizontalAlignment(SwingConstants.CENTER);    // 使标签上的文字居中
		
		container.add(jl);     // 将标签添加到容器中
		container.setBackground(Color.white);     // 设置容器颜色背景
		jf.setVisible(true);   // 设置窗体可视
		jf.setSize(200, 150);   // 设置窗体大小
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   // 设置窗体关闭方式
	}
	
	public static void main(String[] args) {    // 再主方法中调用CreateJFrame()方法
		// TODO Auto-generated method stub
		new Example1().CreateJFrame("创建一个JFrame窗体");
	}
}

在这里插入图片描述

  • Example1类继承了JFrame类,在CreateJFrame()方法中实例化JFrame对象。JFrame类的常用构造方法包括以下两种形式:
    • public JFrame()
    • public JFrame(String title)
  • JFrame类中的两种构造方法分别为无参和有参的构造方法,第1种形式的构造方法可以创建一个初始不可见、没有标题的新窗体;第2种在实例化该JFrame对象时可以创建一个不可见但有标题的窗体。可以使用JFrame对象调用show()方法使窗体可见,但是该方法早已被新版JDK弃用,通常使用setVisible(true)方法使窗体可见。
  • 可以使用setSize(int x, int y)方法设置窗体大小,其中x与y变量分别代表窗体的宽与高。
  • 创建窗体后,需要给予窗体一个关闭方式,可以调用setDefaultCloseOperation()方法关闭窗体。Java为窗体关闭提供了多种方式,常用的有以下4种:
    • DO_NOTHING_ON_CLOSE:什么都不做就将窗体关闭。
    • DISPOSE_ON_CLOSE:任何注册监听程序对象后会自动隐藏并释放窗体。
    • HIDE_ON_CLOSE:隐藏窗口的默认窗口关闭。
    • EXIT_ON_CLOSE:退出应用程序默认窗口关闭。
  • 这几种操作实质上是将一个int类型的常量封在javax.swing.WindowConstants接口中。

2. JDialog窗体

  • JDialog窗体是Swing组件中的对话框,它继承了AWT组件中的java.awt.Dialog类。
  • JDialog窗体的功能是从一个窗体弹出另一个窗体,就像是在使用IE浏览器时弹出确定对话框一样。JDialog窗体实质上是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。
  • 在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用以下几个Dialog类的构造方法
    • public JDialog():创建一个没有标题和父窗体的对话框。
    • public JDialog(Frame f):创建一个指定父窗体的对话框,但该窗体没有标题。
    • public JDialog(Frame f, boolean model):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题。
    • public JDialog(Frame f, String title):创建一个指定标题和父窗体的对话框。
    • public JDialog(Frame f, String title, boolean model):创建一个指定标题、窗体红外模式的对话框。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python3_kafka

简介 Kafka是一个分布式的消息队列系统,由LinkedIn开源。它被设计成高性能、高吞吐量的消息传输系统,适用于分布式系统中的实时数据流处理。 Kafka的优势 在使用Kafka之前,我们需要考虑以下问题: 1.数据处理速度是否快速&…

黑客如何从零学起?

一、MYSQL5.7 MySQL是如今使用最多的数据库,是众多企业的首选,在未来几年都将被持续推动发展。 学习MySQL需注重实战操作,循序渐进地了解MySQL中的各项技术,这样才能在实际工作中的关键应用。 想进入网络安全行业, …

机器学习-2 线性回归

线性回归及最大熵模型 算法概述最小二乘法一元线性回归求解方程系数代价函数最小二乘法求解系数 多元线性回归举例 算法应用数据集介绍实现线性回归算法实现线性回归的算法流程最小二乘法的局限性 梯度下降法场景梯度下降算法(Gradient Descent)算法实例…

Electron,我与你,今天不谈技术谈感情!

目录 前言一、无知二、初见三、再见四、相遇五、行动总结 前言 今天不谈技术,谈谈我和 Electron 的缘分。可能有人觉得,或许有些人认为,和一个框架谈感情这不是疯了吗?但是,我相信每个开发者都会有同样的经历&#xf…

关于蒙特卡罗方法及其在信号处理中的应用

说明 最近想探讨一下毫米波雷达测量准确度及其改善的问题,这个话题下可供讨论的问题有很多,蒙特卡罗方法(或者说基于蒙特卡罗方法对测量准确度以及精度的评估)是其中之一,该方法是一个十分有效的工具,在科研(发paper)上也是不可少…

UE5 C++类如何读取Excel配置表?

UE5 插件开发指南 前言0 如何编写读取数据的结构体?1 如何读取数据?1.0 如何获取数据资产的路径?2 如何调用商店子系统来读取数据?前言 虚幻引擎兼容CSV和JSON格式的数据结构,这里的CSV是Excel表格的保存格式,如下图所示: 打开任意Excel表格,点击文件菜单,然后鼠标悬浮到…

一文2000字从0到1教你搭建有效的测试环境

作为软件测试行业的从业者,搭建测试环境一定是在工作中少不了的任务安排,那么如何有效的搭建测试环境,咱们今天和大家聊一聊。 首先大家要明白测试环境是为了完成软件测试工作所需要的硬件资源,软件资源,网络资源&…

计算机网络实验(ensp)-​实验2:PPP协议及PAP认证

目录 实验报告: 实验操作 1.建立网络拓扑图并开启设备 2.修改路由器名字 1.输入命名:sys 从用户视图切换到系统视图 2.输入命名:sysname 姓名 修改路由器名字 3.重复步骤1和2配置每台路由器 3.抓包 1.点击菜单栏的“数…

(转载)从0开始学matlab(第7天)—运算的优先级与内置函数

1运算的优先级 许多的数学运算写入一个表达式是非常平常的事。例如,考虑初速度为 0 的匀加速运动的位移表达式 distance 0.5 * accel * time ^ 2 这个表达式有二个乘法运算和一个幂运算。在这样的表达式中,知道运算的先后顺序是十分重要的。如果幂运算先…

Redis系统学习篇-02

目录 redis进阶使用 redis作为数据库、缓存的区别 缓存常见问题、面试回答思路 redis的持久化 参考文档(redis.net.cn):Redis 教程_redis教程 系统学习01篇,总结起来就是,可以把redis想象成一个key/value的hashmap,只不过val…

Linux之路SNAT策略及应用

目录 二、SNAT实验的部署设计 三、具体实验步骤 第一步:做好实验前的虚拟机设置 1)网关服务器的设置 ①添加网卡,修改vmnet ②修改ens33为网关服务器的内网网卡 ③修改新加网卡ens36(这里添加的网卡是什么就用什么&#xff…

FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统

FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统 文章目录 FATFS移植 - 基于N32G4FR在SD卡(sd nand)上移植FATFS文件系统1. 前言2. FATFS文件系统介绍2.1 文件系统的概念和作用2.2 FATFS的特点和优势 3. 相关源码获取3.1 FatFs文件源码下载3.2 国民技术N32软件开发…

我们详细讲讲UI自动化测试最佳设计模式POM

概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。 在这种模式下,应用涉及的每一个页面应该定义为一个单独的类,类中应该包含此页面上的页面元素对象和处…

【Java校招面试】实战面经(一)

目录 前言一、单链表找三等分点(链表可能有环)二、讲几个熟悉的设计模式三、Spring IoC、AOP是什么,是如何实现的,Spring MVC是什么?四、怎么实现线程安全,各个实现方法有什么区别,synchronized…

Linux防火墙之iptables(下)

目录 一、通用匹配 1)协议匹配 2)地址匹配 3)接口匹配 二、隐含匹配 1)端口匹配 2)TCP标志位的匹配 3)ICMP的类型匹配 ①请求规则设置 ②回显匹配 ②显示目的不可达匹配 三、显示匹配 1 &…

教你精通Java语法之第十三章、反射

目录 一、定义 二、用途 三、反射基本信息 四、反射相关的类 4.1Class类 4.1.1Class类中的相关方法(方法的使用方法在后边的示例当中) ​编辑 4.2反射示例 4.2.1获得Class对象的三种方式 4.2.2反射的使用 五、反射优点和缺点 六、重点总结 一、定义 Java的反射&am…

计算机图形学 | 实验十:几何纹理(法线贴图)

计算机图形学 | 实验十:几何纹理(法线贴图) 计算机图形学 | 实验十:几何纹理(法线贴图)什么是法线贴图为什么需要切线空间加载法线贴图引入切线空间结果 华中科技大学《计算机图形学》课程 MOOC地址&#…

PCB基础~电源和地平面,去耦电容

电源和地平面 • 应该尽可能的使用电源和地平面, Why? – 在设备和电源之间提供一个低阻抗的路径 – 提供屏蔽 – 提供散热 – 降低分布电感 • 一个完整的无破损的平面是最优选择 – 破碎的地平面会在走线的上下层之间 引入寄生电感 • Remember! • 低频时&…

【服务器】利用树莓派搭建 web 服务器-无需公网IP

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 概述 使用 Raspberry Pi Imager 安装 Raspberry Pi OS 设置 Apache Web 服务器 测试 web 站点 安装静态样例站点 将web站点发布到公网 安装 Cpolar内网穿透 cpolar进行tok…

SQL-DDL语句DQL语句

SQL学习笔记 DDL语句--操作数据表 /* 快捷键: insert键 在插入 和 替换模式之间切换 ctrl 字母z 撤销上一步操作 tab 往后缩进(默认4个空格) shift tab 往前缩进(默认4个空格) …