2013-07-18 3 views
0

코드 너희들은 그냥 날 수 있도록 전체 코드가 필요 whole.If know.My 문제는 내가 프로그램을 미사일 때이 화살표로 붉은 타원의 이동을보고 안들어 뒤에 999 개 생성 된 사각형 움직일 수있는 다음이다 아니다 ellpise는 프레임 다시 그리기 및 사각형은 rectangles.I이 원하지 않은 효과의 이유를 알고 생성의 위치를 ​​변경하지 않고 타원을 이동 달성하고자 coords.I'd 또 다른 생성되지만, 게 감사합니다 당신을 고칠 수! 이 구성 요소는 당신의 paintComponent에서 다음 private boolean hasBeenPainted;자바 다시 그리기 문제

전에 여부를 사각형 그려 여부를

public void paintComponent(Graphics g){ 
    random=new Random(); 
    super.paintComponent(g);  

     for(int i=0;i<=1000;i++){ 
     rX=random.nextInt(400); 
     rY=random.nextInt(400); 
     g.drawRect(rX,rY,20,20);    
     } 


    g.setColor(Color.red); 
    g.fillRect(x,y,20,20); 

} 

public void keyPressed(KeyEvent e) { 
    if(e.getKeyCode()==KeyEvent.VK_RIGHT){ 
     x=x+10; 
     repaint(); 
     if(x>480) 
      x=-10; 
    } 

답변

1

이 사각형에 대한 사용자 정의 클래스를 작성을 보유하고 그들의 위치를 생성하고 생성자에서 임의의 위치를 ​​생성합니다. 같은 뭔가 :

public class Rect { 

    private int x; 
    private int y; 
    private int width; 
    private int height; 

    public Rect() { 
     random=new Random(); 
     x=random.nextInt(400); 
     y=random.nextInt(400); 
     width=20; 
     height=20; 
    } 
    //getters and setters 
} 


private Rect rectangles[1000] = new Rect[](); 


public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    for (int i=0; i<1000;i++) { 
     g.drawRect(rectangles[i].getX(), rectangles[i].getY(), 
        rectangles[i].getwidth(), rectangles[i].getHeight()); 
    } 
} 
0

을 추적하는 부울 소개 :

public void paintComponent(Graphics g){ 
super.paintComponent(g); 
if(hasBeenPainted){return;}  
random=new Random(); 

for(int i=0;i<=1000;i++){ 
rX=random.nextInt(400); 
rY=random.nextInt(400); 
g.drawRect(rX,rY,20,20);    
} 


g.setColor(Color.red); 
g.fillRect(x,y,20,20); 
hasBeenPainted = true; 
} 
+0

'(hasBeenPainted가!)'이 반환 – nachokk

+0

난 두려워 것보다 더 좋은 것입니다 경우이 ... 프레임에서 내가 타원 이동, 모든 것이 사라져에 문제가 있습니다. –