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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net 事件委托 java_仿net事件委托的java事件模型实现(转csdn)

發布時間:2024/1/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net 事件委托 java_仿net事件委托的java事件模型实现(转csdn) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為對比,我們來看看Java Swing的事件處理和委托就要復雜很多:代碼如下:(您若還不是很了解Swing事件驅動的話,可以參考我的另外一篇文章:事件驅動模型實例詳解(Java篇))://為btnSubmit增加偵聽器SelectHandler,當btnSubmit被點擊以后//有偵聽器的actionPerformed負責處理該點擊事件的業務//由于事件源btnSubmit和偵聽器類SelectHandler處于兩個不同的類中//為了讓SelectHandler類取得頁面的信息,我們需要將窗體對象(this)

//傳入到偵聽器中btnSubmit.addActionListener(new SelectHandler(this));

//偵聽器SelectHandler,它必須實現動作事件ActionListener接口//以達到事件分發的作用class SelectHandler implements ActionListener {

private CommonDialogDemo form = null;

//將窗體對象CommonDialogDemo通過構造函數傳入SelectHandler類中public SelectHandler(CommonDialogDemo form) {

this.form = form;

}

//事件處理方法,當btnSubmit被點擊,自動執行以下打印代碼publicvoid actionPerformed(ActionEvent e) {

System.out.println("This is button");

}

}根據以上代碼,我們可以清晰的看到Java Swing要比.Net的麻煩的多,而且更不能讓人忍受的就是,一個頁面如果有多個按鈕的話,我們必須針對每個按鈕編寫多個事件偵聽類,而且這些類一般都會被設為內部類。學過軟件建模的讀者可能知道,內部在軟件建模在軟件工程中是不推薦使用的,所以這樣的代碼編寫明顯會增加設計冗余度和復雜度,因此我們可以考慮自己編寫一個類似于.Net中EventHandler一樣的事件委托類來處理事件分發。由于我們無權修改Java的編譯器,所以我在這里將會借助于反射技術,利用一個事件委托類處理所有的點擊事件,代碼如下:package cn.softworks.teachersearchsystem.support;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.lang.reflect.Method;

/**

*該類是用來處理所有的Swing按鈕點擊事件,并根據將處理權

*轉交給使用者來處理*

*@authorChen.yu

*

*/

publicclass EventHandlerimplements ActionListener {

//組件所在的窗體對象private Object form = null;

//受到委托的方法名private String methodName = null;

/**

*構造函數*

*@paramform組件所在的窗體對象*@parammethodName受到委托的方法名*/

public EventHandler(Object form,String methodName) {

this.form = form;

this.methodName = methodName;

}

/**

*事件處理委托方法*/

publicvoid actionPerformed(ActionEvent e) {

//得到窗體對象的類型Class formType = this.form.getClass();

try {

//得到指定委托方法的類型Method method =

formType.getMethod(this.methodName, new Class[] {e.getClass()});

//調用指定的方法method.invoke(this.form, new Object[] {e});

}catch(Exception ex) {

return;

}

}

}現在我們來編寫一個測試程序,代碼如下:btnSearch.addActionListener(

new EventHandler(this,"btnSearch_Click"));

public void btnSearch_Click(ActionEvent e) {

System.out.println("This is btnSearch");

}從以上代碼中我們可以清晰的看到,事件處理和事件委托處于同一窗體中了,.Net方便的Delegate處理被我們用反射實現了。

總結

以上是生活随笔為你收集整理的.net 事件委托 java_仿net事件委托的java事件模型实现(转csdn)的全部內容,希望文章能夠幫你解決所遇到的問題。

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