Java - Actualizar JPanel

   
Vista:

Actualizar JPanel

Publicado por Andres (2 intervenciones) el 01/11/2010 06:40:34
ok.... Tengo un jpanel, dibuje en el una especie de mano en tres posiciones q cambian con eventos añadidos al panel ...hasta ahi normal, los eventos se ejecutan pero, el panel no se actualiza bien y cuando la mano cambia de posicion, se pinta la mano en la nueva posicion pero tambien en la vieja posicion, admeas cando la muevo (la mano ) se pinta toda su trayectoria) aqui les dejo el codigo es urgente tengo tres dias para terminar please

package GUI;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class PanelMano extends JPanel implements MouseListener,MouseMotionListener {
private int state,posx,posy,tmpx1,tmpy1,tmpx2,tmpy2;
private int[][] dedo;


//private static PanelMano panel;

private JPanel panelMano=new JPanel();

/*public static PanelMano getMano()
{
if(panel==null)
panel=new PanelMano();

return panel;
}*/

public PanelMano(){
pintar();
}

public boolean isFocusable(){
return true;
}

public void pintar()
{
panelMano.setSize(600,550);
dedo=new int[6][6];
state=0;
initMano(250,450,50,35);
this.addMouseListener(this);

this.addMouseMotionListener(this);
}


public void dibDedos(Graphics g){
g.drawOval(dedo[0][0],dedo[0][1],dedo[0][2],dedo[0][3]);
g.drawOval(dedo[1][0],dedo[1][1],dedo[1][2],dedo[1][3]);
g.drawOval(dedo[2][0],dedo[2][1],dedo[2][2],dedo[2][3]);
g.drawOval(dedo[3][0],dedo[3][1],dedo[3][2],dedo[3][3]);
g.drawOval(dedo[4][0],dedo[4][1],dedo[4][2],dedo[4][3]);
g.drawArc(dedo[5][0],dedo[5][1],dedo[5][2],dedo[5][3],dedo[5][4],dedo[5][5]);
}

public void invertirMano(){
for(int i=0; i<5; i++){
for(int j=0; j<2; j++){
if(j==0)
dedo[i][j]=530-dedo[i][j];
else
dedo[i][j]=500-dedo[i][j];
}
}
dedo[5][0]=dedo[2][0]-50;
dedo[5][1]=dedo[2][1]+40;
dedo[5][4]=180+50;
dedo[5][5]=110;
}

public void paint(Graphics g){
dibDedos(g);
}

public void initMano(int x,int y,int a,int b){
dedo[2][0]=x;
dedo[2][1]=y;
dedo[2][2]=a;
dedo[2][3]=b;
dedo[0][0]=dedo[2][0]-120;
dedo[0][1]=dedo[2][1]-30;
dedo[0][2]=dedo[2][2]-(dedo[2][2]/8);
dedo[0][3]=dedo[2][3]-(dedo[2][3]/8);
dedo[1][0]=dedo[2][0]-70;
dedo[1][1]=dedo[2][1]-7;
dedo[1][2]=dedo[2][2];
dedo[1][3]=dedo[2][3];
dedo[3][0]=dedo[2][0]+70;
dedo[3][1]=dedo[2][1]-7;
dedo[3][2]=dedo[2][2];
dedo[3][3]=dedo[2][3];
dedo[4][0]=dedo[2][0]+150;
dedo[4][1]=dedo[2][1]-80;
dedo[4][2]=dedo[2][3];
dedo[4][3]=dedo[2][2];
dedo[5][0]=dedo[2][0]-50;
dedo[5][1]=dedo[2][1]-50;
dedo[5][2]=150;
dedo[5][3]=50;
dedo[5][4]=50;
dedo[5][5]=110;
}

public void moverMano(int x,int y){
dedo[2][0]+=x;
dedo[2][1]+=y;
dedo[0][0]+=x;
dedo[0][1]+=y;
dedo[1][0]+=x;;
dedo[1][1]+=y;
dedo[3][0]+=x;
dedo[3][1]+=y;
dedo[4][0]+=x;
dedo[4][1]+=y;
dedo[5][0]+=x;
dedo[5][1]+=y;
}

public void cerrarMano(){
dedo[0][0]=dedo[2][0]-90;
dedo[0][1]=dedo[2][1]-30;
dedo[1][0]=dedo[2][0]-50;
dedo[1][1]=dedo[2][1]-7;
dedo[3][0]=dedo[2][0]+50;
dedo[3][1]=dedo[2][1]-7;
dedo[4][0]=dedo[2][0]+90;
dedo[4][1]=dedo[2][1]-80;
dedo[5][0]=dedo[2][0]-50;
dedo[5][1]=dedo[2][1]-50;
}

public void mouseClicked(MouseEvent e){

if(e.getClickCount()==1&&state==2){
System.out.println("un clic");
initMano(250,450,50,35);

repaint();
state=0;
}else if(e.getClickCount()==2&&state==1){
System.out.println("dos clics");
initMano(250,450,50,35);

repaint();
state=2;
cerrarMano();
}else if(e.getClickCount()==3&&state==0){
System.out.println("tres clics");
invertirMano();

repaint();
state=1;
e.translatePoint(300-e.getX(), 100-e.getY());
tmpx1=e.getX();
tmpy1=e.getY();
}
}
public void mouseEntered(MouseEvent e){
this.requestFocus();
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseDragged(MouseEvent e){
}
public void mouseMoved(MouseEvent e){

if(state==1){
tmpx2=e.getX();
tmpy2=e.getY();
moverMano(tmpx2-tmpx1,tmpy2-tmpy1);

repaint();
tmpx1=e.getX();
tmpy1=e.getY();
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Actualizar JPanel

Publicado por Javier (41 intervenciones) el 01/11/2010 17:18:05
Hola,

Agregale a tu método dibDedos(Graphics g) esta linea como primera sentencia, para que borre lo que estaba dibujado antes:

g.clearRect(0, 0, 600, 550);

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar