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