elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Lectura del teclado en una ventana
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Lectura del teclado en una ventana  (Leído 2,813 veces)
rommel89

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Lectura del teclado en una ventana
« en: 1 Agosto 2012, 22:01 pm »

mi duda es como se le puede hacer para que en una ventana se dibujen los caracteres que presiono del teclado y se dibujen en la ventana

Estoy untilizando Interfaces graficas de uasuario

Se que el Scanner es para leer en consola pero lo que yo quiero hacer es leer desde la ventana que hago. En la ventana no existe ningun objeto de entrada como los TextArea o TextField. Solomente quiero hacer que cuando presione una tecla esta a aparezca en la ventana.

Como en el juego del ahorcado que solo presionabas las letras del teclado y aparecian las letras que coincidian.

ya que estoy haciendo uno en mi ventana que se llama VentanaJuego carga la clase Dibujo que aprte de dibujar se encarga de hacer todo el despapaye del juego y lo que quiero hacer es que see lea una letra del teclado y esta aparasca en la ventana que de algun modo yo la capturaria para luego dibujarla. Por lo que nadamas quiero saber como se le hace para leer en la ventana entradas del teclado.


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Lectura del teclado en una ventana
« Respuesta #1 en: 1 Agosto 2012, 23:05 pm »

Es sencillo, solo a tu jframe debes de agregarle un KeyListener, algo así:

Código
  1. teclas.addKeyListener(new KeyListener() {
  2.  
  3.            @Override
  4.            public void keyTyped(KeyEvent que) {}
  5.  
  6.            @Override
  7.            public void keyPressed(KeyEvent que) {
  8.                // TODO Las acciones...
  9.                JOptionPane.showMessageDialog(null, que.getKeyChar() + "");
  10.            }
  11.  
  12.            @Override
  13.            public void keyReleased(KeyEvent que) {}
  14.        });
  15.        teclas.setFocusable(true);
  16.  
  17.  

Suponiendo que tu jframe se llame "Teclas", claro.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
rommel89

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Lectura del teclado en una ventana
« Respuesta #2 en: 2 Agosto 2012, 19:40 pm »

graciassss men ME servio mucho
En línea

rommel89

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Lectura del teclado en una ventana
« Respuesta #3 en: 2 Agosto 2012, 22:47 pm »

mi siguiente duda ya puedo pintar las letras o una pieza del mono si te equibocas, pero ahora cuando presiono otra letra q si esta o no esta se borra la letra que ya habia encontrado o la parte del dibujo del mono q ya se habia dibujado. entonces lo que pregunto es ¿como se le hace para que no me borre todo lo que ya staba dibujado (letras o una parte del mono)?


      o                  <- - - dibujo del mono cuando te equibocas. En ste caso la cabeza se dibujo

a  _  a _  _  _  _ _     <- - - donde se colocan las letras leidas del teclado

ahora cuando me equivoco o presiono otra letra correcta se desaparece lo que habia escrito y aparece lo otro ya sea si me equivoco o le atino.

Aqui se borro lo que ya tenia dibujado.

       /                    <- - - dibujo del mono cuando te equibocas. En ste caso el brazo izquierdo se dibujo.


_  _  _  _  _  l l _     <- - - donde se colocan las letras leidas del teclado

y cuando deberia de quedar asi.

     O               <- - - dibujo del mono cuando te equibocas. Deberia ser asi
    /

a _ a _ _ l l _   <- - - donde se colocan las letras leidas del teclado

adherire my codigo:

a todavia me falta validar algunas cosas pero eso pa' despues ahorita lo que busco esque pueda pintar sin que me quite lo que ya tenia

//Clase para Correr el proyecto
Código
  1.  
  2. public class Jugar {
  3.  
  4. /**
  5. * @param args
  6. */
  7. public static void main(String[] args)
  8. {
  9. VentanaMenu ahorcado=new VentanaMenu();
  10. ahorcado.setVisible(true);
  11. }
  12. }
  13.  
  14.  

//Clase MENU
Código
  1.  
  2. setTitle("Menu");
  3. setSize(500,500);
  4. setLocation(250,50);
  5. setResizable(false);
  6. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7.  
  8. this.getContentPane().setBackground(Color.DARK_GRAY);
  9.  
  10. Container contenedor=getContentPane();
  11. SpringLayout layout =new SpringLayout();
  12. contenedor.setLayout(layout);
  13.  
  14. titulo.setFont(new Font("Arial",Font.BOLD,40));
  15. titulo.setForeground(new Color(0,100,250));
  16.  
  17. contrHumano.addActionListener(this);
  18. contraCpu.addActionListener(this);
  19. ayuda.addActionListener(this);
  20. creditos.addActionListener(this);
  21.  
  22. contrHumano.setPreferredSize(new Dimension(100,60));
  23. contraCpu.setPreferredSize(new Dimension(100,60));
  24. ayuda.setPreferredSize(new Dimension(100,60));
  25. creditos.setPreferredSize(new Dimension(100,60));
  26.  
  27. layout.putConstraint(SpringLayout.WEST,titulo,130,SpringLayout.WEST,contenedor);
  28. layout.putConstraint(SpringLayout.NORTH,titulo,50,SpringLayout.NORTH,contenedor);
  29.  
  30. layout.putConstraint(SpringLayout.WEST,contrHumano,100,SpringLayout.WEST,contenedor);
  31. layout.putConstraint(SpringLayout.NORTH,contrHumano,200,SpringLayout.NORTH,contenedor);
  32.  
  33. layout.putConstraint(SpringLayout.WEST,contraCpu,300,SpringLayout.WEST,contenedor);
  34. layout.putConstraint(SpringLayout.NORTH,contraCpu,200,SpringLayout.NORTH,contenedor);
  35.  
  36. layout.putConstraint(SpringLayout.WEST,ayuda,100,SpringLayout.WEST,contenedor);
  37. layout.putConstraint(SpringLayout.NORTH,ayuda,350,SpringLayout.NORTH,contenedor);
  38.  
  39. layout.putConstraint(SpringLayout.WEST,creditos,300,SpringLayout.WEST,contenedor);
  40. layout.putConstraint(SpringLayout.NORTH,creditos,350,SpringLayout.NORTH,contenedor);
  41.  
  42. contenedor.add(titulo);
  43. contenedor.add(contrHumano);
  44. contenedor.add(contraCpu);
  45. contenedor.add(ayuda);
  46. contenedor.add(creditos);
  47. }
  48.  

//Clase donde se dibujara en esta ventana
Código
  1. import java.awt.*;
  2. import java.awt.event.KeyAdapter;
  3. import java.awt.event.KeyEvent;
  4. import java.awt.event.KeyListener;
  5. import javax.swing.*;
  6.  
  7. public class VentanaJuego extends JFrame implements KeyListener
  8. {
  9. char caracter;
  10.  
  11. int vidas=7;
  12.  
  13. Dibujo dibujo;
  14.  
  15. String palabra;
  16.       //Base de datos de palabras pa cuando juegas contra la maquina
  17. String BDPalabras[]={"hola","Alcohol","jugador","pelota","computadora","programacion","alemania","suesia",
  18.  "teclado","arbol","tierra","jupiter","dragon","lluvia","nube","lenguaje","estrella",
  19.  "diccionario","inicio","impresora","tienda","avion","ferrocarril","lucha","caramelo","dulce",
  20.  "dormir","brincar","telefono","television","radio","antena","mercado","kilometro","agua",
  21.  "estado","banco","ejercito","abanico","borrego","perro","lombriz","lengua","laguna","volcan",
  22.  "mar","sal","tecla","asiento","destruccion","parentesis","barro","mexico","salir","tren",
  23.  "redfrigerascion","salud","sol","jupiter","pantalon","sierra","dios","dos","tres","lagato",
  24.  "metro","centimetro","ahogado","helicoptero","tornado","huracan","calle","cable","monitos",
  25.  "centro","abaco","silla","explocio","lancha","tarjeta","moneda","historia","hueco","lava",
  26.  "numero","abecedario","letra","monte","palmera","playa","carton","caja","madera","luz","foco",
  27.  "cara","pierna","panza","elote","dinosuario","kakaroto"};
  28.  
  29.        //Todavia no se utilizan ni se dibujan
  30. final public JButton colocarPalabra=new JButton("nueva Palabra");
  31. final public JButton terminar=new JButton("Terminar Partida");
  32.  
  33. public VentanaJuego(final int opcion)
  34. {
  35. setTitle("Ahorcado");
  36. setSize(600,600);
  37. setLocation(250,50);
  38. setResizable(false);
  39. setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  40.  
  41. if(opcion == 1)//Porsi quieres jugar contra otro humano
  42. {
  43.                         //se dibuja una ventana para introducir la palbra secreta
  44. palabra=JOptionPane.showInputDialog(getParent(),"Ingrese la palabra a ocultar", "Ocultador de palabra",JOptionPane.DEFAULT_OPTION);
  45. dibujo=new Dibujo(palabra);
  46. }
  47. else
  48. {
  49.                    //Si juegas contra la maquina se seleccionara una palabra de la lista
  50. palabra=BDPalabras[100];
  51.    dibujo=new Dibujo(palabra);
  52. }
  53.  
  54. this.addKeyListener(new KeyAdapter()
  55. {
  56. public void keyPressed(KeyEvent e)
  57. {
  58.                                //Obtenemos la letra presionada del teclado
  59. caracter=e.getKeyChar();
  60.  
  61.                                //Convertimos la variable caracter a String ya que eso es la     que recibe la variable caracter de la otra clase y se lo pasamos a la variable caracter de tipo String de la otra clase
  62. dibujo.caracter=String.valueOf(caracter);
  63. dibujo.vidas=vidas;
  64. //una pruba nada mas para saber si esta entrando en dicho metodo
  65. System.out.println(dibujo.getQuitarVidas());
  66.  
  67. if(dibujo.getQuitarVidas() == false)
  68. {
  69. //Otra prueba namas para ver como se esta comportando la variable
  70. System.out.println(vidas);
  71. --vidas;
  72. }
  73.                              //Repintamos denuevo toda la ventana
  74. repaint();
  75. }
  76. });
  77.                //Adherimos la clase dibujo al frame
  78. this.add(dibujo);
  79. }
  80.  
  81. @Override
  82. public void keyPressed(KeyEvent e) {
  83. }
  84.  
  85. @Override
  86. public void keyReleased(KeyEvent e) {
  87. // TODO Auto-generated method stub
  88. }
  89.  
  90. @Override
  91. public void keyTyped(KeyEvent e) {
  92. // TODO Auto-generated method stub
  93. }
  94. }
  95.  

//classe para dibujar
Código
  1. import javax.swing.*;
  2. import java.awt.*;
  3.  
  4. public class Dibujo extends JComponent
  5. {
  6. String letra;
  7. String palabra;
  8. String caracter;
  9.  
  10. boolean encontrado=false;
  11.  
  12. int vidas=7;
  13. int posicionLetra;
  14. int xInicio=50;
  15.  
  16. char arregloPalabra[];
  17.  
  18. //Primer constructor para inciar el juego
  19. public Dibujo(String palabra)
  20. {
  21. this.palabra=palabra;
  22. }
  23.  
  24. public void paintComponent(Graphics g)
  25. {
  26. super.paintComponent( g );
  27.  
  28.  
  29. //Dibuja Nombre del jugador
  30. g2.setColor(Color.BLUE);
  31. g2.setFont(new Font("Arial", Font.BOLD, 25));
  32. g2.drawString("Player 1", 250, 50);
  33.  
  34. //Dibuja Vidas
  35. g2.setColor(Color.BLUE);
  36. g2.setFont(new Font("Arial", Font.BOLD, 25));
  37. g2.drawString("Vidas: "+vidas, 400, 250);
  38.  
  39. //fill para rellenear las figuras de algun color. Su utilizacion es
  40. //fill mas el nombre de la figura a rellenar (colorear) ejemplo fillRect.
  41. //Rectangulo coloreado
  42.  
  43. //Dibuja Palo plataforma
  44. g2.setColor(new Color(150,75,0));
  45. g2.fillRect(10, 400, 200,25);
  46.  
  47. //Dibuja Palo vertical
  48. g2.setColor(new Color(150,75,0));
  49. g2.fillRect(50, 110 , 25, 300);
  50.  
  51. //Dibuja Palo horizontal
  52. g2.setColor(new Color(150,75,0));
  53. g2.fillRect(20, 85 , 250, 25);
  54.  
  55. //Dibuja las lineas donde se colocaran las letras
  56. dibujarLineas(g2);
  57.  
  58.                //Dividimos la variable palabra en char para guardrlo en un arreglo de char
  59. arregloPalabra=palabra.toCharArray();
  60.  
  61.               //Recorre el arreglo de char para saber si se encuentra el caracter obteneido desde el teclado en el arreglo
  62. for(int pos=0; pos < arregloPalabra.length; ++pos)
  63. {
  64. if(String.valueOf(arregloPalabra[pos]).equals(caracter))
  65. {
  66. posicionLetra=pos;
  67. letra=String.valueOf(arregloPalabra[pos]);
  68. //Para siempre dibujar la primera letra que sea en la primera posicion
  69. if(posicionLetra == 0)
  70. {
  71. g2.setColor(Color.BLACK);
  72. g2.setFont(new Font("Arial",Font.BOLD,15));
  73. g2.drawString(letra,55,480);
  74. }
  75. else
  76. {
  77. if(posicionLetra >= 1)
  78. {
  79. posicionLetra*=45;
  80.  
  81. xInicio+=posicionLetra;
  82.  
  83. g2.setColor(Color.BLACK);
  84. g2.setFont(new Font("Arial",Font.BOLD,25));
  85. g2.drawString(letra,xInicio,480);
  86.  
  87. //reiniciamos las variables para que no se salgan del
  88. //limite de las lineas
  89. posicionLetra=0;
  90. xInicio=50;
  91.  
  92. }
  93. }
  94. encontrado=true;
  95. }
  96. }
  97.  
  98. if(vidas == 7)
  99. {
  100. //Dibuja Cuerda
  101. g2.setColor(Color.BLACK);
  102. g2.drawLine(250, 110, 250, 140);
  103. }
  104. else
  105. {
  106. if(vidas == 6)
  107. {
  108. //Dibuja Cara
  109. g2.setColor(Color.BLACK);
  110. g2.fillOval(225, 140, 50, 50);
  111. }
  112. else
  113. {
  114. if(vidas == 5)
  115. {
  116. //Dibuja Cuerpo
  117. g2.setColor(Color.BLACK);
  118. g2.drawLine(250, 140, 250, 270);
  119. }
  120. else
  121. {
  122. if(vidas == 4)
  123. {
  124. //Dibuja Brazo Izquierdo
  125. g2.setColor(Color.BLACK);
  126. g2.drawLine(250, 210, 200, 240);
  127. }
  128. else
  129. {
  130. if(vidas == 3)
  131. {
  132. //Dibuja Brazo Derecha
  133. g2.setColor(Color.BLACK);
  134. g2.drawLine(250, 210, 300, 240);
  135. }
  136. else
  137. {
  138. if(vidas == 2)
  139. {
  140. //Dibuja Pie Izquierdo
  141. g2.setColor(Color.BLACK);
  142. g2.drawLine(250, 270, 200, 300);
  143. }
  144. else
  145. {
  146. if(vidas == 1)
  147. {
  148. //Dibuja Pie Derecho
  149. g2.setColor(Color.BLACK);
  150. g2.drawLine(250, 270, 300, 300);
  151.  
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }
  159. encontrado=false;
  160. }
  161.  
  162. public boolean getQuitarVidas()
  163. {
  164. return encontrado;
  165. }
  166.  
  167. //Para dibujar las lineas necesarias de acuerdo a la palabra
  168. public void dibujarLineas(Graphics g2)
  169. {
  170. int xInicio=50;
  171. int xFin=80;
  172.  
  173. for(int i=0; i < palabra.length(); i++)
  174. {
  175. g2.drawLine(xInicio, 480,xFin , 480);
  176. xInicio+=40;
  177. xFin+=40;
  178. }
  179. }
  180. }
  181.  
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Lectura del teclado en una ventana
« Respuesta #4 en: 2 Agosto 2012, 23:07 pm »

Entonces creo que las comprobaciones de cadenas en la base de datos de String está fallando (quizás).

Por cierto, los if's esos que tienes anidados se ven muy mal, considera arreglarlo.

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
foto lectura, y lectura veloz, scanning y otros metodos de lectura rapida....
Foro Libre
Kase 3 13,013 Último mensaje 4 Febrero 2014, 08:47 am
por camilo_
¿Como romper una lectura de teclado?
Java
exoesqueleto 3 2,459 Último mensaje 6 Julio 2013, 05:49 am
por exoesqueleto
Duda con una lectura de teclado en c++
Programación C/C++
dato000 9 4,000 Último mensaje 28 Diciembre 2013, 15:42 pm
por leosansan
Python: Lectura errónea por teclado
Programación General
kurosakisan 2 2,515 Último mensaje 24 Junio 2018, 20:33 pm
por kurosakisan
Lectura teclado
Programación C/C++
AXA 4 3,834 Último mensaje 8 Enero 2022, 19:49 pm
por .xAk.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines