GUI(图形用户界面)

Graphical User Interface(图形用户接口)

用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观.

CLI

Command Line User Interface(命令行用户接口)

就是常见的 Dos 命令行操作.

需要记忆一些常用的命令, 操作不直观.

Java 为 GUI 提供的 对象 都存在 java.awt 和 javax.swing 两个包中.

Java 图形化界面的 产品: eclipse 这个产品使用 纯Java 语言 编写的. 所以 这个 软件不用安装, 但是至少得有 jre(Java 语言程序的 运行环境).

1. AWT 和 Swing

*** java.awt: Abstarct Window ToolKit(抽象窗口工具包), 需要调用本地系统方法 实现功能. 属于 重量级(和系统耦合(嵌入) 紧密) 控件.

*** javax.swing: 在 AWT 的基础上, 建立的一套图形界面 系统, 其中提供了 更多的组件, 而且 完全由 Java 实现. 增强了 移植性, 属 轻量级(和系统耦合(嵌入) 较浅) 控件.

SWT外观包 网上可以下载, 开源免费, 值得一试.

component : 组件 container: 容器 checkbox: 复选框.

TextField: 文本框: 单行文本框. TextArea: 文本区域: 多行文本框.

Panel: 面板, 一般 面板 不能独立存在, 都是 基于 Window(窗体) 的.

Frame: 小窗口.

Dialog: (弹出一个)对话框. FileDialog: 文件对话框.

*** Container: 为容器, 是一个特殊的组件, 该组件中 可以通过 add 方法 添加 其他 组件进来.

*** 一般先创建 一个 整体界面(new Frame) , 然后再 添加一些 子组件.

2. 事件 监听机制.

事件源(组件) (承载事件的源头)

事件(Event) (发生的事)

监听器(Listener) (监控 某些动作)

事件处理(引发事件后 处理方式)

* 需求: 想要 点击按钮 有效果, 比如 打印一句话.
*
* 思路:
*
* 1. 确定 事件源. 按钮.
*
* 2. 确定 监听器. 按钮添加监听器, 按钮对象 最清楚, 到 按钮对象中 查找.
*
* 3. 定义 处理方式.
*
* 定义的 规范: XXXLinstener: XXX监听器. --- 对应的 XXXEvent 事件.

// *** 补充: public abstarct class WindoAdapter{ } 就是 一个 典型的 没有抽象方法的 抽象类.

public abstract class WindoAdapter{ }

接收 窗口事件的 抽象适配器类。 此类中的方法为空。 此类 存在的目的 是 方便 创建 监听器对象。

这是一个 抽象类, 但是 其中的 方法都没被 抽象。(没有抽象方法的 抽象类。)

*** Alt + Shift + s 调用 源码 命令。

需求: 想要实现 点击 窗体的 X 就可以实现 窗体的 关闭。
*
* 1. 事件源: 窗体。
*
* 2. 确定 监听器。 通过 窗口对象 去查。
*
* 3. 事件处理。
*   
* 到底 哪些 监听接口 , 有 适配类?
*
* 只要 监听 接口中的 方法 不大于 2 个(在 两个以内) 都没有 适配器类。 适配器的 出现 只为 方便 创建 监听器 对象。
*
*
* 但是 一般 监听接口 都有 适配器。

// *** Frame 本身是一个容器, 但是它 里面 其实是封装了 一个 集合; 这些组件 都是一个个 对象, 然后 就添加到了 集合中去。

f.addWindowListener(new WindowAdapter(){// *** 这里 是个 大括号, 说明 里面是个 匿名的 内部类。 实现方法。

System.exit(0); // *** 退出 java 虚拟机。

需求: 想要用户点击 有效果, 比如 打印一句话。
*
* 思路:
* 1. 确定事件源 (按钮)
*
* 2. 确定 监听器。 (按钮添加监听器, 按钮对象最清楚, 到按钮对象中查找。)
*
* 3. 定义处理方式。
*
* 定义的 规范:XXXListener 监听器 XXX监听器 --对应的 XXXEvent 事件。
*
* */

/*
// *** 1. 在 按钮上 添加所需的 监听器
but.addActionListener(new ActionListener(){ // *** 使用 匿名内部类 直接 实现 接口中的 方法。

 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 KeyLinstener { public static void main(String[] args) { Frame f = new Frame("My Frame"); f.setSize(450,450); f.setLayout(new FlowLayout()); f.setLocation(500, 200); f.setVisible(true); // *** 给窗口 添加 组件. Button but = new Button("My Button"); // *** 加入一个 文本框 组件. TextField tf = new TextField(40); // *** 数值, 有多长. f.add(tf); f.add(but); /*
*
* 需求: 对鼠标 双击 进行 处理.
*
*
*
* */ but.addMouseListener(new MouseAdapter() { @Override
public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2) { System.out.println("Mouse Double Click"); } } }); /*
*
* 需求: 文本框中 只能 输入 数字.
*
*
* 事件源: 文本框.
*
* 文本框上 注册键盘 监听.
*
* 事件处理.
*
*
* static getKeyText(); 根据 键盘的 码, 返回 对应的 文本.
*
* */ tf.addKeyListener(new KeyAdapter() { @Override
public void keyPressed(KeyEvent e) { // *** 1. 如何 获取 录入的 内容, 通过 键盘事件 对象 获取. // *** ctrl shift alt 之类 的 都是 ? 号. 因为 这里 的 方法 只能 返回一个 字符. /* char key = e.getKeyChar(); int code = e.getKeyCode(); // *** 关联的 键盘码. // System.out.println(key + "......." + code); System.out.println(code + "......" + KeyEvent.getKeyText(code));*/ /*
int code = e.getKeyCode(); if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)){ System.out.println("必须是 0 ~ 9 数字"); e.consume(); // *** 直接 取消 默认 处理方式. } */ /* ** 按 回车键 进入.
if(e.getKeyCode() == KeyEvent.VK_ENTER ) { System.out.println("Enter run"); }
*/ /* ** 调用 父类 方法. e.isControlDown() 按住 ctrl + enter 进入.*/ if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) { System.out.println("ctrl + Enter run"); } } }); // *** 使 窗口上的 X 点击 可以进行关闭.
f.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) { System.exit(0); }
});
)
}

JAVA GUI 事件监听事件 详解 和 案例.的更多相关文章

  1. [置顶] java Gui 键盘监听事件

    简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...

  2. Android开发之手势滑动(滑动手势监听)详解

    Android开发之手势滑动(滑动手势监听)详解 在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动通常有两种方法:一种是单独实现setOnTouchListen ...

  3. JAVA JComboBox的监听事件(ActionListener、ItemListener)

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   参考资料: http://263229365.iteye.com/blog/1040329 https://www.ja ...

  4. java中的监听事件

    java监听器实现的类 1.ServletContextListener:对servlet上下文的创建和销毁监听 2.ServletContextAttributeListener:监听servlet ...

  5. GUI常用监听事件

    概念 对鼠标.键盘等一系列事件做出相应的反馈 事件监听 //创建监听事件 public class Demo { public static void main(String[] args) { Fr ...

  6. DOM 事件监听 事件冒泡 事件捕获

    addEventListener() 方法 实例: // 当用户点击按钮时触发监听事件: document.getElementById("myBtn").addEventList ...

  7. tnsnames.ora 监听配置文件详解

    今天是重要的一天.将XML数据导入ORACLE遇到很多问题,学了好多,其中很长时间花在网络配置上,刚开始学,具体原因不知道,先把搜集到的好文章存下来,以后慢慢研究. 监听配置文件            ...

  8. Oracle 监听配置详解(转载)

        使用ORACLE的SQL*Net V.2连接客户机和服务器,需配置每个客户机和服务器.在服务器上需配置的文件有:listener.ora./etc/services,在客户机上需配置tnsna ...

  9. [转载]tnsnames.ora监听配置文件详解

    监听配置文件             为了使得外部进程 如 CAMS后台程序 能够访问 Oracle 数据库 必须配             置 Oracle 网络服务器环境 配置 Oracle 网络 ...

随机推荐

  1. Angular2+之使用FormGroup、FormBuilder和Validators对象控制表单(取值、赋值、校验和是否可编辑等)

    1.要使用Angular自带的表单控制需要先引入相关模块(.ts文件): import { FormGroup, //表单对象类 FormBuilder, //表单生成工具类 Validators} ...

  2. asp.net core learn

    .NET Core WebApi RESTful规范 RESTful API 最佳实践 理解RESTful架构 接口版本控制 Support multiple versions of ASP.NET ...

  3. python编程基础之六

    运算符和表达式 +,-,*,/,     加减乘除 %, 模运算 **,  幂运算 //  整除 运算优先级方面:** >正负号(+,-)>//,%>*,/>+,- 模运算有一 ...

  4. COGS 2095. 不平凡的引线

    2095. 不平凡的引线 ★☆   输入文件:firelead.in   输出文件:firelead.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 这里说的引线是炮 ...

  5. LeetCode初级算法--数组01:只出现一次的数字

    LeetCode初级算法--数组01:只出现一次的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  6. Python_生成随机验证码

    内置函数 chr() ord() 这两个内置函数是用来对十进制(十六进制也可以)与ASCii之间进行转换 chr() : 将十进制转换成ASCii对应字母或符号 t_1 = chr(99) t_2 = ...

  7. Qt5教程: (2) 信号与槽

    1. 新建工程 新建一个"Qt Widgets Application"工程 2. 添加按钮 一个Qt工程会有很多个控件, 如果把逻辑代码都写在main函数里, main函数会非常 ...

  8. 服务器端 SOCKET 编程

    使用 Socket 的程序在使用 Socket 之前必须调用 WSAStartup() 函数, 此函数在应用程序中用来初始化 Windows Socket DLL, 只有此函数调用成功后,应用程序才可 ...

  9. 数据挖掘:python数据清洗cvs里面带中文字符

    数据清洗,使用python数据清洗cvs里面带中文字符,意图是用字典对应中文字符,即key值是中文字符,value值是index,自增即可:利用字典数据结构没有重复key值的特性,把中文字符映射到了数 ...

  10. 机器学习:不平衡信息有序平均加权最近邻算法IFROWANN

    一 背景介绍 不平衡信息,特点是少数信息更珍贵,多数信息没有代表性.所以一般的分类算法会被多数信息影响,而忽略少数信息的重要性. 解决策略: 1.数据级别 (1)上采样:增加稀有类成本数 (2)下采样 ...