鍊煎緱璇存槑鐨勬槸錛屽鏋滆緗瓹ombo涓篛wnerDraw Variable椋庢牸錛屽垯蹇呴』閲嶈澆wmMeasureChild鏂規硶鏉ユ寚瀹氭瘡涓欏圭殑楂樺害銆傚鏋滀嬌鐢∣wnerDraw Fixed椋庢牸錛屽垯鍙渶瑕佸湪鏋勯犵殑鏃跺欏彂閫佷竴鏉B_SETITEMHEIGHT娑堟伅灝辮浜嗐?br />
聽鍙﹀涓縐嶅煎緱鑰冭檻鐨勯夋嫨鏄皢Win32鐨凜omboBoxEx鎺т歡鍖呰鎴怱WT Widget銆備笉榪囷紝榪欓渶瑕佽漿鎹㈣嫢騫茬粨鏋勫茍鎻愪緵鎺ュ彛錛學in32鐨処mageList綆$悊鏈哄埗鍜孲WT鐨処mage鍖呰鏂規硶宸埆姣旇緝澶э紝浣垮緱榪欑鏂規硶瀹炵幇璧鋒潵楹葷儲鐨勫銆?br />
鏃㈢劧姝よ礬涓嶉氾紝閭d箞C#鏄浣曞疄鐜癲elegate鐨勫憿錛熻繃鍘諱篃鏇懼惉闂昏繃涓浜涘唴騫曪紝涓嶈繃榪欐琚兼墠鐪熺殑涓嬪喅蹇冭鐪熷幓鐪嬭繖鏂歸潰鐨勪笢瑗褲傚師鏉$浣跨敤鐨勬槸浠g爜鐢熸垚鐨勬妧鏈細瀵逛簬姣忎釜delegate錛孋#閮戒細涓哄畠鐢熸垚涓涓淳鐢熶簬MulticaseDelegate鐨勫璞★紝鍏朵腑瀹炵幇浜嗕竴涓拰delegate絳懼悕鐩稿悓鐨勬柟娉曘傚悓鏃訛紝瀵筪elegate鐨勬搷浣滅+=鍜?=涔熶細琚紪璇戝櫒澶勭悊鎴愬MulticaseDelegate鏂規硶鐨勮皟鐢ㄣ?/p>
鐭ラ亾浜嗚繖涓鐐癸紝鎺ヤ笅鏉ュ氨闇瑕佺湅鐪婮ava涓湁娌℃湁綾諱技鐨勪唬鐮佺敓鎴愭妧鏈簡銆傛湁鎰忔濈殑鏄紝鏌ユ壘鐨勬椂鍊欏彂鐜版湁娑堟伅璇達紝Java 6.0錛圡utang錛変腑灝嗕細鎻愪緵鍔ㄦ佷唬鐮佺敓鎴愮殑鍔熻兘銆傝繖鐨勭‘寰堝惛寮曚漢錛屼笉榪嘕ava6榪樺湪Beta闃舵錛岀溂涓嬭繕鎸囨湜涓嶄笂銆傚叾浠栨瘮杈冨嚭鍚嶇殑鏂規硶灝辨槸Apache becl鍜孫bjectweb ASM浜嗐傝繖涓や釜搴撻兘姣旇緝搴曞眰錛屼笉榪囪繕鏈変竴涓紑婧愮殑欏圭洰鈥斺攃glib鈥斺斿畠鍦ㄥ唴閮ㄤ嬌鐢ㄤ簡asm錛屼笉榪囨彁渚涗簡杈冨鐨勫疄鐢ㄥ姛鑳姐傛嵁璇碒ibernate鍜孲pring閮界敤鍒頒簡榪欎釜涓滆タ銆傜爺絀惰繖涓簱鐨勬椂鍊欙紝鎴戜竴鐪肩湅鍒頒簡MethodDelegate綾燴斺斿緢鏄庢樉榪欏氨鏄垜瑕佹壘鐨勪笢瑗夸簡銆?/p>
MethodDelegate鐨勮璁℃濇兂寰堢被浼間簬C#鐨刣elegate鈥斺斿皢鎺ュ彛璋冪敤杞彂緇欑被鐨勪竴涓垚鍛樺嚱鏁般備笉榪囬槄璇繪枃妗g殑鏃跺欐垜鍙戠幇涓涓棶棰樸侻ethodDelegate瑕佹眰鍏舵墍瀹炵幇鐨勬帴鍙e繀欏誨彧鏈変竴涓叕鍏辨柟娉曪紝浣嗘槸SWT涓殑璁稿浜嬩歡鎺ュ彛閮芥湁涓嶆涓涓柟娉曪紱姣斿錛孲electionListener灝辨湁widgetSelected鍜宨dgetDefaultSelected涓や釜鏂規硶銆傚洜姝よ鍦⊿WT涓嬌鐢∕ethodDelegate錛岃繕
蹇呴』鍐嶅瀹炵幇鍙﹀涓灞傝漿鍙戙?/p>
浜嗚В鎵嬫錛屾帴涓嬫潵鐨勪簨鎯呭氨涓嶉毦浜嗐傛葷粨璧鋒潵錛岄渶瑕佺殑姝ラ澶ц嚧濡備笅錛?br />1銆佷負姣忕闇瑕佸疄鐜扮殑浜嬩歡澹版槑涓涓帴鍙c傝繖鏄疢ethodDelegate鐨勮姹傘?br />2銆佺敤涓涓被瀹炵幇SWT鐨勪簨浠舵帴鍙o紝騫跺皢鐗瑰畾鐨勬帴鍙h皟鐢ㄨ漿鍙戝埌絎竴姝ユ墍瀹炵幇
鐨勬帴鍙c?br />3銆佺敤MethodDelegate鎻愪緵鐨勬柟娉曪紝澹版槑浜嬩歡澶勭悊瀵硅薄錛圗vent Handler
Target錛岄氬父涓轟富紿椾綋鎴栦富閮ㄤ歡錛夎瀹炵幇涓婅堪鐨勪簨浠舵帴鍙c備笅闈㈠氨鏉ュ疄鐜頒竴涓嬨備負浜嗙畝鍗曡搗瑙侊紝灝嗛渶瑕佸疄鐜扮殑鎺ュ彛澹版槑涓轟簨浠惰漿鍙戠被鐨勫唴閮ㄦ帴鍙o紝浠ラ伩鍏嶇淮鎶ゅお澶氭帴鍙f枃浠訛紙鍥犱負璇ユ帴鍙e彧闇瑕佸0鏄庝竴涓柟娉曪紝鎵浠ヤ笉浼氭妸澶栭儴綾繪悶寰楀お榪囧鏉傘傦級渚嬪錛屽鐞嗛儴浠墮夋嫨浜嬩歡錛坵idgetSelected錛夌殑綾誨彲浠ュ涓嬪疄鐜幫細
package org.yuhao.swt.events;
import net.sf.cglib.reflect.MethodDelegate;
import org.eclipse.swt.events.*;
public class WidgetSelectedHandler implements SelectionListener
{
聽public WidgetSelectedHandler( Object target, String
methodName )
聽{
聽聽delegate = (IWidgetSelectedDelegate)
MethodDelegate.create( target,
聽聽聽聽methodName,
IWidgetSelectedDelegate.class );
聽}
聽public void widgetDefaultSelected( SelectionEvent e )
聽{
聽}
聽public void widgetSelected( SelectionEvent e )
聽{
聽聽delegate.invoke( e );
聽}
聽public void invoke( SelectionEvent e )
聽{
聽}
聽public interface IWidgetSelectedDelegate
聽{
聽聽void invoke( SelectionEvent e );
聽}
聽private IWidgetSelectedDelegate delegate;
}
榪欎釜鎺ュ彛铏界劧鍙湁澶栭儴綾葷敤鍒幫紝浣嗘槸蹇呴』澹版槑涓簆ublic鐨勶紝鍚﹀垯榪愯浼氬嚭閿欙紙鎴戞兂澶ф鏄洜涓轟唬鐮佺敓鎴愪互鍚庤繕鏄閮ㄧ被錛岄渶瑕佸叕寮璁塊棶鏉冮檺錛夈備負浜嗙畝鍖栬皟鐢紝鍐嶅0鏄庝竴涓鐞嗕簨浠剁殑杈呭姪綾籈ventHandler錛屼笓闂ㄧ鐞嗗皢鍚勭浜嬩歡杞彂鍒扮浉搴旂殑Handler鐨勫伐浣滐細
public class EventHandler
{
聽public EventHandler( Object target )
聽{
聽聽this.target = target;
聽}
聽public void handleSelected( Button btn, String methodName )
聽{
聽聽btn.addSelectionListener( new
WidgetSelectedHandler( target, methodName ) );
聽}
聽private Object target;
}
榪欐牱錛屽湪紿楀彛涓氨鍙互綆鍗曠殑濡備笅澶勭悊浜嬩歡錛?br />public MainShell extends Shell()
{
聽聽public MainShell( Display display )
聽{
聽聽......
聽聽handler = new EventHandler( this );
聽聽handler.handleSelected( btn, "btn_clicked" );
聽}
聽public void btn_clicked( SelectionEvent e )
聽{
聽聽...
聽}
}
榪欓噷榪橀渶瑕佹敞鎰忥細1銆佷換浣曚簨浠跺鐞嗘柟娉曞繀欏誨0鏄庝負public鐨勩傝繖鏍蜂技涔庢湁榪濋潰鍚戝璞$殑灝佽鍘熷垯錛屼笉榪囧疄闄呬笂騫朵笉浼氶犳垚浠涔堝ぇ闂銆?銆佷簨浠舵柟娉曠殑絳懼悕蹇呴』鍜屽搴旂殑浜嬩歡鏂規硶鐩稿悓銆備緥濡傦紝widgetSelected鏂規硶鏈変竴涓猄electionEvent鍙傛暟錛岄偅涔堝鐞嗚浜嬩歡鐨刡tn_clicked鏂規硶涔熷繀欏繪湁涓斿彧鏈夎繖涓涓弬鏁般傚鏋滃啓閿欎簡錛岄偅涔堣繍琛岀殑鏃跺欎細鎶涘嚭寮傚父錛岃鎵句笉鍒版寚瀹氱殑鏂規硶銆傝繖榪樻槸闇瑕佺▼搴忓憳鐨勭粏蹇冩潵淇濊瘉銆傝繕綆楀垢榪愮殑鏄嚭閿欑殑鎻愮ず闈炲父鏄庢樉錛屼笉蹇呮媴蹇冧嬌鐢ㄤ簡榪囧害澶嶆潅鐨勬妧鏈屾壘涓嶅埌鐪熸鐨勫嚭閿欑偣銆?br />