## Cómo utilizar Buttons

Para crear un botón, puedes ejemplarizar uan de las muchas sublcases de la clase AbstractButton. Esta sección explica el API basico de botones que define AbstractButton -- y que tienen en común todos los botones Swing. Como JButton subclasifica AbstractButton no define un nuevo API público, esta página lo utiliza para mostrar como funcionan los botones. La siguiente tabla muestra todas las subclases de AbstractButton definidas en Swing, que podrías querer ejemplarizar:

Clase | Sumario | Dónde se describe
--- | --- | ---
JButton | Un botón normal. | Esta sección.
JCheckbox | Un checkbox típico. | Cómo utilizar Checkboxes
JRadioButton | Uno de los grupos de botones de radio. | Cómo utilizar Radio Buttons
JMenuItem | Un ítem en un menú. | [todavía en ningún sitio]
JMenu | Un menú. | [todavía en ningún sitio]

Aquí tienes un gráfico de una aplicación que muestra tres botones:

> Try this:
> 1. Compila y ejecuta la aplicacion. El fichero fiente es ButtonDemo.java.
>    Puedes ver Empezar con Swing si necesitas ayuda
> 2. Pulsa el botón de la izquierda.
>    Desactiva el botón centarl (y a sí mismo, ya que no es necesario) y activa el botón de la derecha.
> 3. Pulsa el botón de la derecha.
>    Activa el botón central y el de la izquierda y se desactiva a sí mismo.

Cómo muestra el ejemplo ButtonDemo, un botón Swing puede mostrar tanto texto como una imagen. En ButtonDemo, cada botón tiene su texto en un lugar diferente, relativo a su imagen. La letra subrayada del texto de cada botón muestra la tecla alternativa para cada botón.

Caundo un botón se desariva, automáticamente se genera una apariencia de botón desactivado. Sin embargo, se podría proporcionar una imagen que sustituyera a la imagen normal. Por ejemplo, podrías proporcionar un versión gris de las imágenes utilizadas en los botoes derecho e izquierdo.

Cómo se implementa el manejo de eventos depende del tipo de botón y de su utilización. Todos los botones Swing, pueden generar evento action, change e ítem, así como los eventos usuales de bajo nivel. El ejemplo ButtonDemo implementa sólo el oyente de action.

Abajo está el código de ButtonDemo.java para crear los botones del ejemplo anterior y reacciona a los clicks en los botones. El código en negrita es el código que permanecería si los botones no tuvieran imágenes.

>     //En el código de  inicialización:
>         ImageIcon leftButtonIcon = new ImageIcon("LEFT.gif");
>         ImageIcon middleButtonIcon = new ImageIcon("middle.gif");
>         ImageIcon LEFTButtonIcon = new ImageIcon("left.gif");

>         b1 = new JButton("Disable middle button", leftButtonIcon);
>         b1.setVerticalTextPosition(AbstractButton.CENTER);
>         b1.setHorizontalTextPosition(AbstractButton.LEFT);
>         b1.setKeyAccelerator('d');
>         b1.setActionCommand("disable");

>         b2 = new JButton("Middle button", middleButtonIcon);
>         b2.setVerticalTextPosition(AbstractButton.BOTTOM);
>         b2.setHorizontalTextPosition(AbstractButton.CENTER);
>         b2.setKeyAccelerator('m');

>         b3 = new JButton("Enable middle button", LEFTButtonIcon);
>         //Use the default text position of CENTER, LEFT.
>         b3.setKeyAccelerator('e');
>         b3.setActionCommand("enable");
>         b3.setEnabled(false);

>         //Oyente para actions en los botones 1 y 3.
>         b1.addActionListener(this);
>         b3.addActionListener(this);
>         . . .
>     }

>     public void actionPerformed(java.awt.event.ActionEvent e) {
>         if (e.getActionCommand().equals("disable")) {
>             b2.setEnabled(false);
>             b1.setEnabled(false);
>             b3.setEnabled(true);
>         } else {
>             b2.setEnabled(true);
>             b1.setEnabled(true);
>             b3.setEnabled(false);
>         }
>     }

La tabla siguiente lista los métodos utilizados de AbstractButton y los constructores de JButton. Podrás ver más API en acción jugando con los botones del ejemplo SwingSet que es parte de la versión de Swing..

El API de utilización de botones se divide en tres caegorías:

- Seleccionar u Obtener los Contenidos del Botón
- Ajuste Fino de la Apariencia del Botón
- Implementar la Funcionalidad del Botón

Seleccionar u Obtener los Contenidos de un Botón
Método o Constructor | Propósito | Ejemplo
--- | --- | ---
JButton(String, Icon) JButton(String) JButton(Icon) JButton() | Crear un ejemplar de JButton, la inicialización debe especificar el texto o la imagen | ButtonDemo.java
void setText(String) String getText() | Selecciona u obtiene el texto mostrado por el botón. | [todavía no]
void setIcon(Icon) Icon getIcon() | Selecciona u obtiene la imagen mostrada por el botón cuando el botón no está seleccionado o puslado. | [todavía no]
void setDisabledIcon(Icon) Icon getDisabledIcon() | Selecciona u obtiene la imagen mostrada por el botón cuando está desactivado. Si no específicas ninguno, se crea uno por defecto manipilando la imagen. | [todavía no]
void setPressedIcon(Icon) Icon getPressedIcon() | Selecciona u obtiene la imagen mostrada por el botón cuando es pulsado. | [todavía no]
void setSelectedIcon(Icon) Icon getSelectedIcon() | Selecciona u obtiene la imagen mostrada por el botón cuando está seleccionado. | [todavía no]
void setRolloverIcon(Icon) Icon getRolloverIcon() | Selecciona u obtiene la imagen mostrada por el botón cuando el cursor pasa sobre él sin que esté pulsado. | [característica no implementada todavía]

Ajuste Fino de la Apariencia del Botón
Método o Constructor | Propósito | Ejemplo
--- | --- | ---
void setHorizontalAlignment(int) void setVerticalAlignment(int) int getHorizontalAlignment() int getVerticalAlignment() | Seleccionan u obtienen donde se deben situar los contenidos del botón. La clase AbstractButton define tres posibles valores para alineación horizontal: LEFT, CENTER (por defecto), y LEFT. Para alineación vertical: TOP, CENTER (por defecto), y BOTTOM. | [todavía no]
void setHorizontalTextPosition(int) void setVerticalTextPosition(int) int getHorizontalTextPosition() int getVerticalTextPosition() | Seleccionan u obtienen donde se debe situar el texto del botón, en relación a la imagen del botón. La clase AbstractButton define tres posibles valores para alineación horizontal: LEFT, CENTER y LEFT (por defecto). Para alineación vertical: TOP, CENTER (por defecto), y BOTTOM. | [todavía no]
void setPad(Insets) Insets getPad() | Selecciona u obtiene el número de pixels entre el borde del botón y sus contenidos. | [todavía no]
void setFocusPainted(boolean) boolean isFocusPainted() | Selecciona u obtiene si el botón debería parecer diferente cuando tiene el foco. | [todavía no]
void setBorderPainted(boolean) boolean isBorderPainted() | Selecciona u obtiene su el border del botón debería ser dibujado. | [todavía no]

Implementar la Funcionalidad del Botón
Metodos o Constructor | Propósito | Ejemplo
--- | --- | ---
void setSelected(boolean) boolean isSelected() | Selecciona u obtiene si el botón está seleccionado. Solo tiene sentido si el botón tiene un estado de on/off, como los checkboxes. | [todavía no]
Object[] getSelectedObjects() | Obtiene los objetos seleccionados dentro del botón. Tiene sentido sólo para los botones como Menus que contienen muchos ítems seleccionables. | [todavía no]
void setActionCommand(String) String getActionCommand(void) | Selecciona u obtiene el nombre de la acción realizada por el botón. | [todavía no]
void setKeyAccelerator(char) char getKeyAccelerator() | Selecciona u obtiene la tecla alternativa para puslar el botón. | ButtonDemo.java
void addActionListener(ActionListener) ActionListener removeActionListener() | Añade o elimina un objeto que escucha los eventos actión disparados por el botón. | [todavía no]
void addChangeListener(ChangeListener) ChangeListener removeChangeListener() | Añade o elimina un objeto qu escucha los eventos change disparados por el botón. | [todavía no]
void addItemListener(ItemListener) ItemListener removeItemListener() | Añade o elimina un objeto que esucha los eventos ítem disparados por el botón. | [todavía no]
void doClick() | Programaticamente realiza un "click". | [todavía no]

Ozito