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

article/2025/8/19 18:49:55

GUI
图形用户界面
CLI
命令行用户接口
Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中.
Java当中如何完成图形化界面的制作呢?
AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好.
Javax.Swing:在AWT基础上.建立一套图形化系统,提供更多组件,完全由java实现,增强了可移植性,属于轻量级控件.所以以后最好用Swing开发.
还有一个SWT外观包.
这里写图片描述
Lable用来封装文字.CheckBox复选框.TextComponent:文本组件.
Container: 容器,是一个特殊的组件,可以通过add方法来添加其他组件进来.
Window:Frame框架.Dialog:对话框.FileDialog:文件对话框就是打负责文件的选取和保存的窗口.
容器中的组件的排放方式,就是布局.
Panel:面板
常见的布局管理器:
FlowLayout:流式布局管理器.先放中间.第二次放右边.默认居中.
从左到右.
Panel默认的布局管理器
BorderLayout:边界式布局
上下左右打麻将.如果不指定方向,那么会居中直接填满整个窗口.添加新组件就覆盖原组件.
GridLayout:网格式布局
每个组件都存放在格子当中,计算器就是一个GridLayout.
GridBagLayout:网格包布局管理器.
CardLayout:卡片式布局:

创建图形化界面:

1. 创建Frame窗体
2. 对窗体进行基本设置,比如大小位置和布局
3. 定义组件
4. 将组件通过窗体的add()添加到窗体中
5. 让窗体显示,通过setVisible(true);方法

事件监听机制:

1. 事件源:图形界面组件.
2. 事件:Event.每一个事件源都有自己的特有的对应事件和共性事件.
3. 监听器:可以触发某一个事件的动作都已经封装到了监听器中,

以上三者在Java中都定义好了,直接获取其对象就可以了.我们要做的事情就是对产生的动作进行处理.

这里写图片描述

这里写图片描述

添加监听器:f.add(WindowListener wl)
WindowListener的一个抽象子类 WindowAdapter,已经实现了接口,覆盖了其中所有方法,只要继承WindowAdapter覆盖自己需要的方法即可!
一般开发awt要导入两个包: java.awt.*;java.awt.event.*;

要让按钮具备退出的功能,那么按钮就是事件源,添加一个监听器.ActionListener是少数没有Adapter类的其中一个.因为它里面只有一个方法,直接实现即可.ActionPerfored(ActionEvent ae);

鼠标事件和键盘事件:
AddKeyListener
AddMouseListener
此时点击按钮谁会先执行?
鼠标动作先.

下面我们来动手做一些图形化界面:
实例1

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class AwtDemo1 {public static void main(String[] args) {Frame f = new Frame("my awt");f.setLayout(new FlowLayout());f.setVisible(true);f.setSize(300,200);f.setLocation(700, 400);Button b = new Button("我是一个按钮");//定义一个按钮,名称为"我是一个按钮"f.add(b);f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){System.out.println("我关!");System.exit(0); //点击右上角关闭按钮,退出虚拟机}public void windowActivated(WindowEvent e1){System.out.println("activated"); //每次窗口被激活,打印"activated"}public void windowOpened(WindowEvent e2){System.out.println("我活啦!"); //每次打开窗口,会输出"我活啦"}});System.out.println("hello world!");}
}
class myWindow extends WindowAdapter{public void windowClosing(WindowEvent e) {System.out.println("window closing");e.getWindow();System.out.println(e.toString());System.out.println(e.getWindow());System.out.println(e.getSource());System.exit(0);}
}

这里写图片描述

实例2

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class FrameDemo {public static void main(String[] args) {// TODO 自动生成的方法存根new Frame_Demo();}}class Frame_Demo {private Frame f;private Button but;Frame_Demo() {init();}public void init() {f = new Frame("myFrame");f.setBounds(1000, 500, 300, 400);f.setLayout(new FlowLayout());but = new Button("Run");myEvent();f.add(but);f.setVisible(true);but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根System.out.println("button do");System.exit(0);}});}private void myEvent() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}public void windowOpened(WindowEvent e) {System.out.println("活了");}});}
}

这里写图片描述
点击按钮,打印出
这里写图片描述

实例3

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class MouseKeyEventDemo {public static void main(String[] args) {// TODO 自动生成的方法存根new mouseAndKey();}}class mouseAndKey {private Frame f;private Button but;private TextField tf;mouseAndKey() {init();}public void init() {f = new Frame("myFrame");f.setBounds(1000, 500, 300, 400);f.setLayout(new FlowLayout());but = new Button("Run");tf = new TextField(20);myEvent();f.add(tf);f.add(but);f.setVisible(true);tf.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {int code = e.getKeyCode(); //判断输入的键值是否为数字if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)) {System.out.println(code+"is illegal");e.consume();}}});/** but.addActionListener(new ActionListener() {* * @Override public void actionPerformed(ActionEvent e) { // TODO* 自动生成的方法存根 System.out.println("button do"); System.exit(0); } });*/but.addMouseListener(new MouseAdapter() {public void mouseEntered(MouseEvent e) {System.out.println("entered");}public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2)System.out.println("双击动作");}});but.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if (KeyEvent.getKeyText(e.getKeyCode()).equals("Q") && e.isControlDown())System.exit(0);System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + "..." + e.getKeyChar());System.out.println("CTRL+Q");}});}private void myEvent() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}public void windowOpened(WindowEvent e) {System.out.println("活了");}});}
}

实例4

package guiDemos;import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class MyMenuDemo {private Frame frame;private MenuBar bar;private Menu fileMenu, subMenu;private MenuItem closeItem, openItem, saveItem;private FileDialog openDlg, saveDlg;private TextArea ta;MyMenuDemo() {init();}public void init() {frame = new Frame("my Window");bar = new MenuBar();fileMenu = new Menu("文件");openItem = new MenuItem("打开");saveItem = new MenuItem("保存");closeItem = new MenuItem("退出");ta = new TextArea();openDlg = new FileDialog(frame, "打开文件", FileDialog.LOAD);saveDlg = new FileDialog(frame, "保存文件", FileDialog.SAVE);frame.add(ta);fileMenu.add(openItem);fileMenu.add(saveItem);fileMenu.add(closeItem);bar.add(fileMenu);frame.setMenuBar(bar);frame.setBounds(700, 300, 600, 500);frame.setVisible(true);closeItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根System.exit(0);}});openItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根openDlg.setVisible(true);String fileName = openDlg.getDirectory() + openDlg.getFile();if (openDlg.getFile() != null) {File f = new File(fileName);// File fileName = new File(openDlg.getFile());// ta.append(f.toString());ta.setText("");BufferedReader br = null;try {br = new BufferedReader(new FileReader(f));String line = null;while ((line = br.readLine()) != null) {ta.append(line + "\r\n");}} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();} finally {try {if (br != null)br.close();} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}}}}});saveItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根saveDlg.setVisible(true);BufferedWriter bw = null;String fileName = saveDlg.getDirectory()+saveDlg.getFile();if(saveDlg.getFile()!=null){try {bw = new BufferedWriter(new FileWriter(fileName));String text = ta.getText();bw.write(text);} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}finally{try {if(bw!=null)bw.close();} catch (Exception e2) {// TODO: handle exception}}}}});frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {// TODO 自动生成的方法存根new MyMenuDemo();}}

选择文件后,文本区中显示文本内内容,相当于一个windows小工具记事本
这里写图片描述

实例5
写一个程序,用于遍历并文件夹中的所有内容

package guiDemos;import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;public class MyWindowDemo {private Frame frame;private TextField tf;private Button but;private TextArea ta;private Dialog dlg;private Label lbl;private Button butOK;MyWindowDemo() {init();}public void init() {frame = new Frame("my Window");frame.setBounds(900, 400, 400, 500);frame.setLayout(new FlowLayout());tf = new TextField(30);but = new Button("转到");ta = new TextArea(20, 40);frame.add(tf);frame.add(but);frame.add(ta);ta.setEditable(false);frame.setVisible(true);myEvent();tf.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e){if(KeyEvent.getKeyText(e.getKeyCode())=="Enter")doFile();}});but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {doFile();}});}private void doFile(){ta.setText("");File f = new File(tf.getText());if (!f.exists()) {
//			ta.setText("请重新输入地址");dlg = new Dialog(frame, "输入错误",false);lbl = new Label("\""+f.toString()+"\""+"不是一个有效路径");butOK = new Button("确定");dlg.setLayout(new FlowLayout());dlg.setBounds(900, 500, 300, 160);dlg.add(lbl);dlg.add(butOK);dlg.setVisible(true);dlg.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){dlg.setVisible(false);}});butOK.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根dlg.setVisible(false);}});} elsefileList(f);}private void fileList(File f) {// TODO 自动生成的方法存根File[] files = f.listFiles();for (File file : files) {ta.append(file.toString());ta.append("\r\n");}/** for (File file : files) { if (!file.isHidden()) { if* (file.isDirectory()) { ta.append(file.toString()); ta.append("\r\n");* fileList(file); } else { ta.append(file.toString());* ta.append("\r\n"); // System.out.println(f); } } }*/}private void myEvent() {frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {// TODO 自动生成的方法存根new MyWindowDemo();}
}

这里写图片描述

以上就是Java awt界面的api基本使用.


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

相关文章

【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 常用配置的说明 复制、粘…

PuTTY使用方法

Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端&#xff0c;在各种远程登录工具中&#xff0c;Putty是出色的工具之一&#xff0c;Putty具有完全免费、小巧绿色、无需安装、操作简单等特点。其功能丝毫不逊色于商业的telnet类工具&#xff0c;用它来远程管理…