码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA GUI 事件监听事件 详解 和 案例.

时间:2019-11-10 15:57:48      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:oid   dap   graphic   抽象   系统   vax   lis   一句话   用户   

 

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(){ // *** 使用 匿名内部类 直接 实现 接口中的 方法。

 

 

  1 import java.awt.Button;
  2 import java.awt.FlowLayout;
  3 import java.awt.Frame;
  4 import java.awt.TextField;
  5 import java.awt.event.KeyAdapter;
  6 import java.awt.event.KeyEvent;
  7 import java.awt.event.MouseAdapter;
  8 import java.awt.event.MouseEvent;
  9 import java.awt.event.WindowAdapter;
 10 import java.awt.event.WindowEvent;
 11 
 12 public class KeyLinstener {
 13 
 14         public static void main(String[] args) {
 15             
 16             Frame f = new Frame("My Frame");
 17             
 18             f.setSize(450,450);
 19             
 20             f.setLayout(new FlowLayout());
 21             
 22             f.setLocation(500, 200);
 23             
 24             f.setVisible(true);
 25             
 26             
 27         // *** 给窗口 添加 组件.    
 28         
 29             Button but = new Button("My Button");
 30             
 31             
 32         // *** 加入一个 文本框 组件.    
 33             
 34             TextField tf = new TextField(40); // *** 数值, 有多长.
 35             
 36             
 37             f.add(tf);
 38             
 39             f.add(but);
 40             
 41             
 42             /*
 43              * 
 44              *     需求: 对鼠标  双击 进行 处理.
 45              * 
 46              * 
 47              * 
 48              * */
 49             
 50             but.addMouseListener(new MouseAdapter() {
 51 
 52                 @Override
 53                 public void mouseClicked(MouseEvent e) {
 54                     
 55                     
 56                     if(e.getClickCount() == 2) {
 57                         
 58                         System.out.println("Mouse Double Click");
 59                         
 60                         
 61                     }
 62                                         
 63                 }
 64     
 65             });
 66             
 67             /*
 68              * 
 69              *  需求:  文本框中 只能 输入 数字.
 70              *  
 71              *  
 72              *      事件源: 文本框.
 73              *  
 74              *      文本框上 注册键盘 监听.
 75              *  
 76              *      事件处理.
 77              *  
 78              *  
 79              *      static getKeyText();   根据 键盘的 码, 返回 对应的 文本.
 80              *       
 81              * */
 82             
 83             
 84             tf.addKeyListener(new KeyAdapter() {
 85 
 86                 @Override
 87                 public void keyPressed(KeyEvent e) {
 88                     
 89                     
 90                     // *** 1. 如何 获取 录入的 内容, 通过 键盘事件 对象 获取.
 91                     
 92 //         *** ctrl  shift alt 之类 的 都是  ? 号.  因为 这里 的 方法 只能 返回一个 字符.
 93                     
 94         /*            char key = e.getKeyChar();
 95                     
 96                     int code = e.getKeyCode();  // *** 关联的 键盘码.
 97                     
 98                     
 99             //        System.out.println(key + "......." + code);
100                     
101                     System.out.println(code + "......" + KeyEvent.getKeyText(code));*/
102                     
103                     
104             /*        
105                 int code = e.getKeyCode();    
106                     
107                 if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)){
108                     
109                     System.out.println("必须是 0 ~ 9 数字");
110                     
111                     e.consume(); // *** 直接 取消 默认 处理方式.
112                     
113                 } */
114                     
115                     /*  **  按 回车键 进入.
116                     if(e.getKeyCode() == KeyEvent.VK_ENTER ) {
117                         
118                         System.out.println("Enter run");
119                         
120                     }
121                     */
122                     
123                 /* **  调用 父类 方法. e.isControlDown()  按住 ctrl + enter  进入.*/    
124                     
125                     if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {
126                         
127                         
128                         System.out.println("ctrl + Enter run");
129                         
130                         
131                         
132                     }
133                     
134                     
135                 }
136         
137             });
138             
139             
140             //  *** 使 窗口上的 X 点击 可以进行关闭.
141             f.addWindowListener(new WindowAdapter() {
142 
143                 @Override
144                 public void windowClosing(WindowEvent e) {
145                     
146                     System.exit(0);
147                     
148                 }        
149             });
150             )
151 }
152 
153     

 

 

 

JAVA GUI 事件监听事件 详解 和 案例.

标签:oid   dap   graphic   抽象   系统   vax   lis   一句话   用户   

原文地址:https://www.cnblogs.com/CYjiang/p/11829702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!