8.1 BARRAS DE HERRAMIENTAS I

 

Bienvenidos a todos una vez más a un nuevo apartado del Tutorial Java. Tengo que decir que si me seguís y habéis llegado hasta aquí deciros que estoy enormemente agradecida y que sois unos valientes porque no es fácil aprender Java leyendo, leyendo… pero eso sí intento hacerlo lo más práctico posible para no aburriros. Con todo lo dicho vamos a empezar este apartado y lo hacemos con las barras de herramientas.

Para la creación de las barras de herramientas se utiliza la clase JToolBar que tiene una serie de métodos pero nosotros vamos a utilizar add(Action acción).

Para entenderlo y verlo mejor, como siempre,  va a ser con una práctica para ello vamos a reutilizar un código de una práctica que ya hicimos en el apartado Eventos, la práctica la denominamos MultiplesFuentes, esta aplicación consistía en una  ventana con tres botones:



Si pulsamos en uno de los botones el marco se rellena del color que indica el botón, por ejemplo, si pulsábamos el botón Amarillo pues el fondo se rellena de color amarillo:



Si pulsamos el botón Azul el color de fondo se rellena de azul así como el botón rojo el color de fondo se rellena del rojo.

La práctica va a consistir además de rellenar el fondo del color que seleccionemos según el botón que pulsemos los botones van a estar dentro de una barra de herramientas.

Si recordáis también está práctica incluía también la opción de cambiar el color de fondo con una combinación de teclas eso no lo vamos a utilizar, vamos a ir quitando cosas hasta que el código quede de esta forma, nos creamos un proyecto al que vamos a llamar AplicacionesGraficas, nos creamos un paquete al que vamos a llamar graficas y dentro de este paquete nos creamos la clase BarHer, cuyo código es el siguiente

package graficas;

 

import java.awt.Color;

import java.awt.Frame;

import java.awt.event.ActionEvent;

 

import javax.swing.*;

 

public class BarHer {

 

       public static void main(String[] args) {

           

             MarcoFuentes mimarco=new MarcoFuentes();

           

             mimarco.setVisible(true);

           

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       }

 

}

 

class MarcoFuentes extends JFrame{

     

       public MarcoFuentes() {

           

             setTitle("Práctica MarcoFuentes");

           

             setSize(400, 400);

           

             lamina = new JPanel();

           

             add(lamina);

 

           

             ActionColor accionAmarillo = new ActionColor("Amarillo", new ImageIcon("src/amarilla.png"), Color.yellow);

             ActionColor accionAzul = new ActionColor("Azul", new ImageIcon("src/azul.png"), Color.blue);

             ActionColor accionRojo = new ActionColor("Rojo", new ImageIcon("src/roja.png"), Color.red);

 

       }

private class ActionColor extends AbstractAction {

           

             public ActionColor(String nombre, Icon icono, Color color_boton) {

                  

                    putValue(Action.NAME, nombre);

                  

                    putValue(Action.SMALL_ICON, icono);

                  

                    putValue(Action.SHORT_DESCRIPTION, "Rellenar el fondo de color " + nombre);

                  

                    putValue("color_de_fondo", color_boton);

 

             }

 

             @Override

             public void actionPerformed(ActionEvent e) {

                    Color c = (Color)getValue("color_de_fondo");

 

                    lamina.setBackground(c);

                  

                  

             }

 

}

JPanel lamina;

 

}

Lo que tenemos en el código aparte de la clase principal tenemos la clase MarcoFuentes que hereda de JFrame, el constructor del marco. Tenemos una clase interna y el método actionPerformed. Si probamos:



De momento no tenemos nada, lo primero que va a hacer es dentro del constructor MarcoFuentes crearnos un menú para ello instanciamos la clase JMenu que le vamos dar el nombre de mimenu y le vamos dar el nombre de Colores:

       public MarcoFuentes() {

           

             setTitle("Práctica MarcoFuentes");

           

             setSize(400, 400);

           

             lamina = new JPanel();

           

             add(lamina);

 

           

ActionColor accionAmarillo = new ActionColor("Amarillo", new ImageIcon("src/graficas/bola_amarilla.gif"), Color.yellow);

             ActionColor accionAzul = new ActionColor("Azul", new ImageIcon("src/graficas/bola_azul.gif"), Color.blue);

             ActionColor accionRojo = new ActionColor("Rojo", new ImageIcon("src/graficas/bola_roja.gif"), Color.red);            

 

JMenu mimenu = new JMenu("Colores");

       }

Ahora tenemos que incluir a este menú cada una de las acciones, estas acciones lo que hacían era construir la acción correspondiente en base a un color, en base a un icono que teníamos en una ruta y en base a un color:

             mimenu.add(accionAmarillo);

            

             mimenu.add(accionAzul);

           

             mimenu.add(accionRojo);

Lo que hemos hecho ha sido crear el menú nos toca crear la barra de menús, instanciamos la clase JMenuBar a la que voy a llamar barramenu y vamos a incluir este menú a la barra.

             JMenuBar barramenu = new JMenuBar();

            

             barramenu.add(mimenu);

Tenemos que indicar en el marco que incluya esta barra de menús y lo hacemos con el método setJMenuBar:

setJMenuBar(barramenu);

Probamos:



Vemos que el menú está agregado si pulsamos en alguno de los colores vemos que se rellena el fondo del marco del color que hayamos seleccionado:



Una vez creado la barra de menú, justo debajo nos vamos a crear la barra de herramientas, instanciamos la clase JToolBar a la que voy a llamar barraher y le vamos a añadir las tres acciones de los colores:

             JToolBar barraher=new JToolBar();

            

             barraher.add(accionAmarillo);

           

             barraher.add(accionAzul);

           

             barraher.add(accionRojo);

Vamos a ubicar la barra en la parte norte porque queremos que se arrastre:

add(barraher, BorderLayout.NORTH);

Probamos:



Vemos que tenemos la barra de menús y debajo la barra de herramientas, si seleccionamos un color tanto de la barra de menús como de la barra de herramientas nuestro marco se rellena de fondo del color seleccionado. También podemos comprobar que la barra de herramientas se desplaza:



Vamos a incluir otro botón que lo que va a hacer es cerrar la aplicación igual que si pulsáramos el botón cerrar de la barra de título.

Lo primero que tenemos que hacer es establecer la acción del botón como va a tener un comportamiento diferente a los demás botones vamos instanciar su propia clase abstracta:

             Action accionSalir = new AbstractAction("Salir", new ImageIcon("src/graficas/cerrar.gif")) {

                

             };

Sin embargo, nos da un error porque tenemos que implementar el método actionPerformed y le añadimos dentro de este método System.exit(0); que se utiliza para salir de las aplicaciones gráficas:

          Action accionSalir = new AbstractAction("Salir", new ImageIcon("src/graficas/cerrar.gif")) {

 

                        @Override

                        public void actionPerformed(ActionEvent e) {

                            

                             System.exit(0);

                            

                        }

                

             };

Vamos añadir a la barra de herramientas un separador y el botón de salir:

             barraher.addSeparator();

             barraher.add(accionSalir);

Probamos de nuevo:



Vemos que hay un separador entre los botones de colores y el botón de Cerrar si pulsamos el botón de Cerrar la aplicación se cierra.

Con esto tendríamos nuestra primera aplicación con una barra de herramientas. El código completo de la práctica:

package graficas;

 

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Frame;

import java.awt.event.ActionEvent;

 

import javax.swing.*;

 

public class BarHer {

 

       public static void main(String[] args) {

           

             MarcoFuentes mimarco=new MarcoFuentes();

           

             mimarco.setVisible(true);

           

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       }

 

}

 

class MarcoFuentes extends JFrame{

     

       public MarcoFuentes() {

           

             setTitle("Práctica MarcoFuentes");

           

             setSize(400, 400);

           

             lamina = new JPanel();

           

             add(lamina);

 

           

             ActionColor accionAmarillo = new ActionColor("Amarillo", new ImageIcon("src/graficas/bola_amarilla.gif"), Color.yellow);

             ActionColor accionAzul = new ActionColor("Azul", new ImageIcon("src/graficas/bola_azul.gif"), Color.blue);

             ActionColor accionRojo = new ActionColor("Rojo", new ImageIcon("src/graficas/bola_roja.gif"), Color.red);

 

             Action accionSalir = new AbstractAction("Salir", new ImageIcon("src/graficas/cerrar.gif")) {

 

                        @Override

                        public void actionPerformed(ActionEvent e) {

                            

                             System.exit(0);

                            

                        }

                

             };

 

             JMenu mimenu = new JMenu("Colores");

            

             mimenu.add(accionAmarillo);

            

             mimenu.add(accionAzul);

           

             mimenu.add(accionRojo);

            

             JMenuBar barramenu = new JMenuBar();

            

             barramenu.add(mimenu);

            

             setJMenuBar(barramenu);

            

             //Construcción de la barra de herramientas

            

             JToolBar barraher=new JToolBar();

            

             barraher.add(accionAmarillo);

           

             barraher.add(accionAzul);

           

             barraher.add(accionRojo);

            

             barraher.addSeparator();

             barraher.add(accionSalir);

 

            

             add(barraher, BorderLayout.NORTH);

 

 

 

       }

private class ActionColor extends AbstractAction {

           

             public ActionColor(String nombre, Icon icono, Color color_boton) {

                  

                    putValue(Action.NAME, nombre);

                  

                    putValue(Action.SMALL_ICON, icono);

                  

                    putValue(Action.SHORT_DESCRIPTION, "Rellenar el fondo de color " + nombre);

                  

                    putValue("color_de_fondo", color_boton);

 

             }

 

             @Override

             public void actionPerformed(ActionEvent e) {

                    Color c = (Color)getValue("color_de_fondo");

 

                    lamina.setBackground(c);

                  

                  

             }

 

}

JPanel lamina;

 

}

En el siguiente post seguiremos con las barras de herramientas, cualquier duda o sugerencia podéis hacerlo a través de los comentarios del blog. Hasta pronto!

7.15 ATAJOS DE TECLADO << >> 8.2 BARRAS DE HERRAMIENTAS II



No hay comentarios:

Publicar un comentario