日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

GUI

發布時間:2024/5/24 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 GUI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GUI組件可以分為兩類:基本組件和容器。容器是一種特殊的組件。

程序的GUI線程由AWT線程管理,并不是主線程結束窗口就會消失。在多線程中如果有一個前臺線程沒有結束,改程序就不可能結束。

1. ATW時間處理:

1.1、 事件處理機制: 事件:用戶對組件的一個操作,稱之為一個事件。

事件源:發生事件的組件就是事件源。

事件處理器:某個java類中的負責處理事件的成員方法。

一個事件監聽器對象負責處理一類事件。 一類事件的每一種發生情況,分別由事件監聽器對象中的一個方法來具體處理。 在事件源和事件監聽器對象中進行約定的接口類,被稱為事件監聽器接口。 事件監聽器接口類的名稱與事件類的名稱是對應的,例如:MouseEvent事件類的監聽接口名為MouseListener。

處理發生在某個GUI組件上的XxxEvent事件的某種情況,其事件處理的通用程序編寫流程:

a. 編寫一個實現了XxxListener接口的事件監聽器類。

b. XxxListener類中的用于處理該事件情況的方法中,編寫處理代碼。

c. 調用組件的addXxxListener方法,將類XxxListener創建的實力對象注冊到GUI組件上。

  

class YourWindowListern extends WindowAdapter{
    //由于適配器中的方法太簡單,不能滿足業務的需求所以要對對應的處理方法進行覆蓋
    @Override
    public void windowClosing(WindowEvent e) { 
        super.windowClosing(e);
        e.getWindow().dispose();
        System.exit(0);
        /*
         * 如果一個方法不是自己調用,而是由java內部自己調用,如果出現與結果不一致的情況,要查看此方法是否被調用
         * */
    }
}
class MyWindownListern implements WindowListener{
    @Override public void windowOpened(WindowEvent e) {}
    @Override
    public void windowClosing(WindowEvent e) {
        e.getWindow().setVisible(false);  //區別兩個get方法
        ((Window) e.getComponent()).dispose();
        //e.get 得到發生事件的事件源
        System.exit(0);
    }
    @Override public void windowClosed(WindowEvent e) {}
    @Override public void windowIconified(WindowEvent e) {}
    @Override public void windowDeiconified(WindowEvent e) {}
    @Override public void windowActivated(WindowEvent e) {}
    @Override public void windowDeactivated(WindowEvent e) {}
}
class ButtonClose implements ActionListener{
    private Frame f = null;
    public ButtonClose(Frame f) {
        this.f = f;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        this.f.dispose();
        //System.exit(0);
    }
    
}
public class TestFrame {
    public static void main(String[] args) {
        /*Frame f = new Frame("www.cjt.org");
        f.add(new Button("ok"));
        f.setSize(300, 300);
        f.setVisible(true);
    //    f.addWindowListener(new MyWindownListern());  //將事件注冊到f對象上
        f.addWindowListener(new YourWindowListern());*/
        /*    try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        f.dispose(); //釋放窗口對象
*/        //f.setVisible(false);  //設置不可見但f對象仍然在內存對象中
        
        //3. ButtonClose
        Frame f = new Frame("www.cjt.org");
        f.setSize(300, 200);
        Button b = new Button("close");
        f.add(b);
        f.setVisible(true);
        b.addActionListener(new ButtonClose(f));
    }
}

1.2、事件分類: 按產生事件的物理操作盒GUI組件的表現效果進行分型: MouseEvent, WindowEvent, ActionEvent ......。

1.3 事件適配器: 事件適配器類:事件監聽器接口的最簡單實現類。 用事件適配器來處理事件,可以簡化事件監聽器的編寫。

1.4 靈活設計事件監聽器類: 如果在事件監聽器類中要訪問非事件源的其他GUI組件,程序該如何編寫。(eg:單機button讓窗口關閉)

public class TestFrame implements ActionListener{
    private Frame f = new Frame("www.cjt.org"+i);
    public static int i = 0;
    public TestFrame(){
        i++;
    }
    public void init(){
        Button b = new Button("close");
        f.setSize(300, 200);
        f.add(b);
        f.setVisible(true);
        b.addActionListener(this/*new TestFrame()*/);
}//面向對象編程思想:腦海中是內存中的一個個對象,通過調用方法之后對象狀態發生某種變化 public static void main(String[] args) { TestFrame t = new TestFrame(); t.init(); } @Override public void actionPerformed(ActionEvent e) { System.out.println("***"+i); f.dispose(); //System.exit(0); } }

1.4 事件處理的多重運用:

用戶的一個操作在觸發了低級事件的同時可能也會處罰語義(高級)事件,此時我們就需要合理的選擇要處理的事件監聽器類型。 eg:用鼠標點擊按鈕,既觸發了鼠標事件也觸發了按鈕本身所代表的事件,程序應該根據業務的需要選擇對事件進行處理,或者兩個都進行處理。如果按鈕被點擊后程序除了要執行按鈕所對應功能外,還希望鼠標按下之后按鈕的標題改變鼠標釋放時候又恢復,這樣就需要注冊兩個事件處理器。一般來說只需要對語義計算進行處理,而不需要對引發該語義事件的低級事件。

  1.5修改組件的默認事件處理

總結

以上是生活随笔為你收集整理的GUI的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。