JAVA GUI 事件監聽事件 詳解 和 案例.

 

GUI(圖形用戶界面)java

Graphical User Interface(圖形用戶接口)eclipse

用圖形的 方式, 來顯示 計算機操做的 界面, 這樣更方便 更直觀.ide


CLI工具

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

就是常見的 Dos 命令行操做.命令行

須要記憶一些經常使用的命令, 操做不直觀.code

 

Java 爲 GUI 提供的 對象 都存在 java.awt 和 javax.swing 兩個包中.component

 

Java 圖形化界面的 產品: eclipse 這個產品使用 純Java 語言 編寫的. 因此 這個 軟件不用安裝, 可是至少得有 jre(Java 語言程序的 運行環境).對象

 


1. AWT 和 Swing blog

*** 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     
相關文章
相關標籤/搜索