Java - Evento KeyPressed

 
Vista:

Evento KeyPressed

Publicado por Ricardo Garcia (2 intervenciones) el 04/09/2008 00:20:52
Un saludo a todos los del foro.

Estoy utilizando NetBeans, y necesito utiizar el evento KeyPress, nose como validar para que en un JTextField solo se puedan escribir numeros, y letras como la "A" Mayuscula y la "B" Mayuscula, la tecla "ENTER" debe ejecutar el evento de un botón, por ejemplo [Aceptar].

Gracias anticipadamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Evento KeyPressed

Publicado por Mario (199 intervenciones) el 04/09/2008 11:26:24
A ver... yo suelo usar el KeyReleased en vez del KeyPress, no recuerdo ahora mismo por qué razón exactamente, pero en alguna ocasión el resultado del KeyPress no era el que yo quería, así que prueba con ambos.

Por otro lado... lo que yo haría sería comprobar que el carácter introducido es alguno de los "válidos", y si NO es así, lo borro. La acción creo q sería suficientemente rápida como para que no se viese que se escribe el carácter y se borra.

Ahora te pongo un pequeño ejemplo para que veas como obtener la tecla pulsada:

private void formKeyReleased(java.awt.event.KeyEvent evt) {
int code = evt.getKeyCode();
char caracter = evt.getKeyChar();
}

Con el primer método... obtengo el código numérico que representa el carácter introducido. Con el segundo, obtengo lo que es el carácter en sí. Son independientes y no tienes que usar los dos, pero cada uno te será más útil en una u otra situación.
Por ejemplo... para comparar si es una 'A' lo que se ha introducido, como es normal, utilizaras getKeyChar(). Pero para saber si ha pulsado Enter, debes usar el getKeyCode().

Hay una serie de constantes que te ayudarán a saber qué tecla se ha pulsado. Éstas están en la clase KeyEvent. Para comprobar si han tecleado enter, lo haces de la siguiente forma:

if(evt.getKeyCode == KeyEvent.VK_ENTER)...

VK_ENTER es una constante numérica que se corresponde con el código que se devuelve al pulsar ENTER. Si le echas un vistazo a las constantes quizás te interese alguna otra también, ahí encontrarás todas las teclas del teclado especificadas.

Para que se pulse un botón determinado al pulsar ENTER... para hacerlo de la forma más sencilla... yo haría lo siguiente:
- Saco todo el código que me ejecuta la pulsación del botón a una función, de forma que la pulsación del botón solamente tendrá una linea, la llamada a esa función.
- Compruebo que la tecla pulsada sea ENTER.
- Y si es así... ejecuto la misma función a la que llama el click del botón.

Creo que no me dejo nada atrás... Perdona por el tocho, pero no sabía explicarlo con menos palabras. Si tienes alguna duda coméntanosla, y si te sirve lo que te he dicho, dínoslo también para que se sepa por si a alguien más le sirve ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Ricardo Garcia (15 intervenciones) el 04/09/2008 16:26:13
Estoy intentando llamar directo al evento jButton1ActionPerformed para que realice la acción, pero me aparece este error:

pAutenticarse.java:130: jButton1ActionPerformed(java.awt.event.ActionEvent) in Autenticar.pAutenticarse cannot be applied to (java.awt.event.KeyEvent)
jButton1ActionPerformed(evt);
1 error

Que puede ser, estoy llamando de esta manera en el evento KeyReleased como me recomendaste de la siguiente manera:

if(evt.getKeyCode() == KeyEvent.VK_ENTER){
jButton1ActionPerformed(evt);
}

Luego de haber colocado en las librerias el correspondiente:

import java.awt.event.KeyEvent;

Que puede ser, espero me puedan ayudar. Mario Muchas gracias por tu colaboración me esta sirviendo, pero espero que ahora tambien me puedas colaborar gracias. XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Mario (199 intervenciones) el 05/09/2008 13:47:24
El problema es que el evento que le pasas es el provocado por la pulsación de una tecla (KeyEvent) y el que necesita el ActionPerformed del botón es un ActionEvent.

Esto lo puedes solucionar facilmente como ya te comenté, sacando todo el código que tienes dentro de jButtonActionPerformed a otra función. Me explico mejor... dentro de jButtonActionPerformed tendrás varias líneas de código, todo lo que quieres que se ejecute al hacer click en ese botón determinado. Pues bien... te creas una funcion llamada por ejemplo... "accionClick", y en esa función metes TODO el código que tienes dentro de jButtonActionPerformed. Una vez hecho eso... en jButtonActionPerformed solamente tendrías que llamar a esa función accionClick. Y por supuesto, podrías hacer esto:

if(evt.getKeyCode() == KeyEvent.VK_ENTER){
accionClick();
}

No necesitarias pasarle evt, que es lo que te provoca el error. Es la solución que te recomiendo, ya que es más sencilla, más lógica y te hace un código más estructurado al agruparte ciertas funciones que repites en una misma función que no necesita ningún parámetro.

Si te empeñas en hacerlo llamando a jButtonActionPerformed, lo que debes hacer es construir un objeto ActionEvent e inicializarlo correctamente con los valores que te pida, que no recuerdo cuales son, echa un vistazo a la documentación y si no te aclaras me preguntas. Una vez creado ese objeto ActionEvent, llamas a jButtonActionPerformed y le pasas ese ActionEvent que tú mismo creaste. No debe darte el problema anterior.

Coméntanos qué solución escoges ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Leonardo (1 intervención) el 16/08/2012 17:38:58
por favor me encantaría si puedieses decirme, o poner código de ejemplo de cómo se realiza del segundo modo que mencionaste? muchas gracias ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Jhonatan (1 intervención) el 26/05/2014 01:16:02
Hola, estoy trabajando en un proyecto el cual incluye una autenticación, para ello quisiera implementar este método, ya que es muy tedioso el estar dando clic en el botón de ingresar siempre y no hacerlo con un enter (después de haber inscrito el Id y la contraseña). El problema es que no se como insertar el código que ustedes explican.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio Marcelo

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Julio Marcelo (2 intervenciones) el 12/04/2016 07:24:15
Buena yo tengo la siguiente duda como puedo hacer para que cuando cargue mi Jdialog, Jframe, etc al iniciarse
y al presionar ctrl + a = ah agregar así sucesivamente para modificar o "x" botones que quiera hasta salir

1
2
3
4
5
6
7
8
9
10
11
12
13
private void btnAgregarKeyTyped(java.awt.event.KeyEvent evt) {
           if (evt.getKeyCode() == KeyEvent.VK_A) {
        esAgregar = true;
        ctrArticulo.cargarCombotipoimpusto(cbo_TIPO_IMPUESTO);
        ctrArticulo.cargarComboClasificacion(cbo_CLASIFICACIÓN);
        ctrArticulo.cargarComboMarca(cbo_MARCA);
        ctrArticulo.setEditableTrue(txtcodigo, CODIGOBUSCAR, txtnombre, txtcantidad, txtdescriparti, txtprecio_compra, txtprecio_venta, JFEHCAINGRESO, cbo_TIPO_IMPUESTO, cbo_MARCA, cbo_CLASIFICACIÓN);
        ctrArticulo.desHabilitaBTN();
        ctrArticulo.generarAutonumerico();
        txtnombre.requestFocus();
       }
 
    }

al presionar A no sucede nada pero la verdad me interesa saber como hacer para cuando presiones control + a haga lo siguiente estaria muy agradecido.!!
Uso netbeans 8.0.2 jdk 8 desde muchas gracias.!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio Marcelo

RE:Evento KeyPressed y UN NUEVO ERROR

Publicado por Julio Marcelo (2 intervenciones) el 12/04/2016 07:26:36
Buena yo tengo la siguiente duda como puedo hacer para que cuando cargue mi Jdialog, Jframe, etc al iniciarse
y al presionar ctrl + a = ah agregar así sucesivamente para modificar o "x" botones que quiera hasta salir

1
2
3
4
5
6
7
8
9
10
11
12
13
private void btnAgregarKeyTyped(java.awt.event.KeyEvent evt) {
           if (evt.getKeyCode() == KeyEvent.VK_A) {
        esAgregar = true;
        ctrArticulo.cargarCombotipoimpusto(cbo_TIPO_IMPUESTO);
        ctrArticulo.cargarComboClasificacion(cbo_CLASIFICACIÓN);
        ctrArticulo.cargarComboMarca(cbo_MARCA);
        ctrArticulo.setEditableTrue(txtcodigo, CODIGOBUSCAR, txtnombre, txtcantidad, txtdescriparti, txtprecio_compra, txtprecio_venta, JFEHCAINGRESO, cbo_TIPO_IMPUESTO, cbo_MARCA, cbo_CLASIFICACIÓN);
        ctrArticulo.desHabilitaBTN();
        ctrArticulo.generarAutonumerico();
        txtnombre.requestFocus();
       }
 
    }

al presionar A no sucede nada pero la verdad me interesa saber como hacer para cuando presiones control + a haga lo siguiente estaria muy agradecido.!!
Uso netbeans 8.0.2 jdk 8 desde muchas gracias.!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

(evt) cambiar por (null)

Publicado por renzoH (1 intervención) el 16/06/2019 02:19:09
(evt) cambiar por (null)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento KeyPressed

Publicado por jamil pupiro (2 intervenciones) el 09/03/2009 21:15:10
Gracias mi hermano por este comentario aun que no ice la pregunta me sirvio de mucho tu explicacion ,me ayudo a reforzar la explicacion de mi tutor de programacion.De nuevo gracias. Me gustaria aprovechar la oportunidad para preguntarte como hago para validar un JTexfield primero para solo numero y lugo letra
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento KeyPressed

Publicado por learnjava (2 intervenciones) el 09/01/2011 04:08:58
una pregunta
y si quiero usar una busqueda que por cada letra que este buscando en un jtexfield abajo en un jtable me este encontrando lo que yo quiero osea si escribo con la letra "p" me este sliendo tods las letras que esten con p no se si me entiedes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Evento KeyPressed

Publicado por learnjava (2 intervenciones) el 09/01/2011 04:08:58
una pregunta
y si quiero usar una busqueda que por cada letra que este buscando en un jtexfield abajo en un jtable me este encontrando lo que yo quiero osea si escribo con la letra "p" me este sliendo tods las letras que esten con p no se si me entiedes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Evento KeyPressed

Publicado por lady (2 intervenciones) el 07/05/2015 16:54:40
Y para no averiguar si pulsaste enter, sino que pulses enter en un textfield?
Es decir, en una pagina web tienes un textfield para la busqueda dentro de la pagina, no hay boton para ir a buscar, solo busca cuando le ingresas la palabra que vayas a buscar y pulsando enter.
Quiero hacerlo automatico, que apenas le envie la palabra a buscar en el textfield presione enter en el textfield y haga la busqueda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evento KeyPressed

Publicado por eduardo (1 intervención) el 29/12/2012 19:53:41
Dejo este código por acá:
primero al botón añádele un KeyPressed, lo puedes hacer dándole clic derecho al botón events->key->keyPressed
dentro del código que se te generó implementa lo siguiente:

1
2
3
4
5
char car=(char) evt.getKeyCode();
if(car==evt.VK_ENTER){
    System.out.println("se presiono la tecla Enter");
    //o bien puedes colocar algún método que tengas.
}

Otra cosa, este evento solo se ejecutara cuando el foco este en el botón, ya que si el foco está en un jTextField u otro botón el evento no se generará.
Espero les sirva este ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Evento KeyPressed

Publicado por Jason (1 intervención) el 19/06/2013 21:38:46
Me funciono perfectamente!!! Recomiendo este código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evento KeyPressed

Publicado por ferpa1972 (1 intervención) el 16/04/2014 16:27:14
Petacular, gracias hermano!!!!!!!!!!!!!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evento KeyPressed

Publicado por Soledad (1 intervención) el 03/10/2014 17:49:23
Hola amigo necesito de tu ayuda lo que pasa es que tengo que presionar la tecla ctrl + a y me debe girar una escena en particular en java 3D

1
2
3
4
5
6
7
if(e.isAltDown() && e.getKeyCode()==KeyEvent.VK_A){
           y=y-0.1;
           rotate1.rotY(y);
           spinner5.setTransform(rotate1);
           spinner6.setTransform(rotate1);
           System.out.println("Giro esfera");
          }
PERO NO SE COMO GUARDAR CUANDO PRESIONO LAS TECLAS PARA QUE ME REALICE DICHA FUNCIONALIDAD LA CUAL SERIA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
switch (e.getKeyCode()) {
            case 37:
                x = x - 0.1;
                rotate1.rotY(x);
                spinner3.setTransform(rotate1);
                System.out.println("Izquierda");//se dice que tecla es la dirección
                break;
            case 39:
                x = x + 0.1;
                rotate1.rotY(x);
                spinner3.setTransform(rotate1);
                System.out.println("Derecha");
                break;
            case 38:
                x = x - 0.1;
                rotate1.rotX(x);
                spinner3.setTransform(rotate1);
                System.out.println("Arriba");
                break;
            case 40:
                x = x + 0.1;
                rotate1.rotX(x);
                spinner3.setTransform(rotate1);
                System.out.println("Abajo");
                break;
        }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego

Evento KeyPressed

Publicado por Diego (8 intervenciones) el 29/04/2015 10:11:16
Hola acabo de ver este mensaje, no sé si seguirás en contacto con la web pero por si acaso te dejo mi pregunta, a ver estoy en la creación de un juego, es un juego algo simple, yo utilizo eclipse y utilizo el window builder que facilita en gran medida la creación de ventanas y la introducción de componentes dentro de la misma, ahora bien, mi juego consiste en lo siguiente, cuando pulso un botón con el ratón dentro de un jpanel aparece un "monstruo", ahora con otros 4 botones consigo que haciendo click en ellos este monstruo se mueva arriba, abajo, izquierda, derecha, todo eso funciona a la perfección pero he querido dar un paso más y hacer que mi monstruo aparezca en la pantalla cuando doi enter, para ello uso el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
btnEmpezar = new JButton("Empezar");
btnEmpezar.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_ENTER)
        {
            t = new Monster(10,50,50,50, "Imagenes/monster.jpg",10); /*Posicion x, posicion y, alto, ancho, nombre, energia*/
        t.ColocarAleatorio(500, 250);  //Tamaño del panel
        g=panel.getGraphics();
        t.mostrar(g);
        Vida.setText(""+t.energy);
        }
    }
});

Ahora para que aparezca el monstruo debería pasarle el foco al botón pero yo no quiero eso, porque tambien quisiera implementar que cuando pulse las teclas de las flechas del teclado el monstruo se mueva en esas direcciones, con lo cual el foco debería estar sobre todos los botones a la vez, cosa que no se si es posible, ¿hay alguna otra forma de hacer que pulsando la tecla de mi teclado se hagan las acciones que necesito? Tal vez no me haya explicado muy bien, si acaso no se llega a entender lo que intento preguntar solo dímelo, gracias por tu atención. Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evento KeyPressed

Publicado por jose (1 intervención) el 12/04/2015 00:02:12
pes veras lo que te recomendaria es que valides en el evento KeyReleased asi cada ves que precione una tecla y la suelte se ejecute el proceso, y utilices variables boleanas y colores en los jtexfiled asi sabras que esta corecto o incorrecto y el usuario tambien por medio de los colores mas umenos asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void NOMBRESKeyReleased(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
        this.NOMBRES.setBackground(Color.white);
        this.Cnombre=true;   //bariable global boleana inicialisada con false
        if(this.NOMBRES.getText().isEmpty()||!this.NOMBRES.getText().matches("[ A-Za-z]*")||this.NOMBRES.getText().length()>199){
            this.NOMBRES.setBackground(Color.orange);
            this.Cnombre=false;    //bariable global boleana inicialisada con false
        }
    }
 
    private void TELEFONOKeyReleased(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
        this.TELEFONO.setBackground(Color.white);
        this.Ctelefono=true;    //bariable global boleana inicialisada con false
        if(this.TELEFONO.getText().isEmpty()||!this.TELEFONO.getText().matches("[0-9]*")||this.TELEFONO.getText().length()>14){
            this.TELEFONO.setBackground(Color.orange);
            this.Ctelefono=false;     //bariable global boleana inicialisada con false
        }
    }


como puedes ver e echo unos ejemplos con nombres y telefono el .matches te retorna un dato boleano y asi saber si es correcto si el jtextfield contiene solo esos valores te retornara verdadero yo lo estoy negando con un ! puesto que quiero saber cuendo escribe lo contrario a lo que esta dentro de matches ........


ahora para que en el momento que de enter se active un boton yo lo programo en el evento ActionPerformed

1
2
3
4
private void TELEFONOActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        this.jButton1.doClick();
    }




espero te haya servido ..... n_n
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego

Evento KeyPressed

Publicado por Diego (8 intervenciones) el 11/05/2015 18:42:34
Al final lo conseguí solucionar, lo que hice fue darle el foco al panel donde hago aparecer mis gráficos y si por ejemplo pulso un botón de los que se encuentran en el frame simplemente luego devuelvo dicho foco al panel y dentro del panel pues implementé las teclas del teclado con un switch y el key pressed, igualmente muchas gracias, un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evento KeyPressed

Publicado por Joaquin (1 intervención) el 22/11/2016 17:24:52
this.getRootPane().setDefaultButton(btnAceptar); simplemente necesitas esa linea de codigo en el constructor y podras usar el "Enter"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar