Blame | Last modification | View Log | Download
/*AVRcamVIEW: A PC application to test out the functionallity of theAVRcam real-time image processing engine.Copyright (C) 2004 Brent A. TaylorThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General PublicLicense as published by the Free Software Foundation; eitherversion 2 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.You should have received a copy of the GNU General PublicLicense along with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USAFor more information on the AVRcamVIEW, please contact:taylorba@comcast.netor go to www.jrobot.net for more details regarding the system.*/package avr.swing;import java.awt.event.*;import java.lang.reflect.*;import javax.swing.*;/*** Utility class for defining Actions that can be attached as an ActionListener.* It also provides many convience methods for setting the Icon, Keystroke,* and Mnemonic.*/public class ProxyAction extends AbstractAction {/*** The object to which the action is to be invoked upon.*/private Object target;/*** The method of the target to call when the action is invoked.*/private Method method;/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param icon The icon to display on the control this action is attached to.* in the object "target".*/public ProxyAction(Object target,String methodName,Icon icon) {this(target, methodName, null, icon);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param name The text string to display on the control this action is* attached to.* in the object "target".*/public ProxyAction(Object target,String methodName,String name) {this(target, methodName, name, null);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param name The text string to display on the control this action is* attached to.* @param key The mnemonic key used to invoke this action. (Alt + key)* in the object "target".*/public ProxyAction(Object target,String methodName,String name,int key) {this(target, methodName, name, key, null);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param name The text string to display on the control this action is* attached to.* @param icon The icon to display on the control this action is attached to.* in the object "target".*/public ProxyAction(Object target,String methodName,String name,Icon icon) {this(target, methodName, false, name, -1, icon);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param name The text string to display on the control this action is* attached to.* @param key The mnemonic key used to invoke this action. (Alt + key)* @param icon The icon to display on the control this action is attached to.* in the object "target".*/public ProxyAction(Object target,String methodName,String name,int key,Icon icon) {this(target, methodName, false, name, key, icon);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param passEvent True if the ActionEvent is to be passed to the method* defined by "methodName"* @param name The text string to display on the control this action is* attached to.*/public ProxyAction(Object target,String methodName,boolean passEvent,String name) {this(target, methodName, passEvent, name, -1, null);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param passEvent True if the ActionEvent is to be passed to the method* defined by "methodName"* @param name The text string to display on the control this action is* attached to.* @param key The mnemonic key used to invoke this action. (Alt + key)* in the object "target".*/public ProxyAction(Object target,String methodName,boolean passEvent,String name,int key) {this(target, methodName, passEvent, name, key, null);}/*** Create a Proxy Action.* @param target The object to which the action is to be invoked upon.* @param methodName The method to call.* @param passEvent True if the ActionEvent is to be passed to the method* defined by "methodName"* @param name The text string to display on the control this action is* attached to.* @param key The mnemonic key used to invoke this action. (Alt + key)* @param icon The icon to display on the control this action is attached to.* in the object "target".*/public ProxyAction(Object target,String methodName,boolean passEvent,String name,int key,Icon icon) {super(name);// this(target,// target.getClass().getMethod(methodName,// (passEvent) ? new Class[] { ActionEvent.class }// : null),// name,// key,// icon);Method method = null;try {method = target.getClass().getMethod(methodName,(passEvent) ? new Class[] {ActionEvent.class}: null);} catch(NoSuchMethodException ex) {throw new NoSuchMethodError(ex.getMessage());}if(method.getParameterTypes().length > 1) {throw new IllegalArgumentException("Method can have only one ActionEvent argument.");} else if(method.getParameterTypes().length == 1) {if(!method.getParameterTypes()[0].getName().equals(ActionEvent.class.getName())) {throw new IllegalArgumentException(method.getParameterTypes()[0].getName() + " != " +ActionEvent.class.getName() +" Parameter must be an ActionEvent.");}}this.target = target;this.method = method;if(key != -1) {setMnemonic(key);}if(icon != null) {setIcon(icon);}}/*** Set the mnemonic key to be the given key.* @param key The key identifier used to set the Mnemonic to* @see KeyEvent*/public void setMnemonic(int key) {putValue(MNEMONIC_KEY, new Integer(key));}/*** Set the Shortcut KeyStroke to attach to this action.* @param keyCode The key identifier to use.* @param modifiers Any modifiers that need to be used along with the key.* @see KeyStroke* @see KeyEvent*/public void setKeyStroke(int keyCode, int modifiers) {setKeyStroke(KeyStroke.getKeyStroke(keyCode, modifiers));}/*** Set the Shortcut KeyStroke to attach to this action.* @param keystroke The KeyStroke to use*/public void setKeyStroke(KeyStroke keystroke) {putValue(ACCELERATOR_KEY, keystroke);}/*** Set the Icon of this Action* @param icon The icon to use.*/public void setIcon(Icon icon) {putValue(SMALL_ICON, icon);}/*** Sets the Tool Tip Text for this Action** @param text String*/public void setToolTipText(String text) {putValue(SHORT_DESCRIPTION, text);}/*** This method is called when an Action Event occurs on the control this* action is attached to.* @param ae The ActionEvent created.*/public void actionPerformed(ActionEvent ae) {try {if(method.getParameterTypes().length == 0) {// invoke the given method on the given target with no parametersmethod.invoke(target, null);} else {// invoke the given method on the given target with the ActionEvent// as a parametermethod.invoke(target, new Object[] {ae});}} catch(Exception e) {// should never happene.printStackTrace(System.err);}}}