используя метод repaint () в этом коде - PullRequest
1 голос
/ 05 июня 2011

У меня проблема с использованием метода перекраски в следующем коде. Пожалуйста, предложите, как использовать метод перекраски, чтобы мой экран обновлялся для небольшой анимации. Это мой код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class movingObjects extends JPanel {
   Timer timer;
   int x = 2, y = 2, width = 10, height = 10;

   public void paintComponent(final Graphics g) { // <---- using repaint method
      ActionListener taskPerformer = new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            g.setColor(Color.red);
            g.drawOval(x, y, width, height);
            g.fillOval(x, y, width, height);
            x++;
            y++;
            width++;
            height++;
         }
      };
      new Timer(100, taskPerformer).start();
   }
}

class mainClass {
   mainClass() {
      buildGUI();
   }

   public void buildGUI() {
      JFrame fr = new JFrame("Moving Objects");
      movingObjects obj = new movingObjects();
      fr.add(obj);
      fr.setVisible(true);
      fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      fr.setSize(1300, 700);
   }

   public static void main(String args[]) {
      new mainClass();
   }
}

1 Ответ

2 голосов
/ 05 июня 2011

Не пытайтесь отложить реальную картину. Компонент должен быть окрашен, когда его просят нарисовать.

Вместо этого используйте свой таймер для изменения какого-либо состояния в MovingObjects. В вашем случае вы хотите изменить состояние x, y, width и height. Когда ваш таймер срабатывает, увеличивайте эти значения и вызывайте repaint().

Тогда в вашем методе paintComponents вы просто используете эти значения для рисования компонента

public void paintComponent(Graphics g) {
  g.setColor(Color.red);
  g.drawOval(x,y,width,height);
  g.fillOval(x,y,width,height);
}

Редактировать

Не уверен, с чем у вас проблемы, но вызвать repaint () несложно:

ActionListener taskPerformer=new ActionListener() {
   public void actionPerformed(ActionEvent ae) {
      x++;
      y++;
      width++;
      height++;
      repaint();
   }
};
new Timer(100,taskPerformer).start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...