ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

JavaʵÏÖÀàËÆº¯ÊýÖ¸Õ빦ÄÜ
2014-11-24 12:09:28 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:0´Î
Tags£ºJava ʵÏÖ ÀàËÆ º¯Êý Ö¸Õë ¹¦ÄÜ

JavaÖдó¼Ò¶ÔaddListenerÖ®ÀàµÄ·½·¨±ØÐëʵÏÖÒ»¸öListener½Ó¿ÚµÄÀࣨÄäÃûÀà»òÄÚ²¿Àࣩ£¬¸Ð¾õºÜÂé·³£¬ÉõÖÁ³³×ÅÒªJava¸ÄÓï·¨£¬ÊµÏÖÒ»¼¶º¯Êý£¬Java 8 µÄlambda±í´ïʽÖÕÓÚ½â¾öÁËÕâ¸öÎÊÌ⣬µ«ÊÇÆäʵ²»Óö¯Óï·¨£¬ÎÒÃÇ»¹ÓбðµÄ°ì·¨¡£×î¼òµ¥µÄÏë·¨£¬Èç¹ûJavaÓк¯ÊýÖ¸Õ룬Õâ¸öÎÊÌâ¾ÍºÃ½â¾öÁË£¬²»¹ý£¬ËäÈ»JavaûÓк¯ÊýÖ¸Õ룬ȴÄÜ·´É䣬ÎÒÃÇÒ»Ñù¿ÉÒÔʵÏÖÀàËÆº¯ÊýÖ¸ÕëµÄ¹¦ÄÜ¡£


ActionHelperÓÃÓÚjavafx£¬ÆäËû³¡¾°ÀàÍÆ


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


import javafx.event.ActionEvent;
import javafx.event.EventHandler;


public class ActionHelper {


public static EventHandler handle(Object obj,String methodName,Object... param){
return new Action(obj,methodName,param);
}


private static class Action implements EventHandler{
private Object obj;
private String methodName;
private Class< >[] clazz;
private Object[] param;
public Action(Object obj,String methodName,Object... param){
this.obj = obj;
if(param.length>0){
clazz = new Class[1+param.length];
clazz[0] = ActionEvent.class;
for(int i=0;i clazz[1+i] = param[i].getClass();
}
this.param = new Object[1+param.length];
for(int i=0;i this.param[1+i] = param[i];
}
}else{
clazz = new Class[1];
clazz[0] = ActionEvent.class;
this.param = new Object[1];
}
this.methodName = methodName;
}


@Override
public void handle(ActionEvent event) {
try {
Method method = obj.getClass().getDeclaredMethod(methodName, clazz);
if(method != null){
method.setAccessible(true);
param[0] = event;
method.invoke(obj, param);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}

}
}



//ÒÔÏÂΪʹÓõĴúÂëÆ¬¶Î£¬javafxµÄÓÒ¼ü²Ëµ¥
ContextMenu ctxMenu = new ContextMenu();
MenuItem mitem = new MenuItem("²é¿´Ò³Ãæ");
mitem.setOnAction(ActionHelper.handle(this, "viewPage"));
ctxMenu.getItems().add(mitem);



private void viewPage(ActionEvent event){
//do some thing
}


¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºJava 8 µÄ lambda ±í´ïʽ Ïê½â ÏÂһƪ£ºJavaʵÏÖÈËÁ³Ê¶±ð

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)