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

server/2024/11/26 1:38:29/

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

目录

BorderLayout布局管理器

说明:

示例:

FlowLayout布局管理器

说明:

示例:

GridLayout布局管理器 

说明:

示例:

事件处理机制

什么是事件?

事件的类型

什么是事件处理? 

事件处理所涉及的步骤 

回调方法

Swing常用事件处理

SWING 事件类

EventObject 类

类声明

字段 

类构造函数

类方法 


BorderLayout布局管理器

说明:

BorderLayout 将容器分为 EAST 、 SOUTH 、 WEST 、 NORTH 、 CENTER五个区域,普通组件可以被放置在这 5 个区域的任意一个中 。 BorderLayout布局 管理器的布局示意图如图所示 

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


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


传参时可以使用BorderLayout类提供的5个常量设置组件位置,它们分别是EAST 、 SOUTH 、 WEST 、 NORTH 、 CENTER

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


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


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

示例:

java">import java.awt.*;public class BorderLayoutDemo1 {public static void main(String[] args) {//1.创建Frame对象Frame frame = new Frame("这里测试BorderLayout");//2.指定Frame对象的布局管理器为BorderLayoutframe.setLayout(new BorderLayout(30,5));//3.往Frame指定东南西北中各添加一个按钮组件frame.add(new Button("东侧按钮"), BorderLayout.EAST);frame.add(new Button("西侧按钮"), BorderLayout.WEST);frame.add(new Button("南侧按钮"), BorderLayout.SOUTH);frame.add(new Button("北侧按钮"), BorderLayout.NORTH);frame.add(new Button("中间按钮"), BorderLayout.CENTER);//4.设置Frame为最佳大小frame.pack();//5.设置Frame可见frame.setVisible(true);}
}

FlowLayout布局管理器

说明:

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


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


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

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


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


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

示例:

java">import java.awt.*;public class FlowLayoutDemo {public static void main(String[] args) {//1.创建Frame对象Frame frame = new Frame("这里测试FlowLayout");//2.修改Frame容器的布局管理器为FlowLayoutframe.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));//3.往Frame中添加100个buttonfor (int i = 0; i < 100; i++) {frame.add(new Button("按钮"+i));}//4.设置Frame为最佳大小frame.pack();//5.设置Frame可见frame.setVisible(true);}
}

GridLayout布局管理器 

说明:

GridLayout 布局管理器将容器分割成纵横线分隔的网格 , 每个网格所占的区域大小相同。当向使用 GridLayout 布局管理器的容器中添加组件时, 默认从左向右、 从上向下依次添加到每个网格中 。 与 FlowLayout不同的是,放置在 GridLayout 布局管理器中的各组件的大小由组件所处的区域决定(每 个组件将自动占满整个区域) 。

GridBagLayout 布局管理器的功能最强大 , 但也最复杂,与 GridLayout 布局管理器不同的是, 在GridBagLayout 布局管理器中,一个组件可以跨越一个或多个网格 , 并可以设置各网格的大小互不相同,从而增加了布局的灵活性 。 当窗口的大小发生变化时 , GridBagLayout 布局管理器也可以准确地控制窗口各部分的拉伸 。

由于在GridBagLayout 布局中,每个组件可以占用多个网格,此时,我们往容器中添加组件的时候,就需要具体的控制每个组件占用多少个网格,java提供的GridBagConstaints类,与特定的组件绑定,可以完成具体大小和跨越性的设置。

示例:

java">import java.awt.*;public class GridLayoutDemo{public static void main(String[] args) {//1.创建Frame对象,并且标题设置为计算器Frame frame = new Frame("计算器");//2.创建一个Panel对象,并且往Panel中放置一个TextField组件Panel p1 = new Panel();p1.add(new TextField(30));//3.把上述的Panel放入到Frame的北侧区域frame.add(p1,BorderLayout.NORTH);//4.创建一个Panel对象,并且设置其布局管理器为GridLayoutPanel p2 = new Panel();p2.setLayout(new GridLayout(3,5,4,4));//5.往上述Panel中,放置15个按钮,内容依次是:0,1,2,3,4,5,6,7,8,9,+,-,*,/,.for (int i = 0; i < 10; i++) {p2.add(new Button(i+""));}p2.add(new Button("+"));p2.add(new Button("-"));p2.add(new Button("*"));p2.add(new Button("/"));p2.add(new Button("."));//6.把上述Panel添加到Frame的中间区域中国frame.add(p2);//7.设置Frame为最佳大小frame.pack();//8.设置Frame可见frame.setVisible(true);}
}

 

事件处理机制

什么是事件?

改变对象的状态被称为事件,即事件描述源的状态变化。事件产生用户与图形用户界面组件交互的结果。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面都是导致一个事件发生的活动。

事件的类型

事件可以大致分为两类::

  • 前台事件 - 这些事件需要用户的直接互动。它们是由在图形用户界面中人与图形组件交互的结果而产生的。例如,点击一个按钮,移动鼠标,通过键盘输入一个字符,从列表中选择一个项目,滚动页面等。

  • 后台事件 - 这些事件需要最终用户的交互,它们被称为后台事件。操作系统的中断,硬件或软件故障,计时器过期,操作完成都是后台事件的例子

什么是事件处理? 

事件处理是一种机制,如果一个事件发生时,它控制该事件,并且决定应该会发生什么。这种机制具有被称为事件处理程序的代码,当一个事件发生时,它是可执行的。Java 使用代理事件模型来处理事件。该模型定义了标准的机制来生成和处理事件。让我们来简要介绍这个模型。

代理事件模型具有下列主要参与者,即:

  •  - 源是一个对象,事件发生在该对象上。源负责提供发生事件的信息给它的处理器。Java 提供源对象的类。

  • 监听器 - 它也被称为作为事件处理。监听器负责产生对一个事件的响应。从 Java 实现的角度来看,监听器也是一个对象。监听器等待直到它接收到一个事件。一旦收到该事件,监听器进程的事件就返回。

这种方法的好处是,用户界面逻辑完全从生成事件的逻辑中分开。用户界面元素能够把事件的处理委派给一段单独的代码。在这个模型中,监听器需要用源对象注册,以便监听器能够接收事件通知。这是一个有效的处理事件的方式,因为这些事件通知只发送给那些想要接收它们的监听器。

事件处理所涉及的步骤 

  • 用户单击按钮,然后生成事件。

  • 现在有关事件类的对象是自动创建的,源和事件的信息在同一对象得到填充。

  • 事件对象被转发到注册监听器类的方法中。

  • 该方法现在得到执行并且返回。

有关监听器要记住的要点:

  • 为了设计一个监听器类,我们必须开发一些监听器接口。这些监听器接口预测一些公共的抽象回调方法,这些方法必须由监听器类来实现。

  • 如果你没有实现任何预定义的接口,那么你的类不能作为源对象的监听器类。

回调方法

这些方法由 API 提供者来提供,由应用程序员来定义,并且由应用程序开发者来调用。这里的回调方法代表一个事件方法。响应一个事件 java jre 将触发回调方法。所有这些回调方法在监听器接口中被提供。

如果一个组件需要一些监听器监听它的事件,源必须自己注册给监听器。

Swing常用事件处理

SWING 事件类

事件类代表事件。Java 提供各种事件类,但是我们将讨论更频繁使用的那些事件类。

EventObject 类

它是派生所有事件状态对象的根类。所有事件都是用对象,的引用来构造的,即逻辑上认为是问题最初发生的事件的对象。这个类定义在 java.util 包中。

类声明

下面是 java.util.EventObject 类的声明:

java">public class EventObjectextends Objectimplements Serializable

字段 

下面是 java.util.EventObject 类的字段:

  • protected Object source –- 事件最初发生的对象。

类构造函数

类方法 


http://www.ppmy.cn/server/144945.html

相关文章

数据结构哈希表-(开放地址法+二次探测法解决哈希冲突)(创建+删除+插入)+(C语言代码)

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define M 20 #define NULLDEL -1 #define DELDEY -2typedef struct {int key;int count; }HashTable;//创建和插入 void Insert(HashTable ha[], int m, int p, int key) {int i, HO, HI;HO key…

ubuntu增加swap交换空间

论坛_开发者_技术论坛_鲲鹏_昇腾_华为 先关闭 &#xff0c;否则报错 fallocate: fallocate 失败: 文本文件忙 sudo swapoff /swapfile sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo vim /etc/fstab 添加…

【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理

中远大昌统一发票共享平台上线三个多月以来&#xff0c;实现&#xff1a; 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司&#xff08;以下简称“中远大昌”&#xff09;成立于2002年&#xff0c;是中远海运集团所属香远&#xff08;北…

Java Database Connectivity (JDBC + Servlet)

https://blog.csdn.net/SuYuewu/article/details/143986880?sharetypeblogdetail&sharerId143986880&sharereferPC&sharesourceSuYuewu&spm1011.2480.3001.8118 Java Database Connectivity (JDBC)是一个Java API&#xff0c;用于与数据库进行连接和操作。通过…

微信万能门店小程序系统存在任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

5、AI测试辅助-生成测试用例思维导图

AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐&#xff09;2、Markdown思维导图版本&#xff08;推荐&#xff09; 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素&#xff1a; 1、测试模块 2、测试标题 3、前置条件 4、…

鸿蒙生态崛起

1.鸿蒙生态&#xff1a;开发者的新蓝海 从开发者角度看&#xff0c;鸿蒙生态带来了巨大机遇。其分布式能力实现了不同设备间的无缝体验&#xff0c;如多屏协同&#xff0c;让应用能跨手机、平板、智能穿戴和车载设备流畅运行。开发工具也有显著提升&#xff0c;方舟编译器等极大…

Java基于Spring Boot框架的房屋租赁系统,附源码

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…