Swing y JFC (Java Foundation Classes)

Si tenemos dos o m�s componentes que realizan la misma funcion, podemos considerar la utilizaci�n de un objeto Action para implementar la funci�n. Un objeto Action es un ActionListener que no s�lo proporciona manejo de eventos, sino que tambi�n centraliza el manejo de texto, iconos, y estados de enable de tool bar buttons o it�ms de menu. A�adiendo un Action a un JToolBar, JMenu, o un JPopupMenu, obtendremos las siguientes caracter�sticas.

  • Un nuevo JButton (para JToolBar) o JMenuItem (para JMenu y JPopupMenu) que se a�ade autom�ticamente a la barra de herramientas o men�. El bot�n o �tem de men� usa autom�ticamente el icono y el texto especificado por Action.
  • Un oyente de action registrado (el objeto Action) para el bot�n o el �tem de men�.
  • Manejo centralizado para el estado del bot�n o �tem de men�.

Aqu� hay un ejemplo de uso de un Action para crear un bot�n de una barra de herramientas y un �tem de men� que realizan la misma funci�n.

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.

Prueba esto:
  1. 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.
  2. 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.

  3. 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.

  4. 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� lo que ve el usuario cuando la acci�n "Go left" est� desactivada.

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

.�API de Action

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 componente Controlador 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.

.�Ejemplos que usan Actions

Actualmente, el �nico ejemplo que usa objetos Action es ActionDemo.java, que se usa y se describe en esta p�gina.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR