## Cómo usar la Clase Tool Bars

Un objeto JToolBar crea una barra de herramientas con iconos -- dentro de una fila o una columna. Normalmente las barras de herramientas proporcionan acceso a funcionalidades que también se encuentran en ítems de menús. Si este es el caso, además de esta página deberías leer Cómo usar Actions.

La siguiente imagen muestra una aplicación que contiene una barra de herramientas sobre un área de texto.

Por defecto, el usuario puede arrastrar la barra de herramientas a un lateral distinto de su contenedor o fuera dentro de su propia ventana. La siguiente figura muestra cómo aparece la aplicación después de que el usuario haya arrastrado la barra de herramientas al lateral derecho de su contenedor. Para hacer que el arrastre de la barra de herramientas funcione correctamente, la barra debe estar en un contenedor que use BorderLayout, y el contenedor sólo debe tener otro componente que esté situado en el centro.

La siguiente figura muestra cómo aparece la aplicación después de que el usuario haya arrastrado la barra de herramientas fuera de su ventana.

El siguiente código implementa la barra de herramientas. Puedes encontrar el programa complento en ToolBarDemo.java. Y las imágenes en left.gif, middle.gif, y LEFT.gif.

> Nota: Si algún botón de nuestra barra de herramientas duplica la funcionalidad de otros componentes, como un ítem de menú, probablemente deberíamos crear y añadir los botones de la barra de herramientas como se describe en Cómo usar Actions.

    public ToolBarDemo() {
        ...
        JToolBar toolBar = new JToolBar();
        addButtons(toolBar);
        ...
        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        ...
        contentPane.add(toolBar, BorderLayout.NORTH);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        ...
    }

    protected void addButtons(JToolBar toolBar) {
        JButton button = null;

        //first button
        button = new JButton(new ImageIcon("images/left.gif"));
        ...
        toolBar.add(button);

        //second button
        button = new JButton(new ImageIcon("images/middle.gif"));
        ...
        toolBar.add(button);

        //third button
        button = new JButton(new ImageIcon("images/LEFT.gif"));
        ...
        toolBar.add(button);
    }

Añadiendo unas pocas líneas de código al ejemplo anterior, podemos demostrar algunas características más de las barras de herramientas:

- Usar el método setFloatable para hacer que la barra no se pueda mover.
- Añadir un separador a una barra de herramientas.
- Añadir un componente que no sea un botón a una barra de herramientas.

Aquí está una imagen del nuevo GUI, que está implementado por ToolBarDemo2.java:

Como la barra de herramientas ya no se puede arrastrar, no tiene el marcado en su flanco izquierdo. Aquí está el código que desactiva el arrastre:

    toolBar.setFloatable(false);

La mayor diferencia visible es que la barra de herramientas contiene dos componentes nuevos, que están precedidos por un espacio en blanco -- un separador . Aquí está el código que añade el separador:

    toolBar.addSeparator();

Aquí está el código que añade los nuevos componentes:

    ...//add to where the first button is initialized:
    button.setAlignmentY(CENTER_ALIGNMENT);
    ...//add to where the second button is initialized:
    button.setAlignmentY(CENTER_ALIGNMENT);
    ...//add to where the third button is initialized:
    button.setAlignmentY(CENTER_ALIGNMENT);
    ...
    //fourth button
    button = new JButton("Another button");
    ...
    button.setAlignmentY(CENTER_ALIGNMENT);
    toolBar.add(button);

    //fifth component is NOT a button!
    JTextField textField = new JTextField("A text field");
    ...
    textField.setAlignmentY(CENTER_ALIGNMENT);
    toolBar.add(textField);

La llamada a setAlignmentY es necesaria para que los componentes de la barra de herramientas se alineen correctamente. Si el código no seleccionara el alineamiento, el campo de texto se posicionaría demasiado arriba. Este es el resultado de JToolBar usando BoxLayout como controlador de distribución, y los botones y campos de texto tienen distinto alineamiento Y por defecto. Si encontramos problemas de distribución con una barra de herramientas podemos ver la página Cómo usar BoxLayout para buscar ayuda.

#### El API Tool Bar

> Las siguientes tablas listan los métodos y constructores más utilizados de JToolBar. Otros métodos útiles están definidos por las clases JComponent, Container, y Component.

> Método | Propósito
> --- | ---
> JToolBar() | Crea una barra de herramientas.
> JButton add(Action) Component add(Component) | Añade un componente (normalmente un botón) a la barra de herramientas. Si el argumento de add es un objeto Action, la barra de herramientas crea automáticamente un JButton y lo añade.
> void addSeparator() | Añade un separador al final de la barra de herramientas.
> void setFloatable(boolean) boolean isFloatable() | La propiedad floatable es true por defecto, para indicar que el usuario puede arrastrar la barra de herramientas a una ventana separada. Para desactivar el arrastre de la barra de herramientas se utiliza toolbar.setFloatable(false).

#### Ejemplos que usan Tool Bars

> Esta tabla lista ejemplos que usan JToolBar y dónde encontrarlos.

> Ejemplo | Dónde se describe | Notas
> --- | --- | ---
> ToolBarDemo.java | Esta página. | Una barra de herramientas básica que usa botónes de iconos.
> ToolBarDemo2.java | Esta página | Demuestra una barra de herramientas no arrastrable que contiene un separador y dos componentes que no son botones.
> ActionDemo.java | Cómo usar Actions | Implementa una barra de herramientas usando objetos Action.

Ozito