Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/05/2012, 04:59
Gosdi
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Problema con repaint en JFrame

Buenos, pongo el código de mi clase "Inout" que es la encarga de pintar por pantalla y de escuchar el teclado.


import javax.swing.*;
import java.awt.*;
import java.util.List;
import java.util.*;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


/**
* Clase para la represantación por pantalla de los elementos y
* para procesar la entrada de datos por el teclado
*/
public class Inout
{

private static Canvas canvas;
private Motor motor;

/**
* Declaración de constructor
*/

public Inout()
{
motor = new Motor();
canvas = new Canvas();

}

public static void actualizar()
{
canvas.removeAll();
SwingUtilities.updateComponentTreeUI(canvas);
}




/**
* Clase interna para pintar por pantalla e implementar el teclado
*/
public class Canvas extends JFrame implements KeyListener
{


/*
* Constructores de la clase
*/

public Canvas ()
{
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
setTitle("Space Invaders");
setSize(1200,600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void paint(Graphics g)
{
//g.drawRect(0,0,100,100);

int i = 0;
int j = 0;
for (i = 0; i < 30 ; i++)
{
for (j = 0; j < 50; j++)
{
if (Motor.cuadricula[i][j].esUfo())
{
g.setColor (Color.blue);
g.fillRect(i*40,j*20,20,15);
}
else if (Motor.cuadricula[i][j].esDef())
{
g.setColor (Color.red);
g.fillRect(i*40,j*20,20,15);
}
}
}

}

//Métodos para la entrada de teclado

public void keyPressed(KeyEvent e)
{


/*int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_O){
Motor.moverAbajo();
SwingUtilities.updateComponentTreeUI(this);
}*/

}

public void keyReleased(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_P){
Motor.moverDef(1);//mover una casilla a la derecha

}
else if(keyCode == KeyEvent.VK_O){
Inout.actualizar();
Motor.moverDef(0);//mover una casilla a la izquierda
Inout.actualizar();
}
}

public void keyTyped (KeyEvent e)
{

}


}

}