2013-07-18 4 views
0

Код ниже не является полным. Если вам нужен полный код, просто дайте мне знать. Моя проблема в том, что когда я lauch программа, я вижу красный эллипс, перемещаемый стрелками и 999 сгенерированных прямоугольников за ним. Когда я перехожу эллипс, ретуширование кадров и прямоугольники генерируются снова и на разных координатах. Я хотел бы достичь движущегося эллипса, не меняя положения генерируемых прямоугольников. Я знаю причину этого нежелательного эффекта, но не могу исправить его. Спасибо!Java repaint issue

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

Введем булево для отслеживания того, был ли этот компонент обращается прямоугольниками до или не private boolean hasBeenPainted;

Тогда в вашем paintcomponent:

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

, я боюсь что-то не так с этим ... Когда я двигаю эллипсом, все пропадает из кадра. –

 Смежные вопросы

  • Нет связанных вопросов^_^