---------- android培訓、java培訓、期待與您交流! ----------
一、概述
1、GUI(GraphicalUser Interface):又稱圖形用戶界面,是計算機用戶與計算機交互的一種方式。
2、用戶與計算機交互的方式有兩種:GUI和CLI。
(1)GUI(Graphical User Interface):圖形用戶接口,用圖形方式,來顯示計算機操作界面,方便直觀。
(2)CLI(Command LineUser Interface):命令行用戶接口,即常見的Dos命令行操作,須記住一些命令,操作不直觀。
3、Java提供的GUI對象都存在于java.Awt和javax.Swing兩個包中,其中:
(1)java.Awt(Abstract Window Toolkit):即抽象窗口工具包,調用本地系統方法實現功能,屬重量級控件。
(2)javax.Swing包:在AWT的基礎上建立的一套圖形界面系統,有更多的組件,且完全由java實現,屬輕量級控件。
二、繼承關系圖

注:Container是容器型組件,該組件中可以通過add方法添加其他組件。Container常用子類:Window、Panel(不能單獨存在)。
三、布局管理器
1、布局:容器中的組件排列方式。
2、常見的布局管理器:
● FlowLayout(流式布局管理器)
|---從左向右排列,Panel默認排列方式。
● BorderLayout(邊界式布局管理器)
|---東南西北中的排列方式,是Frame的默認布局管理。
● GridLayout(網格式布局管理器)
|---規則的矩陣。
● CardLayout(卡片式布局管)
|---即選項卡。
● GridBayLayout:(網格包布局管理器)
|---非規則矩陣
四、Frame演示
(一)Frame創建步驟
1、創建Frame窗體:
Frame f = new Frame("my Frame");//可設置標題,即窗體名字
2、對窗體進行基本設置:如大小,位置,布局等:
f.setSize(int wight,int hight);//窗體大小設置
f.setLocation(int x,int y);//窗體顯示位置設置,橫縱坐標
f.setBounds(int x,int y,int wight,int hight),也可以直接用這個方法對大小和位置設置
f.setLayout(Layout layout),參數為指定的布局管理器,如FlowLayout
3、定義組件:
Button b = new Button(“my Button”);//可設置組件的名稱
4、將組件通過add方法添加到窗體中:
f.add(b);//將按鈕組件添加進窗體
5、讓窗體顯示:
f.setVisible(boolean b);//通過設置參數是true還是false是否顯示窗體
(二)Frame演示示例
1 class FrameDemo{ 2 public static void main(String[] args){ 3 Frame f = new Frame("my frame"); 4 // f.setSize(500, 400); 5 // f.setLocation(400, 200); 6 f.setBounds(400, 200, 500, 400); 7 f.setLayout(new FlowLayout());//設置流式布局 8 Button but = new Button("一個按鈕"); 9 f.add(but);//將按鈕添加到窗體中。10 f.setVisible(true);11 }12 }五、事件監聽機制
(一)事件監聽機制組成
(1)事件源(組件)。
(2)事件(Event)。
(3)監聽器(Listener)。
(4)事件處理(引發事件后的處理方式)。
(二)事件監聽機制流程圖

(三)事件處理的步驟
(1)確定事件源(容器或組件)。通過事件源對象的addXXXListener()方法將監聽器(Listener)注冊到該事件源上。該方法中接收XXXListener的子類對象,或者XXXListener的子類XXXAdapter的子類對象。
(2)一般用匿名內部類來表示。在覆蓋方法的時候,方法的參數一般是XXXEvent類型的變量接收。
1 Frame f= new Frame("演示鼠標和鍵盤監聽");2 f.addWindowlistener(new WindowAdapter()3 {4 @Override5 public void windowClosing(WindowEvent e)6 {7 System.exit(0);//表示關閉窗口8 }9 });說明:
(1)事件觸發后會將事件打包成對象傳遞給覆寫方法中參數的變量。(其中包括事件源對象,通過getSource()或者getComponent()獲取。)
(2)若用子類實現WindowListener接口,就需要覆蓋其中的7個方法,可只用到其中的關閉動作,其他動作未用到,但卻必須重寫全部。因為WindowLister的子類WindowAdapter(適配器)已經實現此接口,并覆蓋了其中所有方法。那么只需繼承WindowAdapter,覆蓋需要的方法即可。
(3)明確事件,并對事件進行處理,其實,添加什么監聽器就需要添加什么事件。
(四)應用示例
1、/* 鍵盤事件和鼠標事件 */
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 public class MouseAndKeyDemo {12 PRivate Frame f;13 private TextField tf;14 private Button but;15 //構造函數,用來初始化16 public MouseAndKeyDemo() {17 init();18 }19 //窗體創建與功能實現20 private void init() {21 f = new Frame("鼠標和鍵盤監聽演示");22 f.setBounds(400, 200, 500, 400);23 f.setLayout(new FlowLayout());24 25 tf = new TextField(35);26 but = new Button("一個按鈕");27 28 f.add(tf);29 f.add(but);30 31 myEvent();32 33 f.setVisible(true);34 }35 //注冊事件36 private void myEvent() {37 // 給文本框添加鍵盤監聽。38 tf.addKeyListener(new KeyAdapter() {39 @Override40 public void keyPressed(KeyEvent e) {41 if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) {42 System.out.println("enter run ...");43 }44 }45 });46 47 f.addWindowListener(new WindowAdapter() {48 @Override49 public void windowClosing(WindowEvent e) {50 System.exit(0);51 }52 });53 54 // 在按鈕上添加一個鼠標監聽.55 but.addMouseListener(new MouseAdapter() {56 private int count = 1;57 @Override58 public void mouseClicked(MouseEvent e) {59 if (e.getClickCount() == 2)60 tf.setText("mouse double click..." + count++);61 }62 });63 }64 public static void main(String[] args) {65 new MouseAndKeyDemo();66 }67 }2、列出指定目錄下的內容,當輸入的路徑不正確時,給出錯誤提示信息。
1 /* 列出指定目錄下的內容,當輸入的路徑不正確時,給出錯誤提示信息。 */ 2 import java.io.*; 3 import java.awt.*; 4 import java.awt.event.*; 5 class MyWindowDemo { 6 // 定義所需組件引用 7 private Frame f; 8 private Button but, bok; 9 private TextField tf; 10 private TextArea ta; 11 private Dialog d; 12 private Label lab; 13 14 // 構造函數 15 MyWindowDemo() { 16 init(); 17 } 18 19 // 窗體基本設置于功能實現 20 public void init() { 21 // 組件實例化 22 f = new Frame("我的Window"); 23 but = new Button("跳轉"); 24 tf = new TextField(58); 25 ta = new TextArea(27, 65); 26 27 // 基本設置 28 f.setBounds(300, 150, 500, 500); 29 f.setLayout(new FlowLayout()); 30 31 // 添加組件 32 f.add(tf); 33 f.add(but); 34 f.add(ta); 35 36 // 窗體事件 37 myEvent(); 38 39 // 窗體顯示 40 f.setVisible(true); 41 } 42 43 // 注冊事件 44 public void myEvent() { 45 // 窗體關閉功能 46 f.addWindowListener(new WindowAdapter() { 47 public void windowClosing(WindowEvent e) { 48 System.exit(0); 49 } 50 }); 51 52 // “跳轉”按鈕事件 53 but.addActionListener(new ActionListener() { 54 public void actionPerformed(ActionEvent e) { 55 showFile();// 列出目錄內容在文本區中 56 } 57 }); 58 59 // 文本框鍵盤事件 60 tf.addKeyListener(new KeyAdapter() { 61 public void keyPressed(KeyEvent e) { 62 // 如果鍵盤按下Enter鍵,就將目錄內容顯示在文本區中 63 if (e.getKeyCode() == KeyEvent.VK_ENTER) 64 showFile(); 65 } 66 }); 67 } 68 69 // 目錄內容顯示在文本區中方法 70 private void showFile() { 71 String path = tf.getText();// 獲取輸入的路徑 72 File dir = new File(path);// 將路徑封裝成對象 73 // 判斷輸入的路徑是否存在,且是否是文件夾 74 if (dir.exists() && dir.isDirectory()) { 75 ta.setText("");// 清空文本區中的內容 76 77 String names[] = dir.list();// 列出目錄下的內容 78 79 for (String name : names) { 80 ta.append(name + "/r/n");// 添加進文本區中 81 } 82 } else { 83 // 對話框基本設置 84 d = new Dialog(f, "錯誤提示", true); 85 d.setBounds(400, 200, 280, 150); 86 d.setLayout(new FlowLayout()); 87 88 bok = new Button("確定"); 89 lab = new Label(); 90 91 // 添加按鈕和文本 92 d.add(bok); 93 d.add(lab); 94 95 // 對話框關閉事件 96 d.addWindowListener(new WindowAdapter() { 97 public void windowClosing(WindowEvent e) { 98 d.setVisible(false);// 退出對話框 99 }100 });101 102 // “確定”按鈕事件103 bok.addActionListener(new ActionListener() {104 public void actionPerformed(ActionEvent e) {105 d.setVisible(false);// 按確認鍵,退出對話框106 }107 });108 109 String info = "您輸入的路徑:" + path + "是錯誤的,請重輸!";110 111 lab.setText(info);// 設置標簽文本內容112 d.setVisible(true);// 顯示對話框113 }114 }115 116 public static void main(String[] args) {117 // 運行窗體118 new MyWindowDemo();119 }120 }---------- android培訓、java培訓、期待與您交流! ----------
新聞熱點
疑難解答