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 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, 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