Action leftAction = new <a class that implements Action>(...); JButton button = toolBar.add(leftAction); JMenuItem menuItem = mainMenu.add(leftAction);Para que un botón o un ítem de menú obtengan todo el beneficio de usar un Action, debemos crear el componente usando el método add(Action) de JToolBar, JMenu, o JPopupMenu. Actualmente no existe ningún API que permita conectar un objeto Action con un componente ya existente. Por ejemplo, aunque podamos añadir un objeto Action como oyente de action de cualquier botón, el botón no será notificado cuando la acción esté deshabilitada.
Para crear un objeto Action, generalmente se crea una subclase de
AbstractAction y luego se ejemplariza. En nuestra subclase debemos implementar el método actionPerformed para reaccionar de forma apropiada cuando ocurra el evento action. Aquí hay un ejemplo de creacción y ejemplarización de una sublcase AbstractAction:
leftAction = new AbstractAction("Go left",
new ImageIcon("images/left.gif")) {
public void actionPerformed(ActionEvent e) {
displayResult("Action for first button/menu item", e);
}
};
Aquí tenemos una imagen de la aplicación que usa actions para implementar características de árbol:
Aquí está lo que ve el usuario cuando la acción "Go left" está desactivada:
Prueba esto:
- Compila y ejecuta la aplicación. El fichero fuente es ActionDemo.java. También necesitarás tres ficheros de imágenes: left.gif, middle.gif, y LEFT.gif.
- Elige el ítem superior del menú de la izquierda(Menu->Go left).
El área d etexto muestra algún texto identificando tanto la fuente del evento como el oyente que lo ha recibido.- Pulsa el botón más a la izquierda de la barra de herramientas.
De nuevo el área de texto muestra información sobre el evento. Observa que aunque la fuente del evento sea diferente, ambos eventos fueron detectados por el mismo oyente de action: el objeto Action con el que se creó el componente.- Elige el ítem superior del menú Action State.
Esto desactiva el objeto Action "Go Left", que desactiva sus objetos asociados, el botón y el ítem de menú.
Aquí está el código que desactiva la acción "Go left":
boolean selected = ...//true if the action should be enabled; false, otherwise
leftAction.setEnabled(selected);
Después de crear nuestros componentes usando un Action, podríamos necesitar personalizarlos. Por ejemplo, podríamos querer seleccionar el texto del tool-tip del botón. O podríamos personalizar la apariencia de uno de los componentes añadiendo o borrando el icono o el texto. Por ejemplo,
ActionDemo.java no tiene iconos en sus menús, ni texto en sus botones, ni tool-tips. Aquí está el código que consigue esto:
button = toolBar.add(leftAction);
button.setText(""); //an icon-only button
button.setToolTipText("This is the left button");
menuItem = mainMenu.add(leftAction);
menuItem.setIcon(null); //arbitrarily chose not to use icon in menu
Las siguientes tablas listan los métodos y constructores más usados de Action. El API para usar objetos Action se divide en dos categorías:
Crear y usar un Action Método o constructor Propósito AbstractAction()
AbstractAction(String)
AbstractAction(String, Icon)Crea un objeto Action. A través de los argumentos, podemos especificar el texto y el icono usados en los componentes que controla el action. void setEnabled(boolean)
boolean isEnabled()Selecciona u obtiene si los componetes que controla el actión están activados. Llamanado a setEnabled(false) se desactivan todos los componentes que controla. De forma similar, llamando a setEnabled(true) se activan todos los componentes del action.
Crear un Componnete Controlado por un Action Método Propósito JMenuItem add(Action)
JMenuItem insert(Action, int)
(en JMenu y JPopupMenu)Crea un objeto JMenuItem y lo pone en el menú. Puedes ver la sección Cómo usar Menus para más detalles. JButton add(Action)
(in JToolBar)Crea un objeto JButton y lo pone en la barra de herramientas. Puedes ver la sección Cómo usar Tool Bars para más detalles.
Actualmente, el único ejemplo que usa objetos Action es ActionDemo.java, que se usa y se describe en esta página.