Java - Ejecutar una acción al presionar una tecla

   
Vista:

Ejecutar una acción al presionar una tecla

Publicado por Alejandro A. Llerandi (13 intervenciones) el 05/03/2010 06:17:59
Hola, estuve buscando en foros y a través de los buscadores algo de información que pueda solucionar mi problema pero no encontré nada.

La situación es esta: tengo un JDialog en el que tengo varios JTextField, JButton y JPane y quiero que al presionar una tecla, en cualquier parte del JDialog, me abra otra ventana.

Tengo 2 problemas:
1) No puedo hacer que el JDialog ni el JPane reconozcan cuando se presiona una tecla. Pero los JTextField y JButton si reconocen cuando se presiona una tecla.
2) No puedo hacer que se ejecute el evento KeyPressed cuando presiono una tecla de función como ser F3, F4, F5, etc.

Ruego que alguien pueda ayudarme con este problema.
Desde ya muchas gracias.
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:Ejecutar una acción al presionar una tecla

Publicado por James (207 intervenciones) el 05/03/2010 10:06:12
La solucion es bastante simple, debes implementar un metodo recursivo que aplique el listener(el de la accion de tecla) a todos los componentes, navegandolos en el metodo recursivo y aplicando el listener a todos los componentes de tu dialog, es bastante simple si sabes manejar recursividad, Suerte
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

Ejecutar una acción al presionar una tecla

Publicado por Alejandro A. Llerandi (13 intervenciones) el 05/03/2010 17:42:30
Gracias James, pero hay algo que no me quedó claro. ¿Cómo navego por los componentes en el método recursivo?
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:Ejecutar una acción al presionar una tecla

Publicado por James (207 intervenciones) el 06/03/2010 06:19:23
no seria nada dificil, cada compoponente visualen java extiende de una clase, depende si usas Swing, AWT o SWT, en todo caso para Swing y AWT, todos los componentes son Component, entonces solo deberas agregarle el listener a ese Component, fijate este metodo sencillo que hice de prueba hace algo como eso

public void setComponentDefaults(Component c, KeyListener listener){
if(c == null)
return;
//seteo la fuente por defecto y agrego el listener
c.addKeyListener(listener);
c.setFont(new Font(Font.DIALOG_INPUT, Font.BOLD | Font.ITALIC, 14));
JComponent jc = null;
if(c instanceof JComponent)
jc = (JComponent) c;
else
return;
for(Component nc: jc.getComponents()){
setComponentDefaults(nc, listener);
}
}

este metodo agrega el listener a los componentes que va encontrando si estos son JComponents, para otros casos bastaria poner mas if's, suerte
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