Рамка рисования Java: обновляется? - PullRequest
0 голосов
/ 01 мая 2018

просто предисловие, я очень новичок в Java. Так что ждите глупых ошибок.

Я пытаюсь сделать проект с помощью панели рисования Java в BlueJ, и я не могу понять, как создать программу с движущимся объектом. Это проект, поэтому код предоставляется. Мы должны изменить его так, как нам хочется. Мы не можем добавлять другие пакеты.

Я знаю, что это связано с каким-то циклом, но я делаю какую-то ошибку, когда просто печатаю тонну кругов, а не новый тип каждый раз, когда я нажимаю кнопку Обновить. Вот код.

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

public class DrawingPanel extends JPanel {
  public void paintComponent(Graphics g)
  {
   // clear screen
    g.setColor(Color.white);
    g.clearRect(0,0,500,500);
    {
      System.out.printf("Spring Design Barker Spring 2018%n");
      int x = 125;
      int y = 125;
      int w = 50;
      int h =80;
      int b = 50;
      int rd = 255 ;    
      int gn = 255 ;    
      int bl = 0 ;
      Circle c1,c2;
      Rectangle r1,r2;
      Triangle t1,t2;
      Color clr1,c;
      clr1 = new Color(rd,gn,bl);  
      r1 = new Rectangle(x,y,w,h,clr1);
      clr1 = new Color(106,96,200);  
      t1=new Triangle(x,y,w,h,clr1);
      clr1 = new Color(220,15,15);  
      c1=new Circle(x,25,25,clr1);
      r1.draw(g);      /*display the rectangle  */
      t1.draw(g);      /*display the triangle  */
      c1.draw(g);      /*display the circle  */
      t1.setH(-h);      /*display the triangle  */
      t1.setColor(new Color(15,220,15));      /*display the triangle  */
      t1.draw(g);      /*display the triangle  */

      x=200;
      y=200;
      for(int k=0;k<9;k++)
       {
         c=new Color(255-k*20,0+k*15,0+k*25);   // vary color
         c1=new Circle(200,10 * k,50,c);
         c1.draw(g);      /*display the new circle  */
       }
      //c=new Color(0,255,0);   // change paint in can to green
      //c2=new Circle(300,50,10,c);
      //c2.draw(g);      /*display the new circle  */
    }
  }
}

1 Ответ

0 голосов
/ 01 мая 2018

Ошибка в том, что вы рисуете круг снова и снова. Каждый раз, когда код в цикле выполняется, рисуется новый круг . Вы должны понимать, что когда вы рисуете круг, вы на самом деле не перерисовываете тот же круг, а рисуете новый круг. Я понимаю, что вы хотите сделать, это сделать круг движущимся. Вы можете сделать это, запустив весь этот метод снова и снова. Я предпочитаю делать это с помощью Swing Timer . Это способ запустить цикл, вызывая метод paintComponent () простыми словами.

Я действительно работаю над чем-то и использую эту библиотеку для отображения графики. Единственное, что мне не нравится в этом, это то, что использует много процессора . Может быть, есть лучший способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...