05/05/2012, 04:59
|
| | Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 12 años, 6 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)
{
}
}
} |