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

Parpadeo en método Paint

Estas en el tema de Parpadeo en método Paint en el foro de Java en Foros del Web. He dibujado un circulo que al pulsar las teclas de movimiento recorre el JFrame sin salir de este. Problemas e Inquietudes: El método que se ...
  #1 (permalink)  
Antiguo 17/04/2014, 16:00
 
Fecha de Ingreso: enero-2013
Ubicación: Chile
Mensajes: 29
Antigüedad: 11 años, 3 meses
Puntos: 0
Parpadeo en método Paint

He dibujado un circulo que al pulsar las teclas de movimiento recorre el JFrame sin salir de este.

Problemas e Inquietudes:
  1. El método que se encuentra dentro de keyPressed – > size().width esta depreciado. A pesar de buscar no he encontrado el correcto ¿Cual es el método actual?
  2. ¿Como puedo evitar el parpadeo aparente luego de mover el circulo?
  3. ¿Que técnicas puedo implementar para mejorar en el código?

Link: http://1drv.ms/1gMWjqP

Codigo:

Código PHP:
    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pruebagraphics;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;


/**
 *
 * @author Gregory
 */
public class PruebaGraphics extends JFrame{

  
    
int x=130y=130;


    public static 
void main(String[] args) {

    new 
PruebaGraphics();
    
  
    }

    public 
PruebaGraphics() {

        
this.setTitle("Dibujando sobre lienzo en java");
        
this.setSize(300,300);
        
this.setVisible(true);
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        

       
       
KeyListener pulsa = new KeyListener() {
            
            @
Override
            
public void keyTyped(KeyEvent ke) {
                throw new 
UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            
}

            @
Override
            
public void keyPressed(KeyEvent ke) {
                if(
ke.getKeyCode()==39 && x+60<size().width)  //derecha
                
{
                    
x+10;
                }
                if(
ke.getKeyCode()==40 && y+60<size().height//abajo
               
{
                 
yy+10;
               }
                
                   if(
ke.getKeyCode()==38 && y-30>0//Arriba
                
{
                    
y-10;
                }
                if(
ke.getKeyCode()==37 && x-10 0//izquierda
               
{
                 
xx-10;
               }
                
                
repaint();
            }

            @
Override
            
public void keyReleased(KeyEvent ke) {
            }
        };
       
        
addKeyListener(pulsa);
    }

    @
Override
    
public void paint(Graphics g) {
        
    

        
        
super.paint(g); 
        
g.fillOval(xy5050);
                 

    }

 
    
    

Espero atento sus respuestas, de antemano muchas gracias.
  #2 (permalink)  
Antiguo 19/04/2014, 09:45
Avatar de Krain  
Fecha de Ingreso: julio-2013
Ubicación: Valencia
Mensajes: 60
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Parpadeo en método Paint

Código Java:
Ver original
  1. if(ke.getKeyCode() == 39 && x + 60 < size().width)  //derecha
  2. {
  3.    x = x+10;
  4. }
Esto, lo mejor es evaluar el KeyEvent con un switch, y usando el método para seleccionar la tecla, así no te toca buscar a que código corresponde cada letra.
Para lo del size().width, no se, yo siempre usé el getWidth(), no sabría decirte cual es mejor y eso.
Te dejo un pequeño ejemplo.
Código Java:
Ver original
  1. public void keyPressed(KeyEvent ke){
  2.    switch(ke.getKeyCode()){
  3.       case KeyEvent.VK_RIGHT:
  4.          if(x + 60 < getWidth()){
  5.             x += 10;
  6.          }
  7.       break;

Para resolver lo del parpadeo, el error esta en que estas repintando a cholón. Para que no parpadee lo ideal seria que implementaras un doble buffer. Básicamente se trata de crear como una imagen virtual y pintarla.
En el siguiente enlace podrás encontrar, todo el tema este de el doble buffer muy bien explicado por Chuidiang, que sabe mucho más que yo de java.
Enlace a la wiki de Chuidiang - Doble buffer.

Por ultimo, para gráficos en java, lo mejor seria pintar sobre clases "Lienzo" como son Canvas o JPanel. Ya que JFrame seria más como el marco de la aplicación.
__________________
01001011 01110010 01100001 01101001 01101110

Etiquetas: paint, parpadeo
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 05:23.