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基本使用.

Java基础--awt详解以及简单应用相关推荐

  1. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  2. Java基础——匿名内部类详解及举例

    Java基础--匿名内部类详解及举例 说明:定义在外部类的局部位置,比如方法中,并且没有类名 匿名内部类的使用 匿名内部类的基本语法 new 类或接口(参数列表){类体 }; 用途:有些时候为了简化开 ...

  3. java函数方法详解(简单易懂)

    方法(函数) 函数的组成是: 访问修饰符 返回值 函数名(形式参数) {函数内容; } 更多java函数方法详解视频课程学习地址:https://ke.qq.com/course/149432  有技 ...

  4. JAVA基础——异常详解

    阅读目录 一.异常简介 二.try-catch-finally语句 三.throw和throws关键字 四.java中的异常链 五.结束语 JAVA异常与异常处理详解 回到顶部 一.异常简介 什么是异 ...

  5. Java基础:详解static关键字与类加载顺序

    1. 前言 前文中说到了static关键字,在Java中这是一个很重要的关键字,它有很多的用法,并且在某些特定的情况下使用可以优化程序的性能.本文学习static关键字的应用场景.在这之前了解变量的类 ...

  6. Java基础知识详解

    一.基础 1.Java都有哪些数据类型?基本数据类型有哪些?分别占多少字节?多少位?引用数据类型又有哪些? Java的数据类型:基本数据类型和引用数据类型 基本数据类型:byte(1),short(2 ...

  7. Java基础——IO详解

    文章目录 前言 一.IO概述 1.IO体系图 2.IO概念及基本操作 二.IO--字节流 InputStream(字节输入流) 1.FileInputStream 2.BuffedInputStrea ...

  8. Java基础----多线程详解

    一.简介 1.什么是线程? 要解释线程,就必须明白什么是进程. 2.什么是进程呢? 进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程 ...

  9. Java基础:详解HashMap在多线程下不安全

    今天想知道HashMap为什么在多线程下不安全,找了许多资料,终于理解了. 首先先了解一下HashMap: HashMap实现的原理是:数组+链表 HashMap的size大于等于(容量*加载因子)的 ...

最新文章

  1. GfK公司将IT设备移至Equinix公司在法兰克福的数据中心
  2. 【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )
  3. spring-data-redis工程
  4. 【终极办法】import javax.servlet cannot be resolved 异常全面分析、解决
  5. 历史习题与答案解析(1-50期)
  6. 详解C#防访问修饰符:public,private,protected,internal
  7. [ZJOI2005]沼泽鳄鱼 矩乘dp
  8. component_春天@Component
  9. Message启动菜单个性化制作工具V1.0.3.1最终版
  10. mysql 常用函数循环_mysql 常用函数
  11. 电脑硬盘怎么测试软件,HD Tune pro硬盘检测工具怎么用
  12. 小米 2015 北京 研发面试
  13. 文本相似度计算(中英文)详解实战
  14. 【pwnable.kr】 passcode
  15. efi分区格式化操作
  16. 预告 ARC 重写:iOS 实现的 json 数据源的 O-R Mapping
  17. uniapp 密码显示隐藏
  18. 这些都是成为高薪运维必备的 Linux 技能,你具备了吗?
  19. 2021-Deep Video Matting via Spatio-Temporal Alignment and Aggregation
  20. 统信软件根社区斩获CSDN两项大奖

热门文章

  1. 最简单U盘FAT32转换NTFS格式的方法_不用格盘_不用担心丢失数据
  2. c语言中字符串的加法运算,C语言中字符串的存储和运算
  3. 是炒作还是创新?区块链又一互联网入局者出现
  4. 【leetcode】765 情侣牵手(数组)
  5. 408 数据结构 知识点总结
  6. 塔架筒体螺栓强度计算
  7. centos7_srs4.10_webrtc_rtmp_rtsp
  8. 计算机主板的mtbf,图文 罗洪元:联想电脑MTBF指标不少于6万小时
  9. 用php处理wps文档,wps怎么解除限制编辑
  10. SQL基础知识回顾--(Go/Python/Beego ORM/Django ORM/原生Sql)