基於事件的隱式調用風格

基於事件的隱式調用風格

基本組件:對象或過程,並分類爲以下更小的組件

–過程或函數,充當事件源或事件處理器的角色

–事件

連接件:事件-過程綁定

–過程(事件處理器,事件的接收和處理方) 向特定的

事件進行註冊;

–組件(事件源) 發佈事件;

–當某些事件被髮布(觸發) 時,向其註冊的過程被隱式調用;

–調用的次序是不確定的;

優點

§支持實現交互式系統(用戶輸入/網絡通訊)

§異步執行,不必同步等待執行結果

§對事件的併發處理將提高系統性能;

缺點:

分佈式控制方式使系統的同步、驗證和調試變得異常困難:

–組件放棄了對系統計算的控制,難以控制各模塊之間的處理次序。一個組件觸發一個事件時,不能確定其它組件是否會響應它。而且即使它知道事件註冊了哪些組件的構成,它也不能保證這些過程被調用的順序。

–既然過程的語義必須依賴於被觸發事件的上下文約束,關於正確性的推理則難以保證。

–傳統的基於先驗和後驗條件的驗證變得不可能。

程序:

1.基於事件的隱式調用風格

常用控制組件的事件——按鈕與動作事件(ActionEvent),參見下例。

 
 
 

 

 

 

 

 


按鈕與動作事件運行結果

importjava.awt.*;

importjava.awt.event.*;   //引入java.awt.event包處理事件

classBtnLabelAction extends Frame implements ActionListener{

//聲明窗口類(BtnLabelAction)並實現動作事件接口(ActionListener

Labelprompt;

Buttonbtn;

voidCreateWindow(){  //自定義方法

setTitle("MyButton");

prompt =new Label("你好");   //創建標籤對象

btn =new Button("操作");              //創建按鈕對象

setLayout(newFlowLayout());  //佈局設計,用於安排按鈕、標籤的位置

add(prompt);                           //將標籤放入容器

add(btn);                                 //將按鈕放入容器

btn.addActionListener(this);      //將監聽器(窗體對象本身)註冊給按鈕對象

setSize(300,100);

setVisible(true);

}

publicvoid actionPerformed(ActionEvent e){//接口ActionListener的事件處理方法

if(e.getSource()==btn)  //判斷動作事件是否是由按鈕btn引發的

if(prompt.getText()=="你好")

prompt.setText("再見");

else

prompt.setText("你好");

}

  }

  public class BtnTest{

publicstatic void main (String args[]){

BtnLabelActionbla=new BtnLabelAction();

bla.CreateWindow();

}

  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章