.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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: udp java 检测连接_简单的JAV
- 下一篇: jpa 去重_spring boot j