Lectura del teclado en una ventana

Iniciado por rommel89, 1 Agosto 2012, 22:01 PM

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

rommel89

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.

leogtz

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

Código (java) [Seleccionar]
teclas.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent que) {}

            @Override
            public void keyPressed(KeyEvent que) {
                // TODO Las acciones...
                JOptionPane.showMessageDialog(null, que.getKeyChar() + "");
            }

            @Override
            public void keyReleased(KeyEvent que) {}
        });
        teclas.setFocusable(true);



Suponiendo que tu jframe se llame "Teclas", claro.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

rommel89


rommel89

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 (java) [Seleccionar]


public class Jugar {

/**
* @param args
*/
public static void main(String[] args)
{
VentanaMenu ahorcado=new VentanaMenu();
ahorcado.setVisible(true);
}
}



//Clase MENU
Código (java) [Seleccionar]


setTitle("Menu");
setSize(500,500);
setLocation(250,50);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.getContentPane().setBackground(Color.DARK_GRAY);

Container contenedor=getContentPane();
SpringLayout layout =new SpringLayout();
contenedor.setLayout(layout);

titulo.setFont(new Font("Arial",Font.BOLD,40));
titulo.setForeground(new Color(0,100,250));

contrHumano.addActionListener(this);
contraCpu.addActionListener(this);
ayuda.addActionListener(this);
creditos.addActionListener(this);

contrHumano.setPreferredSize(new Dimension(100,60));
contraCpu.setPreferredSize(new Dimension(100,60));
ayuda.setPreferredSize(new Dimension(100,60));
creditos.setPreferredSize(new Dimension(100,60));

layout.putConstraint(SpringLayout.WEST,titulo,130,SpringLayout.WEST,contenedor);
layout.putConstraint(SpringLayout.NORTH,titulo,50,SpringLayout.NORTH,contenedor);

layout.putConstraint(SpringLayout.WEST,contrHumano,100,SpringLayout.WEST,contenedor);
layout.putConstraint(SpringLayout.NORTH,contrHumano,200,SpringLayout.NORTH,contenedor);

layout.putConstraint(SpringLayout.WEST,contraCpu,300,SpringLayout.WEST,contenedor);
layout.putConstraint(SpringLayout.NORTH,contraCpu,200,SpringLayout.NORTH,contenedor);

layout.putConstraint(SpringLayout.WEST,ayuda,100,SpringLayout.WEST,contenedor);
layout.putConstraint(SpringLayout.NORTH,ayuda,350,SpringLayout.NORTH,contenedor);

layout.putConstraint(SpringLayout.WEST,creditos,300,SpringLayout.WEST,contenedor);
layout.putConstraint(SpringLayout.NORTH,creditos,350,SpringLayout.NORTH,contenedor);

contenedor.add(titulo);
contenedor.add(contrHumano);
contenedor.add(contraCpu);
contenedor.add(ayuda);
contenedor.add(creditos);
}


//Clase donde se dibujara en esta ventana
Código (java) [Seleccionar]

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;

public class VentanaJuego extends JFrame implements KeyListener
{
char caracter;

int vidas=7;

Dibujo dibujo;

String palabra;
       //Base de datos de palabras pa cuando juegas contra la maquina
String BDPalabras[]={"hola","Alcohol","jugador","pelota","computadora","programacion","alemania","suesia",
  "teclado","arbol","tierra","jupiter","dragon","lluvia","nube","lenguaje","estrella",
  "diccionario","inicio","impresora","tienda","avion","ferrocarril","lucha","caramelo","dulce",
  "dormir","brincar","telefono","television","radio","antena","mercado","kilometro","agua",
  "estado","banco","ejercito","abanico","borrego","perro","lombriz","lengua","laguna","volcan",
  "mar","sal","tecla","asiento","destruccion","parentesis","barro","mexico","salir","tren",
  "redfrigerascion","salud","sol","jupiter","pantalon","sierra","dios","dos","tres","lagato",
  "metro","centimetro","ahogado","helicoptero","tornado","huracan","calle","cable","monitos",
  "centro","abaco","silla","explocio","lancha","tarjeta","moneda","historia","hueco","lava",
  "numero","abecedario","letra","monte","palmera","playa","carton","caja","madera","luz","foco",
  "cara","pierna","panza","elote","dinosuario","kakaroto"};

        //Todavia no se utilizan ni se dibujan
final public JButton colocarPalabra=new JButton("nueva Palabra");
final public JButton terminar=new JButton("Terminar Partida");

public VentanaJuego(final int opcion)
{
setTitle("Ahorcado");
setSize(600,600);
setLocation(250,50);
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

if(opcion == 1)//Porsi quieres jugar contra otro humano
{
                         //se dibuja una ventana para introducir la palbra secreta
palabra=JOptionPane.showInputDialog(getParent(),"Ingrese la palabra a ocultar", "Ocultador de palabra",JOptionPane.DEFAULT_OPTION);
dibujo=new Dibujo(palabra);
}
else
{
                    //Si juegas contra la maquina se seleccionara una palabra de la lista
palabra=BDPalabras[100];
    dibujo=new Dibujo(palabra);
}

this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
                                //Obtenemos la letra presionada del teclado
caracter=e.getKeyChar();

                                //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
dibujo.caracter=String.valueOf(caracter);
dibujo.vidas=vidas;
//una pruba nada mas para saber si esta entrando en dicho metodo
System.out.println(dibujo.getQuitarVidas());

if(dibujo.getQuitarVidas() == false)
{
//Otra prueba namas para ver como se esta comportando la variable
System.out.println(vidas);
--vidas;
}
                              //Repintamos denuevo toda la ventana
repaint();
}
});
                //Adherimos la clase dibujo al frame
this.add(dibujo);
}

@Override
public void keyPressed(KeyEvent e) {
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}


//classe para dibujar
Código (java) [Seleccionar]

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

public class Dibujo extends JComponent
{
String letra;
String palabra;
String caracter;

boolean encontrado=false;

int vidas=7;
int posicionLetra;
int xInicio=50;

char arregloPalabra[];

//Primer constructor para inciar el juego
public Dibujo(String palabra)
{
this.palabra=palabra;
}

public void paintComponent(Graphics g)
{
super.paintComponent( g );

Graphics2D g2=(Graphics2D)g;

//Dibuja Nombre del jugador
g2.setColor(Color.BLUE);
g2.setFont(new Font("Arial", Font.BOLD, 25));
g2.drawString("Player 1", 250, 50);

//Dibuja Vidas
g2.setColor(Color.BLUE);
g2.setFont(new Font("Arial", Font.BOLD, 25));
g2.drawString("Vidas: "+vidas, 400, 250);

//fill para rellenear las figuras de algun color. Su utilizacion es
//fill mas el nombre de la figura a rellenar (colorear) ejemplo fillRect.
//Rectangulo coloreado

//Dibuja Palo plataforma
g2.setColor(new Color(150,75,0));
g2.fillRect(10, 400, 200,25);

//Dibuja Palo vertical
g2.setColor(new Color(150,75,0));
g2.fillRect(50, 110 , 25, 300);

//Dibuja Palo horizontal
g2.setColor(new Color(150,75,0));
g2.fillRect(20, 85 , 250, 25);

//Dibuja las lineas donde se colocaran las letras
dibujarLineas(g2);

                //Dividimos la variable palabra en char para guardrlo en un arreglo de char
arregloPalabra=palabra.toCharArray();

               //Recorre el arreglo de char para saber si se encuentra el caracter obteneido desde el teclado en el arreglo
for(int pos=0; pos < arregloPalabra.length; ++pos)
{
if(String.valueOf(arregloPalabra[pos]).equals(caracter))
{
posicionLetra=pos;
letra=String.valueOf(arregloPalabra[pos]);
//Para siempre dibujar la primera letra que sea en la primera posicion
if(posicionLetra == 0)
{
g2.setColor(Color.BLACK);
g2.setFont(new Font("Arial",Font.BOLD,15));
g2.drawString(letra,55,480);
}
else
{
if(posicionLetra >= 1)
{
posicionLetra*=45;

xInicio+=posicionLetra;

g2.setColor(Color.BLACK);
g2.setFont(new Font("Arial",Font.BOLD,25));
g2.drawString(letra,xInicio,480);

//reiniciamos las variables para que no se salgan del
//limite de las lineas
posicionLetra=0;
xInicio=50;

}
}
encontrado=true;
}
}

if(vidas == 7)
{
//Dibuja Cuerda
g2.setColor(Color.BLACK);
g2.drawLine(250, 110, 250, 140);
}
else
{
if(vidas == 6)
{
//Dibuja Cara
g2.setColor(Color.BLACK);
g2.fillOval(225, 140, 50, 50);
}
else
{
if(vidas == 5)
{
//Dibuja Cuerpo
g2.setColor(Color.BLACK);
g2.drawLine(250, 140, 250, 270);
}
else
{
if(vidas == 4)
{
//Dibuja Brazo Izquierdo
g2.setColor(Color.BLACK);
g2.drawLine(250, 210, 200, 240);
}
else
{
if(vidas == 3)
{
//Dibuja Brazo Derecha
g2.setColor(Color.BLACK);
g2.drawLine(250, 210, 300, 240);
}
else
{
if(vidas == 2)
{
//Dibuja Pie Izquierdo
g2.setColor(Color.BLACK);
g2.drawLine(250, 270, 200, 300);
}
else
{
if(vidas == 1)
{
//Dibuja Pie Derecho
g2.setColor(Color.BLACK);
g2.drawLine(250, 270, 300, 300);

}
}
}
}
}
}
}
encontrado=false;
}

public boolean getQuitarVidas()
{
return encontrado;
}

//Para dibujar las lineas necesarias de acuerdo a la palabra
public void dibujarLineas(Graphics g2)
{
int xInicio=50;
int xFin=80;

for(int i=0; i < palabra.length(); i++)
{
g2.drawLine(xInicio, 480,xFin , 480);
xInicio+=40;
xFin+=40;
}
}
}


leogtz

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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com