AWT概述

article/2025/8/19 18:07:19

目录

AWT继承关系

window

Panel

布局管理器

FlowLayout(流式布局管理器)

BorderLayout(边界布局管理器)

GridLayout(网格布局管理器)

GridBagLayout(网格包布局管理器)

 CardLayout(卡片布局管理器)



AWT继承关系

AWT提供了一系列用于图形界面的组件,如窗口、按钮、文本框、对话框等等。接下看一下他们之间的继承关系:

 

window

window类是不依赖于其他容器而独立存在容器,它有两个子类,分别是Frame类和Dialog类。对于Frame类用于创建一个具有标题栏的框架窗口,作为程序的主界面;而Dialog用于创建一个对话框,用于实现与用户的信息交互。

Panel

Panel是一个容器,他不能单独存在,必须存在于其他容器中,比如Window类或者其子类,Panel对象代表了一个长方形的区域,在这个区域中可以收纳其他组件,在程序中通常用Panel来实现一些特殊的布局。

布局管理器

由于组件不能单独存在,必须放在容器当中,为了更好的布置组件的位置和尺寸,所以要设置布局管理器进行布局。在Java中,有五种布局管理器,分别为Flowlayout , Boderlayout , Gridlayout, Gridbaglayout 和 cardlayout.

FlowLayout(流式布局管理器)

布局规则:

FlowLayout构造方法
Constructor描述
1FlowLayout​()

构造一个新的 FlowLayout ,具有中心对齐和默认的5单位水平和垂直间隙。

2FlowLayout​(int align)

构造新的 FlowLayout具有指定的对齐和默认的5单位水平和垂直间隙。

3FlowLayout​(int align, int hgap, int vgap)

创建一个新的流程布局管理器,具有指示的对齐方式和指示的水平和垂直间距。

参数:

align - 对齐值,值一般是FlowLayout.LEFT , FlowLayout.RIGHT , FlowLayout.CENTER , FlowLayout.LEADING ,或FlowLayout.TRAILING 。 
hgap - 组件之间和组件之间的水平间隙和 Container的边界 
vgap - 组件之间和组件之间的垂直间隙以及 Container的边框

实例:

import java.awt.*;
public class test1 {public static void main(String[] args) {
//		创建窗口体final Frame f=new Frame("Flowlayout");
//		设置布局管理器为FlowLayout,所有组件左对齐,水平距离20,垂直距离为30f.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
//		设置窗口大小f.setSize(220,300);
//		设置显示位置f.setLocation(300,200);
//		添加按钮f.add(new Button("第1个按钮"));f.add(new Button("第2个按钮"));f.add(new Button("第3个按钮"));f.add(new Button("第4个按钮"));f.add(new Button("第5个按钮"));f.add(new Button("第6个按钮"));
//		设置窗口可见f.setVisible(true);}
}

运行结果:

分析:

所有组件有规律的进行排列,但是灵活性差了一点,还有你会发现,这个页面不能退出,那是没有编写退出事件,请看下一文,详细说明如何编写退出事件:

AWT事件处理

BorderLayout(边界布局管理器)

布局规则:分为五个板块位置,如下图:

                              

实例:

import java.awt.*;
public class test2 {public static void main(String[] args) {
//		创建窗口体,进行命名final Frame f=new Frame("Flowlayout");
//		设置布局管理器,窗口大小,窗口的位置f.setLayout(new BorderLayout());f.setSize(300,300);f.setLocation(300,200);f.setVisible(true);Button bu1=new Button("东方");Button bu2=new Button("西方");Button bu3=new Button("南方");Button bu4=new Button("北方");Button bu5=new Button("中方");f.add(bu1,BorderLayout.EAST);f.add(bu2,BorderLayout.WEST);f.add(bu3,BorderLayout.SOUTH);f.add(bu4,BorderLayout.NORTH);f.add(bu5,BorderLayout.CENTER);}
}

运行结果:

分析:

如果不指定添加到那个区域,组件会默认添加到center区域,并且每个区域只能添加一个组件,一个区域添加多个组件时,后添加的组件会覆盖原来的组件。

GridLayout(网格布局管理器)

布局规则:

用横竖线把容器分为N行M列大小相同的网格,然后依次像FlowLayout一样添加组件,并且每个网格放置一个组件。

GridLayout构造方法
Constructor描述
1GridLayout​()

在单个行中创建一个每个组件的默认值为一列的网格布局。

2GridLayout​(int rows, int cols)

创建具有指定行数和列数的网格布局。

3GridLayout​(int rows, int cols, int hgap, int vgap)

创建具有指定行数和列数的网格布局。

rows和cols一个但不是两个可以为零,这意味着可以将任意数量的对象放置在行或列中。 
所有GridLayout构造函数都GridLayout这一个。 
参数 
rows - 值为0,表示任意数量的行 
cols - 列,值为零表示任意数量的列 
hgap - 水平间隙 
vgap - 垂直间隙 
实例:

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
//网格布局管理器
public class test3 {public static void main(String[] args) {Frame f=new Frame();
//		设置窗体为3*3网格f.setLayout(new GridLayout(3,3));f.setSize(300,300);f.setLocation(400,300);for(int i=0;i<=9;i++) {Button btn=new Button("btn"+i);f.add(btn);}f.setVisible(true);}
}

运行结果:

分析:

组件的相对位置不会随着区域缩放而改变,但是组件的大小会随着缩放会改变

GridBagLayout(网格包布局管理器)

最为复杂,最灵活的布局管理器。

布局规则:

与GridLayout相似,不同在于组件可以跨多个网格。

可以垂直,水平或沿其基准对齐组件,而不需要组件的大小相同。 每个GridBagLayout对象维护一个动态的,矩形的单元格网格,每个组件占据一个或多个单元格,称为其显示区域 。 由GridBagLayout管理的每个组件与一个GridBagConstraints的实例相关联。 constraints对象指定组件的显示区域在网格上的位置以及组件在其显示区域内的位置。 除了其约束对象        外, GridBagLayout还考虑每个组件的最小和首选大小,以确定组件的大小。 
容器的整体方向取决于集装箱的ComponentOrientation属性。 对于水平从左到右的方向,网格坐标(0,0)位于容器的左上角,其中x向右增加,y向下增加。 对于水平从右到左的方向,网格坐标(0,0)位于容器的右上角,其中x向左增加,y向下增加。 为了有效使用网格包布局,必须定制一个或多个GridBagConstraints了与它的组件相关联的对象。

GridBagLayout常用属性

1.GridBagConstraints.gridx , GridBagConstraints.gridy 
指定包含组件显示区域的前角的单元格,其中网格原点的单元格地址gridx = 0 ,gridy = 0 。 对于水平从左到右的布局,组件的前角是其左上角。 对于水平从右到左的布局,组件的前角是其右上角。 使用GridBagConstraints.RELATIVE (默认值)来指定在添加该组件之前添加到容器中的组件,立即将组件放置在(沿x轴为gridx或y轴为gridy )之后。 
2.GridBagConstraints.gridwidth , GridBagConstraints.gridheight 
指定组件显示区域中一行中的单元格数( gridwidth )或列( gridheight )。 默认值为1.使用GridBagConstraints.REMAINDER指定组件的显示区域将从gridx到行中的最后一个单元格( gridwidth )或从gridy到列的最后一个单元格( gridheight )。 使用GridBagConstraints.RELATIVE指定组件的显示区域将从gridx到其行中最后一个单元格的下一个( gridwidth或从gridy到其列中最后一个单元格的gridheight )( gridheight )。 
3.GridBagConstraints.fill 
当组件的显示区域大于组件的请求大小时使用,以确定是否(以及如何)调整组件的大小。 可能的值为

GridBagConstraints.NONE (默认值), GridBagConstraints.HORIZONTAL (使组件宽度足以水平填充其显示区域,但不要更改其高度), GridBagConstraints.VERTICAL (使组件足够高以垂直填充其显示区域,但不要更改其宽度)和GridBagConstraints.BOTH (使组件完全填充其显示区域)。

4.GridBagConstraints.weightx, GridBagCOnstraints.weighty

设置组件占领容器中多余的水平方向和竖直方向空白比例(也称为权重)。 
5.GridBagConstraints.ipadx , GridBagConstraints.ipady 
在布局中指定组件的内部填充,添加到组件的最小大小的多少。 组件的宽度至少为其最小宽度加上ipadx像素。 类似地,组件的高度将至少为最小高度加上ipady像素。 
6.GridBagConstraints.insets 
指定组件的外部填充,组件与其显示区域边缘之间的最小空间量。 
7.GridBagConstraints.anchor 
指定组件在其显示区域中的位置。 有三种可能的值:绝对值,方向相对值和基线相对方向相对值相对于容器的ComponentOrientation属性进行解释,绝对值不是。 基线相对值相对于基线计算。 有效值为: Absolute, relative and baseline values as described above 

实例:

package daya7;
import java.awt.*;
//      网格包布局
class Layout extends Frame{public Layout(String title) {
//		创建布局管理器,采用该布局GridBagLayout layout=new GridBagLayout();GridBagConstraints c=new GridBagConstraints();this.setLayout(layout);
//		设置组件横竖可拉伸距离,c.fill =GridBagConstraints.BOTH;
//		设置横向,竖向权重为1c.weightx=1;c.weighty=1;this.addComponent("btn1",layout,c);this.addComponent("btn2",layout,c);this.addComponent("btn3",layout,c);
//		添加组件是本行最后一个组件c.gridwidth=GridBagConstraints.REMAINDER;this.addComponent("btn4", layout, c);c.weightx=0;c.weighty=0;this.addComponent("btn5", layout, c);
//		设置组件跨一个网格(默认值)c.gridwidth=1;this.addComponent("btn6", layout, c);
//		添加组件是本行最后一个组件c.gridwidth=GridBagConstraints.REMAINDER;this.addComponent("btn7", layout, c);
//		设置组件纵向跨两个网格,横向跨一个网格,横向竖向权重为2c.gridheight=2;c.gridwidth=1;c.weightx=2;c.weighty=2;this.addComponent("btn8", layout, c);c.gridwidth=GridBagConstraints.REMAINDER;c.gridheight=1;this.addComponent("btn9", layout, c);this.addComponent("btn10", layout, c);this.setTitle(title);this.pack();this.setVisible(true);	}
//	添加组件的方法private void addComponent(String name, GridBagLayout layout, GridBagConstraints c) {// TODO Auto-generated method stubButton bt=new Button(name);
//		设置GridBagConstraints和按钮的关联layout.setConstraints(bt, c);
//		增加按钮this.add(bt);}
}
public class test4_a{public static void main(String[] args) {new Layout("GridBagLayout");}
}

运行结果:

 CardLayout(卡片布局管理器)

布局规则:

把界面看作一系列卡片,便于切换界面,一次只能显示一个界面卡片

实例:

package daya8;
import java.awt.*;
import java.awt.event.*;
//定义Cardlayout继承Frame类,实现ActionListener接口
class Cardlayout extends Frame implements ActionListener{
//	定义Panel画板放置卡片Panel cardPanel =new Panel();
//	定义Panel面板放置按钮Panel controlpaPanel=new Panel();Button nextButton,preButton;
//	定义卡片布局对象CardLayout cardLayout=new CardLayout();
//	定义构造方法,设置卡片布局管理器的属性public Cardlayout() {setSize(400,400);setVisible(true);
//		为窗口添加关闭事件监听器this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {Cardlayout.this.dispose();}});cardPanel.setLayout(cardLayout);
//		在cardPanel面板对象添加3个文本标签cardPanel.add(new Label("第一个界面",Label.CENTER));cardPanel.add(new Label("第二个界面",Label.CENTER));cardPanel.add(new Label("第三个界面",Label.CENTER));
//		创建两个按钮对象nextButton=new Button("下一张");preButton =new Button("上一张");
//		为按钮对象注册监听器nextButton.addActionListener(this);preButton.addActionListener(this);
//		将按钮添加到controlpaPanelcontrolpaPanel.add(nextButton);controlpaPanel.add(preButton);
//		将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局this.add(cardPanel,BorderLayout.CENTER);
//		画板放置在窗口边界布局的南区this.add(controlpaPanel,BorderLayout.SOUTH);}@Override
//	下面的代码实现了按钮的监听触发,并对触发事件做出相应的处理public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==nextButton) {cardLayout.next(cardPanel);}if(e.getSource()==preButton) {cardLayout.previous(cardPanel);}}
}
public class test2 {public static void main(String[] args) {System.out.println("a");Cardlayout cardlayout=new Cardlayout();}
}

运行结果:

 不使用布局管理器

当一个容器创建的时候,都会有个默认的布局管理器,window,Frame 和Dialog默认管理器是BorderLayout,Panel默认管理器是FlowLayout。如果不希望通过布局管理器进行布局,可以利用容器的setLayout()方法将布局管理器进行取消。

布局规则:

调用组件setSize和setLocation(或者setBounds方法)为组件进行定位。

实例:

import java.awt.*;
public class test6 {public static void main(String[] args) {Frame f=new Frame("不用布局管理器");f.setLayout(null);f.setSize(400,400);f.setLocation(300,300);Button btn1=new Button("one");Button btn2=new Button("two");
//      设置按钮左上角的x,y坐标以及按钮的长宽btn1.setBounds(20, 30, 100, 40);btn2.setBounds(140, 100, 50, 20);f.add(btn1);f.add(btn2);f.setVisible(true);}
}

运行结果:

AWT事件处理

 实现关闭功能

package daya8;
import java.awt.*;
import java.awt.event.*;
//监听事件
public class test3 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true);
//		为窗口组件注册监听器MyWindowListener mw=new MyWindowListener();f.addWindowListener(mw);		}
}
class MyWindowListener implements WindowListener{@Overridepublic void windowOpened(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubWindow window=e.getWindow();window.setVisible(false);window.dispose();}@Overridepublic void windowClosed(WindowEvent e) {// TODO Auto-generated method stub
// 		System.out.println("111111111111");}@Override
//	窗口初始化设置public void windowIconified(WindowEvent e) {// TODO Auto-generated method stub}
//	窗口已确认@Overridepublic void windowDeiconified(WindowEvent e) {// TODO Auto-generated method stub}
//	窗口已激活@Overridepublic void windowActivated(WindowEvent e) {// TODO Auto-generated method stub}
//	窗口已停用@Overridepublic void windowDeactivated(WindowEvent e) {// TODO Auto-generated method stub}}

事件适配器

package daya8;
import java.awt.*;
import java.awt.event.*;
//事件适配器
public class test4 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true);f.addWindowListener(new MyWindowListenera());}}
class MyWindowListenera extends WindowAdapter{public void windowClosing(WindowEvent e) {
//		获取组件Window window =(Window) e.getComponent();
//		处理window.dispose();}
}

用匿名内部类实行事件处理

package daya8;
import java.awt.*;
import java.awt.event.*;
//事件适配器
public class test4 {public static void main(String[] args) {Frame f=new Frame("my Window");f.setSize(400,300);f.setLocation(300,400);f.setVisible(true);f.addWindowListener(new MyWindowListenera());}}
class MyWindowListenera extends WindowAdapter{public void windowClosing(WindowEvent e) {
//		获取组件Window window =(Window) e.getComponent();
//		处理window.dispose();}
}


http://chatgpt.dhexx.cn/article/mkQylmmi.shtml

相关文章

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

【Java基础】之AWT,一篇文章搞懂awt(包含绘图)

&#x1f308;博客主页&#xff1a;屠一乐的博客 &#x1f4c5; 发文时间&#xff1a;2022.3.15 &#x1f388; 一定存在只有你才能做成的事 &#x1f339; 博主水平有限&#xff0c;如有错误&#xff0c;欢迎指正 欢迎给位&#x1f44d;收藏&#x1f48e;评论✉ Java awt &…

JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码

一. Java图形化界面开发概述 通常情况下&#xff0c;java语言一般是用来开发后台程序的&#xff0c;所谓的后台程序就是部署在服务器端的程序&#xff0c;默默的工作&#xff0c;用户是看不到任何界面的。 事实上&#xff0c;我们使用java语言同样可以完成图形化界面程序的开…

Java GUI编程1---AWT简介

图形用户界面特征 图形用户界面(GUI)编程主要有以下几个特征&#xff1a; 图形界面对象及其框架(图形界面对象之间的包含关系)图形界面对象的布局(图形界面对象之间的位置关系)图形界面对象上的事件响应(图形界面对象上的动作) 在Java图形界面开发中有两种可使用的技术&…

Java图形化界面编程之——AWT

目录 1、AWT简介 2、AWT继承体系 3、Container容器 3.1、Container继承体系 3.2、常用API 3.2.1、Component的常用方法 3.2.2、Container的常用方法 3.3、容器演示 3.3.1、Window 3.3.2、Panel 3.3.3、ScrollPane 4、LayoutManager布局管理器 4.1、FlowLayout&…

Putty的使用及登录

Putty的使用及登录 Putty作为一个很方便并且免费的工具&#xff0c;下面就教大家如何下载并且进行免密登录 下载 https://www.putty.org/ 安装完成后会有如下几个选项&#xff0c;这里简单做一下介绍&#xff0c;第一个是秘钥生产工具&#xff0c;第二个是连接工具&#xff0c…

使用putty连接Linux

修改显示行数&#xff1a; 修改字体&#xff1a; 修改中文显示&#xff1a;

putty使用方法~SSH等

我的这些文字是从这几年来的 PuTTY 使用经验中慢慢得来的&#xff0c;也不仅仅是介绍 PuTTY&#xff0c;还包括了一些相关的软件&#xff0c;比如&#xff1a;优秀的 FTP 工具 FileZilla、功能强大的 SFTP 客户端 WinSCP。 杂七杂八的乱说了一些&#xff0c;这里把大致内容罗列…

怎样用putty设置SSH tunnel

http://davihigh.spaces.live.com/blog/cns!E64F2DAC77562C4F!115.entry 怎样用putty设置SSH tunnel 凡是不晓得SSH为何物的朋友可以略过&#xff0c;也可以google SSH开始了解它。这儿不重复了。SSH tunnel的功能简单说来&#xff0c;就是实现A主机XXX端口跟B主机YYY端口之间…

putty linux上安装及使用

方法&#xff11;. 用的是debian类系统&#xff0c;可以直接用源里的putty 安装更简单 apt-get install putty 方法&#xff12;.编译安装 官网下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 使用 filezilla 工具将文件上传到Linux 系统中 解压…

PuTTY介绍、安装及使用详细过程

#安装PuTTY并使用教程 ##PuTTY简介 PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台&#xff0c;在最近的版本中开始支持各类Unix平台&#xff0c;并打算移植至Mac OS X上。除了官方版本外&#xff0c;有许多第三方的团体或个人将PuT…

PuTTy:PuTTy的简介、安装、使用方法之详细攻略

PuTTy&#xff1a;PuTTy的简介、安装、使用方法之详细攻略 目录 PuTTy的简介 Putty设置中文方法 PuTTy的安装 PuTTy的使用方法 PuTTy的简介 Window操作系统需要连接网络&#xff0c;下载PuTTy程序。PuTTY是一个串行接口连接软件&#xff0c;多用于远程登录控制功能。PuTTY现…

使用PuTTY连接远程Linux服务器

PuTTY软件 putty 简介 简单的说 putty 是一个开源程序&#xff0c;用来连接服务器。最早的时候&#xff0c;仅仅在window系统上可以使用&#xff0c;后来在其他的系统上也可以运行&#xff0c;比如 类unix, mac 。putty 不仅仅是一个软件而是一个软件集(文章最后会列出这个软…

Putty串口使用技巧

Implicit CR in every LF&#xff1a;大部分机器在进行换行时&#xff0c;会送出 CR (回车&#xff0c;0x0D) 与 LF(换行&#xff0c;0x0A)两个控制子元&#xff0c;但是某些机期却只会发出 LF&#xff0c;当有此情况时&#xff0c;你可以试着打开此选项。Implicit LF in every…

Putty 可以使用在Mac系统吗?

PuTTY是一个Telent、SSH、rlogin等连接软件。在windows上非常常见切流行。如果你做路由器刷机&#xff0c;或者看相关教程&#xff0c;肯经经常见到。PuTTY用作SSH客户端连接您的Linux服务器。 但是&#xff0c;如果在Mac上&#xff0c;你会怎么做&#xff1f;那我们今天看看在…

PuTTY 中文教程

转载自&#xff1a;http://chaifeng.com/blog/2007/06/putty_200611.html PuTTY 中文教程 更新记录版权声明序言一些基本知识简介安装第一印象&#xff0c;开始登录一台远程主机首次登录一台主机时又看到了中文乱码怎么还是乱码&#xff1f;在 PuTTY 里面怎样选中&#xff0c;…

putty的用法

大致内容罗列如下&#xff1a; 最简单的使用&#xff0c;登录 SSH主机 中文乱码的处理 PuTTY常用配置的说明 复制、粘贴 保存会话 注销 PuTTY的 X11转发 如何用 PuTTY建立 SSH隧道 如何用 PuTTY建立反…

Putty使用技巧

PuTTY的选择、复制、粘贴这些操作都是通过鼠标来完成的。 在 Window-〉Selection 这里可以设置复制和粘贴的方式。 默认的 Action of mouse buttons &#xff08;鼠标按键的功能&#xff09;的选项是 Compromise&#xff0c;这种方式下选中有两种方式&#xff0c;一是直接用鼠标…

putty下载安装教程

putty下载安装教程 介绍&#xff1a; PuTTY是一款开源(Open Source Software)的连接软件&#xff0c;主要由Simon Tatham维护&#xff0c;使用MIT许可证授权。包含的组件有&#xff1a;PuTTY, PuTTYgen,PSFTP, PuTTYtel, Plink, PSCP, Pageant,默认登录协议是SSH&#xff0c;默…

putty使用教程(总结)

putty使用教程(总结) 最近开始使用putty&#xff0c;在网络上看到一份很不错的教程&#xff0c;共享一下&#xff1a;putty使用方法&#xff0c;中文教程序言 大致内容罗列如下&#xff1a; 最简单的使用&#xff0c;登录 SSH 主机中文乱码的处理PuTTY 常用配置的说明 复制、粘…