Помогите дописать программу
На картинке дано задание из книги:!задание из книги]1
Ниже привожу свой код:
import javax.swing.*;
import java.awt.*;
public class Animate{
int x=1;
int y=1;
public static void main (String[] args){
Animate gui = new Animate();
gui.go();
}
public void go(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyDrawP drawP = new MyDrawP();
frame.getContentPane().add(drawP);
frame.setSize(500,270);
frame.setVisible(true);
for (int i=0; i<124; i++,y++,x++){
x++;
drawP.repaint();
try{
Thread.sleep(50);
}
catch(Exception ex){}
}
}
class MyDrawP extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.blue);
g.fillRect(x,y,500-x*2,250-y*2);
}
}
}
В моем коде пропущены две строки в классе MyDrawP( в задании видно,что там должно быть 4 строки). Коротко теперь о коде. В цикле вызываем метод repaint() , который вызывает метод paintComponent из класса MyDrawPanel. В классе MyDrawPanel выставляем цвет прямоугольника и координаты. Координаты x,y должны каждый шаг цикла уменьшаться соответственно должен уменьшаться и сам прямоугольник. Однако при компиляции кода на экране возникает синий прямоугольник и он не уменьшается. Вопрос:почему не уменьшается прямоугольник,хотя казалось бы каждый шаг цикла координаты прямоугольника меняются,что должно приводить к уменьшению прямоугольника. и судя по этим рассуждениям из указанных четырех строк можно обойтись всего двумя. В чем же подвох подскажите.
Ответы (1 шт):
Ты закрашиваешь прямоугольник поверх предыдущего не очищая экран. Если попробуешь рисовать увеличивая размер прямоугольника, увидишь, что он отрисовывается правильно. Так же если поменяешь цвет отрисовки на каждом шагу.
Всё что тебе нужно сделать, чтобы исправить код - это очистить экран. Например так:
public void paintComponent(Graphics g){
g.clearRect(0,0, getWidth(), getHeight());
g.setColor(Color.blue);
g.fillRect(x,y,500 - x*2,500 - y*2);
}