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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 动作事件_java按钮动作事件

發布時間:2024/10/8 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 动作事件_java按钮动作事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Java事件處理三要素:

1) 事件源(Event Source):即事件發生的場所,就是指各個組件,如按鈕等,點擊按鈕其實就是組件上發生的一個事件;

2) 事件(Event):事件封裝了組件上發生的事情,比如按鈕單擊、按鈕松開等等;

3) 事件監聽器(Event Listener):負責監聽事件源上發生的特定類型的事件,當事件到來時還必須負責處理相應的事件;

2. 事件處理的機制:

1) 首先事件是有不同的類別的,比如按鈕單擊、菜單項單擊等事件就屬于“動作事件”(Action Event),而關閉窗口、最小化窗口等事件就屬于“窗口事件”(Window Event);

2) 不同類型的事件需要用不同類型的監聽器監聽;

3) 而監聽器是一種類對象,這種類必須實現監聽器接口(Listener),對于監聽不同類型的事件AWT庫準備了不同類型的監聽器接口,比如要監聽動作事件就必須實現ActionListener接口,監聽窗口事件就必須實現WindowListener接口;

!監聽器中最重要的就是事件處理方法了,監聽器必須在接受事件之后進行處理(響應);

4) 如何實現監聽?

i. 首先事件源(發生事件的組件)必須同意我身上發生的事件允許那些監聽器監聽;

ii. 也就是說想監聽它身上發生的事件的監聽器必須到它這里注冊,即組件必須調用方法addXxxListener將監聽器注冊到它的監聽器列表中;

iii. 當事件發生時就會將事件對象(Event)發送到所有注冊過的監聽器那里進行處理;

5) 事件源、事件、監聽器的對應關系:

i. 首先一個事件源可以產生多種類型的事件,比如窗口右上角的×按鈕,當單擊它時就會產生兩種類型的事件,一個是按鈕單擊事件(屬于Action Event),另一個是窗口關閉事件(屬于Window Event);

ii. 監聽器接口是什么類型就發送什么類型的事件:如果注冊的監聽器實現的是ActionEvent的接口,那么上述×按鈕就只發送按鈕單擊事件給它而不會發送窗口關閉事件,除非監聽器同時實現了兩種類型的接口,那么該監聽器就會同時受到兩種類型的事件;

iii. 一個事件源可以注冊多個監聽器:一般符合邏輯的編程思想就是不同監聽器監聽、處理不同類型的事件,因此對于可以產生多種類型事件的事件源會注冊多種類型的監聽器,分別負責處理產生的多種事件;

!!當然一個事件源也可以注冊多個相同類型的監聽器,即比對于同一個事件(按鈕單擊),事件源注冊多個實現ActionListener接口的監聽器,那么這些監聽器都會受到該事件,可能會疑問,這不是多此一舉嗎?一種事件就給出一種處理不是很好嗎?那是因為有些情況下可能需要一個事件觸發多種動作,每個監聽器負責實現一個動作;

iv. 一個監聽器可以監聽多個事件源上的事件,即多個不同的組件用addXxxListener方法注冊同一個監聽器,那么當不同事件到來時監聽器會調用其不同方法進行處理,或者在一個方法內部判斷傳進來的是什么事件,再進行特殊的處理;

3. 編寫事件處理程序的基本流程:

1) 首先需要實現監聽器類:自己編寫一個類,至少要實現一種類型的監聽器接口,并實現接口中所有的事件處理方法;

2) 創建組件,并對組件注冊響應的監聽器:首先需要創建監聽器對象,將監聽器對象作為參數傳入組件的addXxxListener方法完成注冊;

3) 全部工作完成,事件的處理完全自動進行;

4) 簡單的示例:處理一個按鈕的單擊事件

[java] view plain copy

public class AwtTest {

Frame f = new Frame("Event Test");

TextField tf = new TextField(30);

Button ok = new Button("OK");

class OkListener implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

System.out.println("OK button pushed!");

tf.setText("Hello!");

}

}

public void init() {

f.add(tf);

f.add(ok, BorderLayout.SOUTH);

ok.addActionListener(new OkListener());

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

new AwtTest().init();

}

}

!!完全按照講述的順序進行;

!直接設置編輯框內文本的方法:void TextField.setText(String text);

4. 事件源-監聽器多對多示例:

[java] view plain copy

public class AwtTest {

Frame f = new Frame("Multiple Event Test");

TextArea ta = new TextArea(6, 40);

Panel p = new Panel();

Button btn1 = new Button("button1");

Button btn2 = new Button("button2");

class Listener1 implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

ta.append("Listener1 be activated! Event Source:" + e.getActionCommand() + "\n");

}

}

class Listener2 implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

ta.append("Listener2 be activated! Event Source:" + e.getActionCommand() + "\n");

}

}

public void init() {

f.add(ta);

p.add(btn1);

p.add(btn2);

f.add(p, BorderLayout.SOUTH);

Listener1 l1 = new Listener1();

Listener2 l2 = new Listener2();

btn1.addActionListener(l1);

btn2.addActionListener(l1);

btn2.addActionListener(l2);

f.pack();

f.setVisible(true);

}

public static void main(String[] args) {

new AwtTest().init();

}

}

!可以看到按鈕2可以同時觸發兩個監聽器,輸出兩條消息,而監聽器1同時監聽并處理了兩個按鈕的消息;

總結

以上是生活随笔為你收集整理的Java 动作事件_java按钮动作事件的全部內容,希望文章能夠幫你解決所遇到的問題。

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