1. Java中的AWT包

在Java中, AWT(Abstract Window Toolkit)是用来处理图形最基本的方式,它可以用来创建Java的图形用户界面程序,

AWT包提供:

  • 图形界面组件:如:窗口、按钮、菜单等
  • 容器 :是GUI元素的容器,实现组件管理、布局管理
  • 布局管理器:用来安排图形界面组件的位置
  • Graphics:在组件上进行图形绘制所使用的图形环境的父类
  • 事件处理对象:用来处理图形界面组件所触发的事件

使用:

//引入AWT包中的所有类
import java.awt.*;

2. 创建窗体

使用Frame类可以创建一个带有标题和边框的顶层窗口,创建一个窗体的基本方法如下:

  • ① 构造窗体对象
  • ② 设置窗体外观属性
  • ③ 设置窗体可见

构造窗体对象

Frame类常用的构造方法有两个:

Frame(); //构建了一个新的实例 Frame最初是无形的。
Frame(String title);    //构建一个新 Frame最初无形对象的指定标题

修改窗体外观

修改窗体外观属性的方法主要有:

void setTitle(String title);             //设置窗口中标题栏的文字。
void setResizable(boolean resizable);   // 设置用户是否可以改变框架大小
void dispose();                         //关闭窗口,并回收该窗口的所有资源
void setLocation(int x, int y);         //设置组件位置
void setSize(int width, int height);    //设置组件的大小
void setBackground(Color bgColor);      //设置此窗口的背景颜色
void setBounds(int x, int y, int width, int height);    //重新调整组件的位置和大小

设置窗体可见

窗体默认是不可见的,在设置完窗体外观属性后,设置窗体可见的方法如下:

void setVisible(boolean b);

示例代码如下:

import java.awt.*;public class AWTDemo01 {public static void main(String[] args) {Frame mFrame = new Frame("Hello World");mFrame.setLocation(500,500);mFrame.setSize(300,200);mFrame.setBackground(Color.darkGray);mFrame.setVisible(true);}
}

运行之后的窗体如下:

此时窗体没有添加事件处理代码,所以不能直接关闭,需要强制关闭!

3. 添加组件

AWT包中提供了如下常用组件:

  • 标签(Label类)
  • 按钮(Button)
  • 单行文本(TextField)
  • 多行文本(TextArea)
  • 单选框(CheckboxGroup)
  • 复选框(Checkbox)
  • 下拉菜单(Choice)
  • 对话框(Dialog)
  • 文件对话框(FileDialog)

示例代码如下:

import java.awt.*;public class AWTDemo01 {public static void main(String[] args) {Frame mFrame = new Frame("Hello World");mFrame.setLocation(500,500);mFrame.setSize(300,200);//向窗体中添加一个按钮Button btn1 = new Button("Click me");mFrame.add(btn1);mFrame.setVisible(true);}
}

运行之后效果如下,可以看到,默认添加进去的按钮会充满整个窗体的界面:

4. 容器和布局管理器的使用

容器

容器是图形用户界面中可以容纳其他组件的特殊组件,一个容器中可以容纳一个或多个组件,还可以容纳别的容器,窗体就是一个典型的容器。

容器类(Container类)是从Component类派生来的,另外还有一些派生的典型容器包括: Panel,ScrollPane,Window, Frame等。

Panel是在图形界面绘制中最常用的容器,它的构造方法如下:

Panel() ;        //使用默认布局管理器创建一个新面板。
Panel(LayoutManager layout) ;       //创建一个新的面板与指定的布局管理器。

设置容器外观属性的方法和设置窗体的方法类似,示例代码如下:

import java.awt.*;public class AWTDemo01 {public static void main(String[] args) {Frame mFrame = new Frame("Hello World");mFrame.setLocation(500,500);mFrame.setSize(300,200);Panel pn1 = new Panel();Panel pn2 = new Panel();Panel pn3 = new Panel();Panel pn4 = new Panel();pn1.setBackground(Color.blue);pn2.setBackground(Color.cyan);pn3.setBackground(Color.pink);pn4.setBackground(Color.magenta);pn1.setBounds(0,0,150,100);pn2.setBounds(150,0,150,100);pn3.setBounds(0, 100,150,100);pn4.setBounds(150,100,150,100);mFrame.add(pn1);mFrame.add(pn2);mFrame.add(pn3);mFrame.add(pn4);mFrame.setVisible(true);}
}

运行结果如下:

布局管理器(重点)

Java.awt包中共定义了5种布局类,每种布局都对应一种布局,分别是:

  • FlowLayout
  • BorderLayout
  • CardLayout
  • GridLayout
  • GridBagLayout

FlowLayout(流式布局)

布局规则:将容器中的组件按照加入的先后顺序从左向右排列,如果一行排满转下一行继续,每行均采取居中排列。

示例代码:

import java.awt.*;public class AWTDemo02 {public static void main(String[] args) {Frame mFrame = new Frame("FlowLayoutTest");mFrame.setLocation(500,500);mFrame.setSize(300,200);Panel buttonPanel=new Panel();for(int i = 0; i < 20; i++) {Button btn = new Button("btn"+i);buttonPanel.add(btn);}mFrame.add(buttonPanel);mFrame.setVisible(true);}
}

运行效果如下:

BorderLayout(边界式布局)

布局规则:把容器内的空间划分为东、西、南、北、中5个区域分别用英文的East、 West、 South、 North、Center表示,向容器中加入每个组件都要指明在容器的区域。

示例代码:

import java.awt.*;public class AWTDemo03 {public static void main(String[] args) {Frame mFrame = new Frame("BorderLayoutTest");mFrame.setLocation(500,500);mFrame.setSize(500,500);Panel testPanel=new Panel();//设置布局管理器testPanel.setLayout(new BorderLayout());Button btnCenter = new Button("Center");Button btnEast = new Button("East");Button btnWest = new Button("West");Button btnSouth = new Button("South");Button btnNorth = new Button("North");testPanel.add(btnCenter, "Center");testPanel.add(btnEast,"East");testPanel.add(btnWest,"West");testPanel.add(btnSouth, "South");testPanel.add(btnNorth, "North");mFrame.add(testPanel);mFrame.setVisible(true);}
}

演示效果如下:

CardLayout(卡片式布局)

布局规则:使用CardLayout的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序。

示例代码:

import java.awt.*;public class AWTDemo04 {public static void main(String[] args) {Frame mFrame = new Frame("CardLayoutTest");mFrame.setLocation(500,500);mFrame.setSize(300,200);Panel pnCard = new Panel();//设置布局管理器pnCard.setLayout(new CardLayout());Button btn1 = new Button("btn1");Button btn2 = new Button("btn1");Button btn3 = new Button("btn2");pnCard.add(btn1);pnCard.add(btn2);pnCard.add(btn3);Panel pnBtn = new Panel();Button btnNext = new Button("Next");Button btnPrev = new Button("Prev");pnBtn.add(btnNext);pnBtn.add(btnPrev);mFrame.add(pnCard,"Center");mFrame.add(pnBtn,"South");mFrame.setVisible(true);}
}

效果如下:

GridLayout(方格式布局)

布局规则:把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。

示例代码:

import java.awt.*;public class AWTDemo05 {public static void main(String[] args) {Frame mFrame = new Frame("GridLayoutTest");mFrame.setLocation(500,500);mFrame.setSize(300,200);Panel buttonPanel=new Panel();//设置布局管理器,重点buttonPanel.setLayout(new GridLayout(4,5));for(int i = 0; i < 20; i++) {Button btn = new Button("btn"+i);buttonPanel.add(btn);}mFrame.add(buttonPanel);mFrame.setVisible(true);}
}

效果如下:

GridBagLayout

布局规则:使用行(列)型盒式布局的容器将组件排列在一行(列),组件按加入的先后顺序从左(上)向右(下)排列,容器的两端是剩余的空间。

示例代码如下:

import java.awt.*;public class AWTDemo05 {public static void main(String[] args) {Frame mFrame = new Frame("GridLayoutTest");mFrame.setLocation(500,500);mFrame.setSize(300,200);Panel panel1=new Panel();//设置布局管理器panel1.setLayout(new GridBagLayout());GridBagConstraints panel2 =new GridBagConstraints();panel2.fill=GridBagConstraints.BOTH;panel2.weightx=1;panel2.weighty=1;panel2.gridwidth=2;panel2.gridx=0;panel1.add(new Button("No.1"),panel2);panel2.gridx=2;panel2.gridwidth=1;panel2.gridheight=2;panel1.add(new Button("No.2"),panel2);panel2.gridx=0;panel2.gridheight=1;panel1.add(new Button("No.3"),panel2);panel2.gridx=1;panel1.add(new Button("No.4"),panel2);mFrame.add(panel1);mFrame.setVisible(true);}
}

效果如下:

5. Java中的事件处理机制

为什么需要事件处理机制

  • 程序执行效率高
  • 架构清晰明了
  • Java虚拟机自动监测事件和调用处理函数,程序员只需要关心会发生哪些事件?如何处理这些事件即可。

Java中的事件处理机制

Java中的事件处理机制架构如图所示:

  • 事件源(EventSource) :人机交互中事件的来源,通常是Java图形包中组件;
  • 事件(ActionEvent):事件源产生的交互内容,通常是在 java.awt.event包中定义的类;
  • 事件监听器(ActionListener):接收事件并进行处理, 由程序员编写,对应处理所监听事件源产生的事件;
  • 监听器接口:编写“事件监听器”的“规定” (抽象方法),必须在监听器类中实现这些方法完成事件处理;
  • 监听器注册:将事件监听器对象绑定到事件源,进行监听;

Java中事件处理机制如何实现

① 实现事件对应的监听器

实现方法:

class <自己的监听器名称> implements <监听器名称> {//抽象方法实现public void actionPerformed( ) {/** 按钮事件所进行的具体工作 **/}
}

常用事件监听器类:

② 注册监听器到事件源

绑定方法:每个组件都提供了用于绑定监听器的方法,通过观察 “addxxxListener” 方法的名称,可以很容易地知道其能够处理的事件类型。

示例代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/* 自己实现按钮监听器 */
class BtnListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("按钮按下啦!");}
}public class AWTDemo06 {public static void main(String[] args) {Frame mFrame = new Frame("Hello World");mFrame.setLocation(500,500);mFrame.setSize(300,200);Button btn = new Button("Click me");mFrame.add(btn);/* 注册监听器 */btn.addActionListener(new BtnListener());mFrame.setVisible(true);}
}

效果如下:

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』

Java基础_15 | Java中的图形用户界面包AWT使用详解相关推荐

  1. Java基础篇(04):日期与时间API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...

  2. java类索引_java中索引的分类,图片详解

    java的学习是一个漫长而又循环往复不断上升的过程,今天我们再来看一下java索引的分类,并且通过详细的图片解析. 首先,java中的索引主要分为聚簇索引和非聚簇索引. 其中InnoDB主键使用的是聚 ...

  3. java返回fail_Java集合中的fail-fast(快速失败)机制详解

    简介 我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的, 因此如果在使用迭代器的过程中有其他线程修改了list,那么 ...

  4. java对象数组_Java中对象数组的使用方法详解

    本文实例讲述了Java中对象数组的使用方法.分享给大家供大家参考,具体如下: 一 点睛 对象可以用数组来存放,通过下面两个步骤来实现. 1 声明以类为数据类型的数组变量,并用new分配内存空间给数组. ...

  5. 诚之和:Java基础知识枚举Enum类介绍以及案例使用详解

    Java语言中的数据类型可以分为两大类,分别是基本数据类型和引用数据类型.本篇文章要介绍的枚举,就是属于Java的引用数据类型.下面,将为大家详细介绍Java中的枚举,以及具体的使用案例. 一.文章序 ...

  6. Java基础学习总结(117)——Feign入门使用详解

    一,简介 Feign使得 Java HTTP 客户端编写更方便.Feign 灵感来源于Retrofit.JAXRS-2.0和WebSocket.Feign最初是为了降低统一绑定Denominator到 ...

  7. java 位与运算_java中位运算和移位运算详解

    一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 正数直接取二进 ...

  8. java item.getparentnode(),javascript中parentNode,childNodes,children的应用详解

    "parentNode" 常用来获取某个元素的父节点. 把 parentNodes 理解为容器, 在容器中有个子节点 例: My text 在上面的代码中, 你看到把"爹 ...

  9. Java基础--String类底层实现原理及API示例详解

最新文章

  1. 学习《Linux设备模型浅析之驱动篇》笔记(一)
  2. 5G都不能取代的Wi-Fi6,到底有多厉害?
  3. html5-Canvas绘图
  4. POJ 3259 Wormholes【最短路/SPFA判断负环模板】
  5. 绝对不能错过!2009~2019 高中数学联赛11年真题解析
  6. Android View体系(五)从源码解析View的事件分发机制
  7. 如何用Sql更新默认值
  8. AppFabric配置
  9. Java -- JSP面试题及答案
  10. 梅姐为什么没能拯救雅虎?
  11. arcgis api for js绘制箭头图
  12. openssl验证证书是否由CA证书颁发的问题
  13. 2、申请苹果App ID
  14. 未连接到互联网 代理服务器出现问题,或者地址有误。
  15. Navicat有什么用?如何安装?【C++培训】
  16. Windows系统完全卸载删除 Node.js
  17. 视频 TS 内容详细讲解
  18. 关于Win10 64位Cadence16.6中OrCAD Capture CIS导网表出现ERROR无效指针的解决办法
  19. Codeforces Round #540 (Div. 3) Coffee and Coursework
  20. android虹软人脸识别简书,C# 离线人脸识别 虹软ArcFace 2.0 demo

热门文章

  1. DNS---域名解析
  2. 站点的监控小工具-监控宝
  3. Delphi 播放器[源码]
  4. Wireshark中TCP-TLS-HTTP2协议栈解析研究
  5. 在sql中截取地址中的门牌号
  6. Hive加载数据操作
  7. leaflet的基础用法
  8. 美术加线上辅导班,普通人学美术到底难不难?
  9. pythonif嵌套语句案例_Python系列07:if嵌套语句
  10. 微信小程序canvas绘图 绘图完成保存图片 附带代码和效果图