Problema con el detecion de Teclado

Iniciado por Debci, 28 Noviembre 2009, 16:16 PM

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

Debci

Hola a todos, estoy mejorando mi RAT en java que pronto acabare pero se me presenta una duda, a partir del siguiente codigo:

Código (java) [Seleccionar]

ackage robot;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.*;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;

/**
*
* @author debci
*/
public class TestTeclado extends JFrame implements KeyListener {
public static void main(String args[]){

      TestTeclado teclado = new TestTeclado();
      teclado.Teclas();
        try {
            System.in.read();
        } catch (IOException ex) {
            Logger.getLogger(TestTeclado.class.getName()).log(Level.SEVERE, null, ex);
        }

}


public void KeyPress(KeyEvent evento) {
    while(true) {
        System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
    }
}

    public void keyTyped(KeyEvent evento) {
       while(true) {
        System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
    }
    }

    public void keyPressed(KeyEvent evento) {

    while(true) {
        System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
    }
    }
    public void keyReleased(KeyEvent evento) {
        while(true) {
        System.out.println("Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() ));
    }
    }

    private void Teclas() {
       TestTeclado tecladito = new TestTeclado();
       tecladito.setVisible(true);
        addKeyListener(this);
    }

}

La cosa, que diga cosas, es que se me presentan dos dudas:

1- Puedo agregar un keyListener a algo que no sea un frame? Es decir una simple aplicacion de shell.
2- Aunque lo haga con un jframe no me detecta las teclas, como es esto?

Saludos

Blitzkrieg'

Una pregunta, y si lo haces con un JFrame pero no lo haces visible, el KeyListener no funciona?



anarquistadel89

Cita de: Sir Crapsalot en 28 Noviembre 2009, 17:37 PM
Una pregunta, y si lo haces con un JFrame pero no lo haces visible, el KeyListener no funciona?


Nop, o igual cojes las primeras teclas, pero cuando el usuario haga un solo clic, se acabo el listener

anarquistadel89@googlewave.com

egyware

No lamentablemente no, hasta el momento tienes que implementar un KeyLogger si no mal recuerdo L-EYER tiene un tutorial de como hacer un Keylogger, ademas este codigo no funcionará ya que por cada tecla que se apreta o suelta genera un evento.
Lo que sucede aqui apreta una tecla y queda totalmente colgado.

Debci

Solucionado, e aqui la solucion:

Código (java) [Seleccionar]

public class Teclas extends JFrame implements KeyListener {
   private String linea1 = "", linea2 = "", linea3 = "";
   private JTextArea areaTexto;

   // configurar GUI
   public Teclas()
   {
      super( "Demostración de eventos de pulsación de tecla" );

      // establecer objeto JTextArea
      areaTexto = new JTextArea( 10, 15 );
      areaTexto.setText( "Oprima cualquier tecla en el teclado..." );
      areaTexto.setEnabled( false );
      areaTexto.setDisabledTextColor( Color.blue );
      getContentPane().add( areaTexto );

      addKeyListener( this );  // permitir al marco procesar eventos de teclas

      setSize( 350, 100 );
      setVisible( true );

   } // fin del constructor de DemoTeclas

   // manejar evento de pulsación de cualquier tecla
   public void keyPressed( KeyEvent evento )
   {
      linea1 = "Se oprimió tecla: " + evento.getKeyText( evento.getKeyCode() );
      establecerLineas2y3( evento );
   }

   // manejar evento de liberación de cualquier tecla
   public void keyReleased( KeyEvent evento )
   {
      linea1 = "Se soltó tecla: " + evento.getKeyText( evento.getKeyCode() );
      establecerLineas2y3( evento );
   }

   // manejar evento de pulsación de una tecla de acción
   public void keyTyped( KeyEvent evento )
   {
      linea1 = "Se escribió tecla: " + evento.getKeyChar();
      establecerLineas2y3( evento );
   }

   // establecer segunda y tercera líneas de salida
   private void establecerLineas2y3( KeyEvent evento )
   {
      linea2 = "Esta tecla " + ( evento.isActionKey() ? "" : "no " ) +
         "es una tecla de acción";

      String temp = evento.getKeyModifiersText( evento.getModifiers() );

      linea3 = "Teclas modificadoras oprimidas: " +
         ( temp.equals( "" ) ? "ninguna" : temp );

      areaTexto.setText( linea1 + "\n" + linea2 + "\n" + linea3 + "\n" );
   }

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      Teclas aplicacion = new Teclas();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DemoTeclas

Leyer

un rat bueno deberias unirte con crapsalot a ver si sakan algo :)  por que egyware y yo estamos en uno que ya lo tenemos super avanzado ;D pero no finalizado pero hay vamos...

Saludos.

egyware

Offtopic:
oh! si debemos retomar ese proyecto(por lo menos yo) porque no he tenido tiempo ahora, pero en el verano ya tengo mas tiempo, me quedan 3 exames mas y wiiii (El lunes empieza el primer examen  :¬¬)

Saludos

Debci

yo tmb tengo examenes solo que son de secundaria (curso 4 de eso) asi que no son problema xD

Saludos

1mpuls0

 ;D Que trampozo utilizas el jtextarea para poder capturar tus eventos, pero bueno es valido

aqui otro ejemplo utilizando el jframe

Código (java) [Seleccionar]

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class eventosTeclado extends JFrame {

private JLabel etqEstado;
   
    public static void main(String args[]) {
        eventosTeclado eT = new eventosTeclado();
        eT.setLocationRelativeTo(null);
        eT.setVisible(true);
    }

    public eventosTeclado() {
        iniciarComponentes();
    }
    private void iniciarComponentes() {

        etqEstado = new JLabel();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("Eventos de Teclado");
        setMinimumSize(new Dimension(500, 600));
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                KeyPressed(evt);
            }
            public void keyReleased(KeyEvent evt) {
                KeyReleased(evt);
            }
            public void keyTyped(KeyEvent evt) {
                KeyTyped(evt);
            }
        });
        getContentPane().setLayout(new FlowLayout());

        etqEstado.setText(" ");
        getContentPane().add(etqEstado);

        pack();
    }

private void KeyPressed(KeyEvent evt) {
    etqEstado.setText("Se oprimio la tecla " +evt.getKeyText(evt.getKeyCode()));
}

private void KeyReleased(KeyEvent evt) {
    etqEstado.setText("Se Solto la tecla " +evt.getKeyText(evt.getKeyCode()) );
}

private void KeyTyped(KeyEvent evt) {
    etqEstado.setText("Se escribio la tecla " +evt.getKeyText(evt.getKeyCode()));
}

}


Faltaron algunos detalles..

Saludos
abc

Debci

Gracias miles, ahora mismo lo pruebo!

Saludos