Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/02/2010, 00:33
MAGISC
 
Fecha de Ingreso: diciembre-2009
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Información Ejemplo de Eventos Con Teclas

Bueno, hice este pequeño ejemplo para responder una duda y ahí vá, espero que sirva.

dos simples clases:

PulsarTeclas.java
Panel.java

PulsarTeclas.java
Código PHP:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class 
PulsarTeclas extends JFrame implements KeyListener
{
    
Panel pnl;
    
JLabel lb;
    public 
PulsarTeclas()
    {
        
this.setVisible(true);
        
this.setSize(400,300);
        
this.setTitle("KeyListener como opciones");
        
this.setLayout(null);
        
this.addKeyListener(this);
        
this.setLocation(300200);
        
pnl  = new Panel();
        
lb = new JLabel("Dibujar: C-Circulo, R-Rectangulo");
        
pnl.setLayout(null);
        
pnl.setBounds(1050365205);
        
lb.setBounds(101020030);
        
pnl.setBackground(Color.white);
        
add(pnl);
        
add(lb);
    }
    public 
void keyTyped(KeyEvent e)
    {
    }
    public 
void keyReleased(KeyEvent e)
    {
    }
    public 
void keyPressed(KeyEvent e)
    {
        
int tecla e.getKeyCode();
        if(
tecla == 67)//la tecla fue la 'C'???
        
{
            
pnl.darValor(1);
        }
        else if(
tecla == 82)//la tecla fue la 'R'???
        
{
            
pnl.darValor(2);
        }
        else 
pnl.darValor(0);//<---cualquier tecla
    
}
    public static 
void main(String[] args)
    {
        
PulsarTeclas frm = new PulsarTeclas();
        
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

Lo que hago es, crear un JFrame al cual lo pongo que espere eventos de teclas... (implements KeyListener.... y despues this.addKeyListener(this))
y creo una instancia de Panel (que es la clase del archivo Panel.java) es donde dibujo un circulo si se presiona la tecla 'C'
o un rectangulo si se presiona la tecla 'R'


en el método keyPressed veo qué tecla se presionó y guardo el código ASCII de ésta en la variable 'tecla'
luego solo comparo para hacer la restricción (saber que hago dependiendo la tecla presionada)
y envio un valor a un metodo (darValor(int m) ) que está en Panel.java
(1 si fué la tecla 'C' o 2 si fué la tecla 'R' o 0 si fué otra tecla)


y Panel.java
Código PHP:
import java.awt.*;
import javax.swing.*;

public class 
Panel extends JPanel
{
    
int dibujar = -1;//solo para dejar un valor por defecto
    
public Panel()
    {}
    public 
void darValor(int m)
    {
        
this.mover m;
        
repaint();
    }
    public 
void paint(Graphics g)
    {
        
Dimension  tam this.getSize();
        
g.setColor(Color.WHITE);
        
g.fillRect(0,0,tam.width,tam.height);
        
g.setColor(Color.BLACK);
        if(
dibujar == 0)
        {
            
g.drawString("Tecla Equivocada!!!"11550);
        }
        else if(
dibujar==1)
        {
            
g.drawOval(80,0,200,200);
        }
        else if(
dibujar==2)
            
g.drawRect(75,0,210,200);
    }

aqui vamos a dibujar algo dependiendo el valor que nos llegue (recuerden a darValor le llega un 1, 2 o 0)

darValor(int m) le da el valor a una variable global 'dibujar' que es la que me indica la figura que se va a dibujar
0 -> texto 'Tecla equivocada'
1 -> Circulo
2 -> Rectangulo

y manda la orden de repintar (repaint()) la cual va al metodo paint(Graphics g)
(esto es por que ese metodo es reservado por Java por eso la llamada a éste no se hace como de costumbre)

éste metodo paint dibuja un cuadro blanco y despues la figura que 'dibujar' le diga (circulo..bla bla .......)

y listo, si miran detenidamente el código se darán cuenta que es muy facil.

cualquier duda no duden en hacerla.....

muchos exitos....