• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - Rysowanie w pętli while (Swing)

Object Storage Arubacloud
0 głosów
402 wizyt
pytanie zadane 4 maja 2018 w Java przez Paweł Celuch Początkujący (420 p.)
class GuiShow extends JPanel {

         Timer timer = new Timer(1000, new MyTimerActionListener());
         double x = 0;

         double y = 0;


         int xPoly[] = {100, 130, 100};
         int yPoly[] = {510, 500, 490};

         Polygon poly = new Polygon(xPoly, yPoly, 3);


         JPanel panel = new JPanel();
         BufferedImage img = null;


         double R = 3.1415926 / 180.0;
         double vx, vy, t = 0.0;
         double dt = 0.003;
         double eps = 0.01;
         double c = 0.7;

         double g = 9.81;












         public void paintComponent(Graphics g) {

//            try {
//             img = ImageIO.read(new File("arrow-31.png"));
//            } catch (IOException e) {
//                System.out.println("Błąd odczytu pliku");
//            }

             super.paintComponent(g);
             Graphics2D g2d = (Graphics2D) g;


             g2d.setColor(Color.RED);

             g2d.draw(new Line2D.Double(x + 10, y + 500, x, y + 500));


//          g2d.drawPolygon(poly);
//          poly.translate(1,1);


             timer.start();
             try{
                 Thread.sleep(10);

             }catch (InterruptedException e){
                 timer.stop();
             }

         }

         double alfaVX(double v, double alfa){
             double co = Math.cos(R * alfa);

             vx = v * co;


             return vx;
         }

         double alfaVY(double v, double alfa){

             double si = Math.sin(R * alfa);

             vy = v * si;

             return vy;
         }

         public void simulate(double vx, double m, double vy) throws InterruptedException {

             double r = c / m;

//             System.out.println("czas (s)             x (m)           y (m)  ");

             int n = 0;

             while (y > -eps) {
//                 if (!(n % 10 == 0)) {
//                     System.out.println(t + " " + x + " " + y);
//                 }


                 vx = vx - r * vx * dt;
                 vy = vy - g * dt - r * vy * dt;
                 x = x + vx * dt - 0.5 * r * vx * dt * dt;
                 y = y + vy * dt - 0.5 * g * dt * dt + 0.5 * r * vy * dt * dt;

                 t = t + dt;
                 n = n+1;
                 repaint();
                System.out.println(vx + " " + vy);

             }


         }


         class MyTimerActionListener implements ActionListener {
             public void actionPerformed(ActionEvent evt) {

                 try {
                     simulate(alfaVX(30,30), 30, alfaVY(30,30));

                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
     }

Mam taki problem, że chciałbym rysować kreskę po każdym przejściu pętli while. Ale wyświetla się na ekranie tylko ostatni wynik jak już cała pętla się wykona. Co trzeba zmienić by to zaczęło działać jak należy?

1 odpowiedź

0 głosów
odpowiedź 4 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
Możesz np dodać współrzędne, gdzie chcesz rysować linie do np Seta czy Listy i potem przeiterować po każdym elemencie i narysować go.
komentarz 4 maja 2018 przez Paweł Celuch Początkujący (420 p.)
Potem i tak trzeba zrobić jakaś pętle by to przeszło i wychodzi ten sam błąd. Pokazuje tylko pierwszy punkt i ostatni .

Podobne pytania

0 głosów
1 odpowiedź 497 wizyt
pytanie zadane 24 maja 2018 w Java przez Paweł Celuch Początkujący (420 p.)
0 głosów
2 odpowiedzi 155 wizyt
pytanie zadane 14 października 2016 w Java przez Maciek Gamrot Bywalec (2,830 p.)
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 28 czerwca 2020 w Java przez manager96 Bywalec (2,050 p.)

92,572 zapytań

141,422 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...