Seguidores

MIS WEBS



sábado, 20 de enero de 2018

UTILIZAR VARIAS FUENTES DE EVENTOS JAVA

UTILIZAR VARIAS FUENTES DE EVENTOS


Imaginemos se desencadene una acción cuando el usuario toco un botón del marco, que esa misma acción se haga cuando el usuario accione un consunto de teclas  y además que esa misma acción se desencadene cuando haga doble click con el ratón.
Fuentes:


·         Ratón
·         Botón de marco
·         Combinación teclado


Pero todas desencadenan la misma acción sobre un oyente.
Para esto utilizaremos la interface Action que hereda de ActionPerformed (ActionEvent E) por lo que dispone de todos sus métodos he implementa  propios que nos obliga a implementas al tratarse de una interface:
actionPerformed(ActionEvent arg0) {}
·          
addPropertyChangeListener(PropertyChangeListener arg0) {}
·         Escucha de cambio de propiedad, nos permitirá agregar una propiedad al objeto oyente.
Ejm. Seleccionar un texto


Object getValue(String arg0) {return null;}
·         Obtener valor. Nos permite obtener la clave previamente almacenada con putValue
Es un método getter tal y como puede ver por el return.


isEnabled() {return false;}
·         ¿Está habilitado?
Nos devuelve si está activado o no el objeto fuente de evento. Es un método getter tal y como puede ver por el return.

putValue(String arg0, Object arg1){}
·         Poner valor. Almacena parejas de clave y de valor.

removePropertyChangeListener(PropertyChangeListener arg0){}
·         Eliminar el cambio de oyente. Elimina la propiedad del objeto oyente.
·         Ejm. Dejar de seleccionar un texto seleccionar un texto

etEnabled(boolean arg0){}
·         ¿Establece habilitado? Verdadero/falso. 
Activa o desactiva un objeto fuente de evento.

En caso de no querer utilizarlas todas podemos heredar de la clase AbstractAction  y sobrescribir el que necesitemos.



ASIGNAR ACCIONES A TECLADO



1.       Crear un mapa de entrada:  La acción siempre se realizara sobre el objeto que tiene el foco y crear el mapa de entrada es indicar a nuestro programa que objeto tiene el foco. Utilizaremos las clase InputMap y JComponent
2.       Crear combinación de teclas: decirle a nuestro programa que combinación de teclas declaramos Ctrl+R. Utilizaremeos la clase KeyStroke
3.       Asignar Combinaciones de teclas a objetos: Crear un objeto para cada una de las asignaciones de teclas. Utilizaremos la clase InputMap.
4.       Asignar objetos a acción: Decirle a los objetos que representan las combinaciones de teclado a los objetos de acciones. Utilizaremos la clase ActionMap.



 UTILIZAR VARIAS FUENTES DE EVENTOS 

Ejercicio. En el siguiente ejercicio crearemos una lámina con fondo negro un texto en blancko con letra Arial black, tres botones (verde,rojo,azul) y posterior mente vamos a generar dos fuentes para los eventos. Por una los botones cambiaran los colores del fondo de la página y por otra existirán unas teclas de acceso rápido que modificaran el color de la lámina:

Ctrl+R (rojo)                                      Ctrl+V (verde)                                                 Ctrl+A  (Azul)                    






import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

       public class Practica29_eventos {

              public static void main(String[] args) {
              Marco123 Lamina123455888 = new Marco123();
              Lamina123455888.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             }
       }

       class Marco123 extends JFrame{   
       public Marco123() {
              
             add(new Lamina123());
             setBounds(100,150,500,300);
             setVisible(true);
             }
            
       }
      
       class Lamina123 extends JPanel{ //creamos la lamina como inner class.
            
             public Lamina123 () {
                    //damos color inicial a la lamamina
                    setBackground(Color.gray);
//redimensionamos las fotos en caso de que no sean del tamaño adecuado para que entren en el boton
                   
ImageIcon Escala_verde= new  ImageIcon("C:\\Users\\ruta\\src/puntoVerde.gif");
Image Escala_verde2 = Escala_verde.getImage().getScaledInstance(10, 10, Image.SCALE_SMOOTH);
                   
ImageIcon Escala_Rojo= new  ImageIcon("C:\\Users\\RUTA\\src/puntoRojo.gif");
Image Escala_Rojo2 = Escala_Rojo.getImage().getScaledInstance(10, 10, Image.SCALE_SMOOTH);
                   
ImageIcon Escala_Azul= new  ImageIcon("C:\\ruta\\src/puntoAzul.gif");
Image Escala_Azul2 = Escala_Azul.getImage().getScaledInstance(10, 10, Image.SCALE_SMOOTH);
      
                    //constres objetos de la clase Cambio color bajo creada
CambioColor oyente_Verde = new CambioColor("Verde",new ImageIcon(Escala_verde2),Color.GREEN);
CambioColor oyente_Rojo = new CambioColor("Rojo",new  ImageIcon(Escala_Rojo2),Color.RED);
CambioColor oyente_Azul = new CambioColor("Azul",new  ImageIcon(Escala_Azul2), Color.BLUE);
                   
//creamos los tres botones utilizando los objetos de la clase CambioColor
                           add(new JButton(oyente_Verde));
                           add(new JButton(oyente_Rojo));
                           add(new JButton(oyente_Azul));
                          
/*1. Crear un mapa de entradaLa acción siempre se realizara sobre el objeto que tiene el foco y crear el mapa de entrada es indicar a nuestro programa que objeto tiene el foco. Utilizaremos las clase InputMap y JComponent, le decimos que tiene que actuar sobre un objeto que esta en la lámina, por eso le indicamos ""cuando está enfocado en la ventana"" when_in_Focused_Window */
                          
InputMap Crear_mapaEntrada = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
                          
/*2. Crear combinación de teclas: decirle a nuestro programa que combinación
* de teclas declaramos Ctrl+R. Utilizaremeos la clase KeyStroke*/
                          
                    KeyStroke Ctrl_Verde = KeyStroke.getKeyStroke("ctrl V");
                    KeyStroke Ctrl_Rojo = KeyStroke.getKeyStroke("ctrl R");
                    KeyStroke Ctrl_Azul = KeyStroke.getKeyStroke("ctrl A");
                          
/*3.   Asignar Combinaciones de teclas a objetos: Crear un objeto para cada
* una de las asignaciones de teclas. Utilizaremos la clase InputMap.*/
                           Crear_mapaEntrada.put(Ctrl_Verde, "F_Verde");
                           Crear_mapaEntrada.put(Ctrl_Rojo, "F_Rojo");
                           Crear_mapaEntrada.put(Ctrl_Azul, "F_Azul");
                          
/*4.Asignar objetos a acción: Decirle a los objetos que representan las
* combinaciones de teclado a los objetos de acciones. Utilizaremos la clase
* ActionMap.*/
                           ActionMap mapa = getActionMap();
                           mapa.put("F_Verde", oyente_Verde);
                           mapa.put("F_Rojo", oyente_Rojo);
                           mapa.put("F_Azul", oyente_Azul);
                          
                    }





             public void paintComponent (Graphics g) {
                    super.paintComponent(g);
                   
                    //ACCEDEMOS A GRAPHICS2D PARA HACER UN PUNTERO DE FUENTES
                    Graphics2D g22 = (Graphics2D)g;
                    g22.setFont (new Font("Arial black", Font.BOLD,50));
                    g22.setColor(Color.BLACK);
                    //Escribimos el texto
                    g.drawString("TEXTO 1", 100,130);
            
            
             }
             private class CambioColor extends AbstractAction{
                    public CambioColor (String nombre, ImageIcon icono,Color color_boton) {
                           //Con putValue damos los valores
                           putValue(Action.NAME, nombre);
                           putValue(Action.SMALL_ICON,icono);
       putValue(Action.SHORT_DESCRIPTION,"DA COLOR "+ nombre + " A LAMINA");
                           putValue("COLOR_fONDO", color_boton);
                          
                    }
                   
                    public void actionPerformed(ActionEvent e) {  
                           //damos la claves a los colores con los botones
                           Color c = (Color)getValue("COLOR_fONDO");
                           setBackground(c);
                    }
       }           

}

No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital