Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] repaint dentro de keypressed?

Estas en el tema de repaint dentro de keypressed? en el foro de Java en Foros del Web. hice un circulo q se mueve con los botones <,>, arriba y abajo xd, cuando apretaba los botones cambiaban las coordenadas de la bolita pero ...
  #1 (permalink)  
Antiguo 19/01/2013, 10:45
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 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.
  #2 (permalink)  
Antiguo 21/01/2013, 09:34
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: repaint dentro de keypressed?

Hola:

Tienes un Graphics g declarado como static y es el que usas en todos sitios. ¿dónde le das valor?

Ese Grapics g puedes eliminarlo, también el método update().

Cuando quieras que se redibuje el panel en el keypressed después de haber cambiado las coordenadas, llama a repaint() sin parámetros, en vez de al paint(g). Con eso debería bastar.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 23/01/2013, 13:24
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: repaint dentro de keypressed?

ya lo solucione tenia que llamar al repaint de la clase donde se dibujaban las figuras. pannel.repaint() xd. yo habia echo todo un mamarracho en la clase principal XDD gracias chuidi te quiero

Etiquetas: clase, programa, repaint
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:36.