KeyListener Problema sin modificar el código en ocasiones va y viene !!!

Iniciado por lluvplay, 19 Abril 2012, 14:56 PM

0 Miembros y 1 Visitante están viendo este tema.

lluvplay

Buenas tardes expertos, amigos, compañeros o como pueda llamarlos.

Mi problema es que me estoy relacionando con la clase KeyListener de Java todo marchaba de maravilla hasta que me di cuenta que sin modificar mi codigo el programa entraba al metodo KeyPressed en algunas ocasiones y en otras no.

Espero me puedan ayudar.

De ante mano agradezco a todo aquel que siempre este interesado en ayudar a todo tipo de persona.
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;


public class principal extends JFrame implements KeyListener{

/**
* @param args
*/
JButton bsalir;
mipanel ob= new mipanel();
JButton blinea;
public principal()
{
this.setSize(270,360);
this.setLocation(100,100);
this.setVisible(true);
this.setTitle("Ventana 1");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.addKeyListener(this);
this.setLayout(null);
bsalir = new JButton("Salir");
bsalir.setBounds(5, 260, 100, 40);
blinea= new JButton("DibujarLinea");
blinea.setBounds(105,260,150,40);
this.add(ob);
this.add(blinea);
this.add(bsalir);
/////////////////////////////////////
///////////////////////////////////
//////////accion de los botones////
bsalir.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,"Chao...!");
System.exit(0);

}});
blinea.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e)
{
ob.repintar();
}});

}//fin del construcctor


public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
principal obj= new principal();
}
public int tec=1 ;
//////////////////// metodos para implementar el teclado
public void keyPressed(KeyEvent e) {
tec = e.getKeyCode();
System.out.println("codigo"+tec);
ob.repintar();
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent arg0) {}
///////////////////////////////////////////
}//fin de la clase principal


class mipanel extends JPanel
{
boolean linea=true;
public mipanel()
{
this.setBackground(Color.black);
this.setSize(200,200);
this.setLocation(20,20);
}
// metodo de pintar mi Panel
public void paint (Graphics g)
{
Dimension  tam = this.getSize();
    g.setColor(Color.WHITE);
    g.fillRect(0,0,tam.width,tam.height);
g.setColor(Color.red);
if (!linea)
g.drawLine(0, 0, 100, 100);
else
g.drawString("No hay una linea", 0, 100);
}
/// mi meto de repintar
public void repintar()
{
if (linea==true)
linea =false;
else
linea=true;
repaint();
}

}


de ante mano digo que ignoren el boton dibujar linea que ese si me llama al metodo repintar;
Mi objetivo es que si toco las teclas arriba, abajo, derecha e izquierda tambien llamen al metodo repintar como se puede ver en la linea de codigo siguiente :
Citarpublic void keyPressed(KeyEvent e) {
       tec = e.getKeyCode();
       System.out.println("codigo"+tec);
       ob.repintar();
   }
   public void keyReleased(KeyEvent e) {}
   public void keyTyped(KeyEvent arg0) {}

Gracias por su tiempo
* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !

lluvplay

Hola muchachos !!!Gracias por su aporte pero ya tengo el problema resuelto !!! el problema esque se incia en el ultimo boton declarado !!! entonces solo tengo que poner al final del constructor
CitarsetFocusable(true);

Noc si como esta resuelto tengo que borrar el post o que tengo que hacer alguien q me comunique porfavor
* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !