Java基础-组件及事件处理(上)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

Swing

概述

MVC 架构

Swing 特点

控件

SWING UI 元素

JFrame

SWING 容器

说明 

常用方法

示例:

JDialog

说明

常用方法

重点内容

示例:


Swing

概述

Swing API 是一组可扩展的 GUI 组件,用来创建基于 JAVA 的前端/ GUI 应用程序。它是建立在 AWT API 之上,并且作为 AWT API 的替代者,因为它的几乎每一个控件都对应 AWT 控件。 Swing 组件遵循模型 - 视图 - 控制器架构来满足下面的准则。

  • 一个单一的 API 足够支持多种外观和风格。

  • API 是模拟驱动的,这样最高层级的 API 不需要有数据。

  • API 是使用 Java Bean 模式的,这样 Builder Tools 和 IDE 可以为开发者提供更好的服务来使用它。

MVC 架构

Swing API 架构用下列的方式来遵循基于松散的 MVC 架构。

  • 模型表示组件的数据。

  • 视图表示组件数据的可视化表示形式。

  • 控制器接受用户在视图上的输入,并且在组件的数据上反映变化。

  • Swing 组件把模型作为一个单独的元素,并且把视图和控制器部分组合成用户界面的元素。使用这种方式,Swing 具有可插拔的外观与风格架构。

Swing 特点

  • 轻量级 —— Swing 组件是独立的本地操作系统的 API,因为 Swing API 控件通常采用纯 JAVA 代码而不是采用底层的操作系统调用来呈现。

  • 丰富的控件 —— Swing 提供了一组丰富的先进的控件,如树,页签窗体,滑动条,颜色选择器,表格控件

  • 高级自定义 —— Swing 控件可以用非常简单的方法来自定义,因为可视化外观是独立于内部表示的。

  • 可插拔的外观和风格 —— 基于 Swing 的 GUI 应用程序的外观和风格可以在运行时根据有效的值改变。

控件

每个用户界面考虑有以下三个主要方面:

  • UI 元素: 有用户最终看到并且与之交互的核心视觉元素。GWT 提供了一个大量的广泛使用和常见的元素列表,本教程我们将涉及从基本到复杂的变化。

  • 布局: 他们定义应该如何在屏幕上组织 UI 元素,并且提供一个最终的外观和风格给 GUI(图形用户界面)。这部分将在布局这一章涉及。

  • 行为: 当用户与 UI 元素交互时,这些事件发生。这部分将在事件处理这一章涉及。

每个 SWING 控件从下列组件类的等级继承属性。

SWING UI 元素

下列是当使用 SWING 来设计 GUI 时常用的控件列表。

JFrame

SWING 容器

容器是 SWING GUI 组件的组成部分。一个容器提供了一个可以放置组件的空间。在 AWT 中,一个容器是组件本身,并且它增加了功能来添加组件本身。下面是需要考虑的注意事项。

  • 容器的子类被称为容器。例如 JPanel,JFrame 和 JWindow。

  • 容器可以仅仅添加组件到自身。

  • 一个默认的布局使用 setLayout 方法来呈现在每个可以被重写的容器中。

 下面是当使用 SWING 设计 GUI 事件时常用的容器列表。

JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。

JPanel – Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。。

JLabel – JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。

JTextField –一个轻量级组件,它允许编辑单行文本。

JPasswordField – 允许我们输入了一行字像输入框,但隐藏星号(*) 或点创建密码(密码)

JButton – JButton 类的实例。用于创建按钮类似实例中的 "Login"。

说明 

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

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

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

常用方法

   1.JFrame()    创建一个无标题的窗口

         2.JFrame(String s)    创建标题为s的窗口

         3.public void setSize(int width,int height)    设置窗口大小

        4.public void setLocation(int x,int y)    设置窗口位置,默认位置为(0,0)

        5.public void setBounds(int a,int b,int width,int height)    设置窗口的初始位置是(a,b),即距离屏幕左边a个像素,距离屏幕上方b个像素,窗口的宽是width,高是height
        6.public void  setBackgorund(color.red)        设置窗体背景颜色

        7.public void setVisible(boolean b)     设置窗口是否可见,默认窗口是不可见的

        8.public void setResizable(boolean b)     设置窗口是否可调整大小,默认窗口可调整大小

        9.public void dispose()     撤销当前窗口并释放所有使用的资源 
        10.add(Component comp)     向容器中增加组件

        11.getContentpane()      返回此窗口的容器对象

        12.public void setExtendedState(int state)     设置窗口的扩展状态,其中参数state取JFrame类中的下面类常量:
        MAXIMIZED_HORIZ(水平方向最大化)
        MAXIMIZED_VERI(垂直方向最大化)
        MAXIMIZED_BOYH(水平、垂直方向最大化)

        13.public void setDefaultClose(int operation)    设置单击窗体右上角的关闭图标后,程序会做出怎样的处理
    参数operation取JFrame类中的下列int型static常量,程序根据参数operation取值做出不同的处理:
        DO_NOTHING_ON_CLOSE(什么也不做)
        HIDE_ON_CLOSE(隐藏当前窗口)
        DISPOSE_ON_CLOSE(隐藏当前窗口并释放窗体占有的其他资源)
        EXIT_ON_CLOSE(结束窗口所在应用程序) 

示例:

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工具类调用createAndShowGUl()方法显示GUI程序         
    SwingUtilities.invokeLater(Example01::createAndShowGUl);
}


 结果:

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

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

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

JDialog

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

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

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

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

说明

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

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

常用方法

重点内容

1.super(超级)
主要用于打开了子窗体时,阻塞对父窗体的修改。也就是说打开了窗体便不能对父窗体有任何动作,关闭子窗体才可以对父窗体开始操作。
super(A,B,C);
A-----父窗体对象
B-----对话框标题
C-----是否阻塞父窗体

2.按钮Btton
JButton btn=new JButton("弹出对话框");
表示创建按钮,然后按钮标签为“弹出对话框”。

c.setLayout(new FlowLayout());
设置布局,使用流布局。不使用流布局(也就是当没有使用这句代码时),按钮会占满整个窗体,而不是像下面的淡蓝色长方形了。

示例:

import java.awt.Container;// 容器
import java.awt.FlowLayout;// 布局
import java.awt.event.ActionEvent;// 动作事件
import java.awt.event.ActionListener; // 动作监听
import javax.swing.*;// JDialog窗体是Swing组件中的对话框

class Demo extends JDialog{		// Demo继承JDialog类
	public Demo(JFrame frame){
		/*
		* 第一个参数:父窗体对象
		* 第二个参数:对话框标题
		* 第三个参数:是否阻塞父窗体
		*/
		super(frame,"对话框标题",true);

		Container c=getContentPane();// 获取窗体容器,Container(容器),content(内容),pane(窗格)
		c.add(new JLabel("这是一个对话框"));// 设置一个标签,label(标签)

//1		setVisible(true);// 设置窗体可见,visible(可见物),放这最后对话框缩起来
		setBounds(400,300,100,100);// 设置窗体坐标,x、y、长、宽,bounds(界限)
	}

	public static void main(String[] args){
		JFrame f=new JFrame("父窗体");
		f.setBounds(300,200,300,300);
		Container c=f.getContentPane();
		JButton btn=new JButton("弹出对话框");
		c.setLayout(new FlowLayout());//设置布局,使用流布局
		c.add(btn);// 容器c里添加按钮
		f.setVisible(true);// 窗体是否可见
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭规则
		
		//添加动作监听
		btn.addActionListener(new ActionListener(){	// Action(行动)
			public void actionPerformed(ActionEvent e){// performed(执行),event(事件)
//1				new Demo(f);// 传入f
				// 设置Demo类d,对d进行操作指令
				Demo d=new Demo(f);
				d.setVisible(true);// 设置窗体可视化
			}
		});
	}
}

运行效果:

  • 源码刚开始运行时,没有任何动作
  • 点击按钮后

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么选择虚拟艺术设计展览?艺术家应知的五个关键好处

随着技术的进步,虚拟艺术设计展览成为了展示艺术作品的重要途径。它不仅为艺术家们提供了新的展示平台,还打破了传统展览的局限。 1、扩大观众范围:打破地理限制 虚拟艺术设计展览能够打破地理限制,使得全球观众可以随时随地访问…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

《梦醒蝶飞:释放Excel函数与公式的力量》10.2 COMPLEX函数

第二节 10.2 COMPLEX函数 10.2.1函数简介 COMPLEX函数是Excel中的一个工程函数,用于将实部和虚部组合成一个复数。复数广泛应用于工程、电气、物理等领域,COMPLEX函数提供了方便的复数表示和计算方法。 10.2.2语法: COMPLEX(real_num, i_…

SpringSecurity-SpirngBoot-方法级授权(SpringSecurity6.3新特性)(四)

SpringSecurity-SpirngBoot-方法级授权(SpringSecurity6.3新特性)(四) 本章使用SpringSecurity6.3新特性实现数据级别的鉴权,主要的目的是实现不同权限的用户查询同一个方法,限制一些内容只能拥有特定权限…

自定义@AnonymousAccess注解

一.目的: 自定义AnonymousAccess注解,可以直接在controller上添加该注解使请求绕过权限验证进行匿名访问,便于快速调用调试以及部分不需要进行安全验证的接口。而不是每次都需要去SecurityConfig文件中进行修改。 二.流程: 三.实…

阿里MotionShop——AI视频工具:一键替换视频人物为3D虚拟角色~

近期AI相关的新奇应用层出不穷,今天小元老师要给大家安利一个由阿里巴巴研发的AI视频生成技术——MotionShop! 1、一键替换3D虚拟角色 MotionShop通过视频处理、角色检测、背景修复等多重步骤,能够将视频中的人物角色,一键转换成…

Pytorch(笔记7损失函数类型)

前言 损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差,度量模型一次预测的好坏。 代价函数(Cost Function)成本函数经验风险:是定义在整个训练集上的&#xff0c…

文件防止拷贝如何实现?这些攻略给你了

在信息爆炸的时代,数据安全成为企业和个人不可忽视的重要环节。文件的非法拷贝不仅可能侵犯知识产权,还可能导致敏感信息的泄露,进而引发严重的后果。 因此,了解并掌握文件防止拷贝的方法和技术至关重要。本文将详细介绍几种常见…

压测jmeter 插件 之 tps和响应时间图

1. 背景 进行压测ing 2. 需要插件 TPS 和 响应时间 3. 插件 在 选项-最下面-plugins Manager 在 Available Plugins 中 搜索 :jpgc - Standard Set 重启安装就好啦

12--RabbitMQ消息队列

前言:前面一章内容太多,写了kafka,这里就写一下同类产品rabbitmq,rabbitmq内容较少,正好用来过度一下,概念还是会用一些例子来说明,实际部署的内容会放在概念之后。 1、基础概念 1.1、MQ消息队…

年化15.73%:创业板指数布林带突破Backtrader策略(代码+数据)

原创文章第582篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 昨天咱们使用backtrader,重写了创业板动量趋势择时:年化19.2%:backtraderquantstats实现创业板动量择时(代码数据) 今天咱们换一个通道指标&#…

计算机视觉研究方向初学习,计算机视觉都有什么方向??!到底是干什么的?!

计算机视觉研究方向初学习,计算机视觉都有什么方向??!到底是干什么的?! 语义分割图像分类目标检测和定位实例分割、全景分割物体跟踪姿态估计人脸识别人体识别图像增强风格迁移图像生成视觉问答视频分析光学…

C++视觉开发 七.模板匹配

模板匹配是一种基于图像处理的技术,用于在目标图像中寻找与给定模板图像最相似的部分。通过设定的模板,将目标图像与模板图像比较,计算其相似度,实现对目标图像的判断。 目录 一.手写数字识别 重要函数: 1.cv::glob…

【已解决】腾讯云安装了redis,但是本地访问不到,连接不上

汇总了我踩过的所有问题。 查看配置文件redis.conf 1、把bind 127.0.0.1给注释掉(前面加个#就是)或者改成bind 0.0.0.0,因为刚下载时它是默认只让本地访问。(linux查找文档里的内容可以输入/后面加需要匹配的内容,然后…

FAO(脂肪酸β-氧化,Fatty acid beta-oxidation)应用实例

一、FAOBlue及其香豆素衍生物的吸收光谱和荧光光谱 在PBS缓冲液(pH 7.4)中,FAO代谢后释放的FAOBlue和香豆素衍生物的吸收光谱(左)、荧光光谱(右)。 FAOBlue经过FAO转化为香豆素衍生物后&#…

同步时钟系统支持多种校时方式

在当今数字化、信息化高速发展的时代,时间的准确性和同步性变得至关重要。无论是金融交易、通信网络、交通运输,还是工业生产、科学研究等领域,都离不开一个精确且同步的时钟系统。而同步时钟系统之所以能够在众多领域发挥关键作用&#xff0…

使用Python绘制箱线图并分析数据

使用Python绘制箱线图并分析数据 在这篇博客中,我们将探讨如何使用Python中的pandas库和matplotlib库来绘制箱线图,并分析数据文件中的内容。箱线图是一种常用的图表类型,用于展示数据的分布情况及其统计特性,如中位数、四分位数…

程序员日志之DNF手游强化20攻略

目录 传送门正文日志1、概要2、炭的获取3、强化 传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品) SpringBoot3框架(精品) MyBatis框架(精品) MyBatis-Plus SpringDataJP…

全能型CAE/CFD建模工具SimLab 详解Part1: Geomtry,轻松集成力学、电磁学、疲劳优化等功能

SimLab的建模功能 SimLab集成了结构力学,流体力学,电磁学,疲劳和优化等功能,是全能型的CAE / CFD建模工具。 具有强大的几何、网格编辑功能,能够快速的清理复杂模型,减少手动修复的工作量,提高…

websocket推送消息,模拟推送

上一篇文章:什么是webSocket?以及它的一些相关理论知识 背景: MQTT 的发布/订阅模式与 WebSocket 的双向通信特性相结合。 通过将 MQTT 与 WebSocket 结合使用,可以在 Web 应用中实现高效、实时的消息传输,特别适用于…