Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/01/2013, 10:45
Avatar de iivo94
iivo94
 
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 10 meses
Puntos: 3
repaint dentro de keypressed?

hice un circulo q se mueve con los botones <,>, arriba y abajo xd, cuando apretaba los botones cambiaban las coordenadas de la bolita pero no se actualizaba la figura en la ventana, asi que hice que cambie el color de fondo para que se actualize la ventana, y funciono pero titila la pelotita.. xd ademas quiero hacerlo de la forma q se tiene q hacer, tendria q hacer repaint o no? este es el codigo..

Código:
package geometria;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

public class Programa implements KeyListener{
    public void update(Graphics g){
        paint(g);
    }
    static Graphics g;
    ArrayList arr;
    JFrame ventana;
    static CuadradoDibujable cuadrado;
    panelucho pannel;
    Random rnd=new Random();
    public void createAndShowGui(Graphics g){
        Programa asd= new Programa();
        ventana = new JFrame("ventana");
        ventana.setVisible(true);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.setSize(500,500);
        cuadrado = new CuadradoDibujable(225,200,50,50,Color.RED);
        arr = new ArrayList();
        arr.add(cuadrado);
        pannel = new panelucho(arr);
        ventana.add(pannel);
        pannel.setFocusable(true);
        pannel.addKeyListener(this);
    }
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Programa asd = new Programa();
                asd.createAndShowGui(g);
            }
        });
    }
    @Override
    public void keyTyped(KeyEvent ke) {
    }
    @Override
    public void keyPressed(KeyEvent ke) {
        Color colo1 = new Color(240,240,240);
        Color colo2 = new Color(240,241,240);
        CuadradoDibujable cuad =(CuadradoDibujable)arr.get(0);
        int x=cuad.x;
        int y=cuad.y;
        int tecla=ke.getKeyCode();
        Color color=new Color(240,240,240);
        if(tecla==37){
            cuad.mover(x-10,y);
            pannel.paint(g);
            
        }
        if(tecla==38){
            cuad.mover(x,y-100);
            boolean ver=false;
            while(!ver){
            int azar=rnd.nextInt(5);
            switch (azar){
                    case 0:
                        {
                            if (pannel.getBackground().equals(colo1)){
                                break;
                            }
                            pannel.setBackground(colo1);ver=true;break;}
                    case 1:
                        {
                            if (pannel.getBackground().equals(colo2)){
                                break;
                            }
                            pannel.setBackground(colo2);ver=true;break;}
            }
        }
        }
        if (tecla==39){
            cuad.mover(x+10,y);
            boolean ver=false;
            while(!ver){
            int azar=rnd.nextInt(5);
            switch (azar){
                    case 0:
                        {
                            if (pannel.getBackground().equals(colo1)){
                                break;
                            }
                            pannel.setBackground(colo1);ver=true;break;}
                    case 1:
                        {
                            if (pannel.getBackground().equals(colo2)){
                                break;
                            }
                            pannel.setBackground(colo2);ver=true;break;}
            }
        }
        }
        if (tecla==40){
            cuad.mover(x,y+10);
            boolean ver=false;
            while(!ver){
            int azar=rnd.nextInt(5);
            switch (azar){
                    case 0:
                        {
                            if (pannel.getBackground().equals(colo1)){
                                break;
                            }
                            pannel.setBackground(colo1);ver=true;break;}
                    case 1:
                        {
                            if (pannel.getBackground().equals(colo2)){
                                break;
                            }
                            pannel.setBackground(colo2);ver=true;break;}
            }
        }
        }
    }
    public void paint(Graphics g){
        CuadradoDibujable cuad =(CuadradoDibujable)arr.get(0);
        cuad.dibujar(g);
    }
    @Override
    public void keyReleased(KeyEvent ke) {
        
    }

}
ese seria el programa principal, xd tiene otras clases, pero ahi es donde no se como hacer repaint, o actualizar para q muestre la nueva posicion del objeto RectanguloDibujable,, enrealidad es un circulo.. trate haciendo pannel.paint(g), pero me tira un monton de errores y no lo dibuja XD...
espero q alguien me ayude xd.