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);// 设置窗体可视化}});}
}

运行效果:

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

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

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

相关文章

服务器信息获取工具

功能介绍 SSH连接到远程服务器: 用户可以输入目标服务器的IP地址、用户名、密码以及SSH端口(默认22)。 工具会尝试连接到远程服务器,并在连接失败时显示错误信息。 运行命令并返回输出: 工具可以在远程服务器上运…

python (必看)10个提升接口自动化编写效率的脚本!

亲爱的开发者们,👋 在快速迭代的软件开发周期中,接口自动化测试扮演着至关重要的角色。今天,我们将分享10个实用的Python小脚本,它们能够显著提升你编写接口自动化测试的效率。无论是初学者还是资深工程师,…

算法体系-26 第二十六节:第26节:单调栈结构 (5节)

一 单调栈知识讲解 1.1描述 一个数组里面想的到每个位置与他最近的左边和右边比他小的最近的信息 1.2 分析 通过单调栈的特点,for遍历数组中的每个数,当前数来的时候对比单调栈中的数进行每个数的左右判断完满足条件的进行更新到当前i种的 int[][] re…

采用3种稀疏降噪模型对心电信号进行降噪(Matlab R2021B)

心电信号采集自病人体表,是一种无创性的检测手段。因此,心电信号采集过程中,本身也已经包含了机体内部其他生命活动带来的噪声。同时,由于采集设备和环境中存在电流的变化,产生电磁发射等物理现象,会对心电…

学习测试7-ADB的使用

ADB是什么? ADB,即 Android Debug Bridge(安卓调试桥) 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell&…

最新全国1-5级标准河流水系矢量数据

2023最新全国一级~五级标准河流水系 shp 矢量数据 2023最新全国一级~五级标准河流水系 shp 矢量数据 Arcgis 五级河流水系全国合集和按省区分 坐标系:wgs84 更新年份:2023年 包含20230SM提取全国超详细水体 Arcgis 矢量数据&a…

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例

TIA博途与威纶通触摸屏无实物仿真调试的具体方法示例 准备条件: TIA PORTAL V16 S7-PLCSIM V16 EasyBuilderPro V6.9.1 NetToPLCsim V1.2.5 如有需要,可以在这个链接中下载 NetToPLCSim - Browse Files at SourceForge.net538 weekly downloads3 weekly downloads12 weekly d…

R包:蛋白质组学质控评估PTXQC包

介绍 PTXQC包是2016年发表在J Proteome Res期刊上的R包,它主要是对MaxQuant输出结果进行提取处理从而获得评估蛋白质质量结果。 安装 从github安装,安装过程会自动构建tutorial。 devtools::install_github("cbielow/PTXQC", build_vignet…

AI数字人直播saas系统源码部署火爆!无人直播系统全攻略

随着直播行业的日益兴盛,各种直播模式和玩法不断涌现。其中,AI数字人直播更是凭借着其在降本增效的独特优势而在众多直播模式中脱颖而出,成为了众多企业已经引进或计划引进的新型技术。而各大数字人源码厂商推出的AI数字人直播saas系统源码部…

走拼箱货必看海运拼箱的实用技巧

在国际海运运输中,海运拼箱适用于货物数量较少或体积不足以填满整个集装箱的情况。 海运拼箱货物通常由物流公司或货代进行组织和管理。多个货主的货物通过合理拼装,使集装箱空间得到充分利用。 那么,在海运拼箱和整柜有哪些不同&#xff0c…

Linux -- 认识gcc/g++、代码的编译过程

目录 前言: 使用 gcc/g: 代码的编译过程: 预处理: 头文件展开: 宏替换去注释: ​编辑 条件编译: 编译: 汇编: 链接: 动态库(动态链…

使用Simulink基于模型设计(二):系统定义和布局

Simulink模型的顶层系统布局是许多工程团队可以使用的公共环境,是基于模型的设计范式:分析、设计、检验和实现。您可以通过确定模型的结构和各个组件来定义顶层系统。然后,您可以将模型按照层次结构进行组织,分别与系统的各个组件…

【鸿蒙学习笔记】交互事件

官方文档:交互事件 目录标题 分类交互事件-触屏交互事件-手势事件单一手势 分类 交互事件-触屏 在组件上按下(Down) , 滑动(Move) , 抬起(up)时触发的回调事件。包括点击事件、触摸事件和拖拽事件 交互事件-手势事件 在手机上点击打开应用 , 长按后拖动应用 , 这…

自动化数据集成的BI工具,为你提供决策洞察力

传统的商业智能(BI)报表系统采用的是“业务提报表需求,IT进行开发”的模式。决策管理者和业务人员提出用报表等来展示经营管理数据的需求;接着IT响应需求,进行需求沟通、数据处理加工、报表开发等主体工作;…

RFID资产管理系统 RFID固定资产管理系统

大多数企业都曾被固定资产管理“难”的问题困扰:账物不符、查询不便、盘点耗时……因此,越来越多的企业选择用资产管理系统,来实现资产智能化管理。 RFID资产管理系统方案是针对大多数企业存在的资产管理痛点,采用RFID技术&#…

uni-app三部曲之三: 路由拦截

1.引言 路由拦截,个人理解就是在页面跳转的时候,增加一级拦截器,实现一些自定义的功能,其中最重要的就是判断跳转的页面是否需要登录后查看,如果需要登录后查看且此时系统并未登录,就需要跳转到登录页&…

Python地震波逆问题解构算法复杂信号分析

🎯要点 🎯时域、时频域以及时间和频率相关联偏振特性分析三种算法 | 🎯时域波参数估计算法 | 🎯机器学习模型波形指纹分析算法 | 🎯色散曲线和频率相关波分析算法 | 🎯动态倾斜校正算法 | 🎯声…

【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

新手小白报考学习PMP会遇到哪些“坑”?

PMP考试的陷阱实际上与其他大型证书考试差不多,主要是在选择培训机构和各种收费方面会遇到一些坑。 首先,并不是每个人都能经历这些坑,因为PMP考试有一定的门槛。 作为引进国外的考试,报名都有中英文之分,所以先来看…

STM32的 DMA(直接存储器访问) 详解

STM32的DMA(Direct Memory Access,直接存储器存取)是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM,不需要CPU的干预,从而释放CPU资源,提高CPU工作效率,本文基于STM32F…