Repaint Frage, Design Frage

Ditges1983

Neues Mitglied
Hallo Zusammen,

ich will ein Programm schreiben, das nach Übermittlung von X-Y Koordinaten eine Struktur gleich eines zerbrochenenen Glases zeichnet (Bitte fragt nicht wofür 😉 )
hat jemand von euch eine Idee, wie ich meine mageren Striche (könnt den Code gerne ausführen) optisch verbessern kann, dachte da zB an teilweise Dickere Striche um eine Verästelung hinzukriegen etc..wär euch sehr dankbar....

jetz noch eine eher triviale Frage (hoffe ich)..ich führe die repaint Funktion innerhalb einer endlos-Schleife aus....der erste Parameter soll dabei eine milisekunde sein, doch egal wie ich die Zahl änder, der zeichnet einfach volle Pulle 🙁 ...jemand ne Idee?

Vielen Dank für eure Hilfe nun zum Code:

Klasse Peach :
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


/**
 *
 * @author Thomas
 */
public class Peach extends JPanel {

    int xtrack;
    int ytrack;

   public void getc(int x,int y)
   {
   this.xtrack=x;
   this.ytrack=y;
   }


    public void paintComponent(Graphics g)
    {
        this.setBackground(Color.WHITE);
g.setColor(Color.DARK_GRAY  );



int zufallz=200;

int zufall1;
int zufall2;
int zufall3;



 zufall1=(int) ((Math.random()*zufallz)+1);         //40 veränderbar, kucken was am besten aussieht 40 =maximale veränderbarkeit
 zufall2=(int) ((Math.random()*zufallz)+1);


 zufall3=(int) ((Math.random()*4)+1);


if(zufall3==1){g.setColor(Color.GRAY);}
if(zufall3==2){g.setColor(Color.BLACK);}
if(zufall3==3){g.setColor(Color.BLUE);}





g.drawLine(xtrack,ytrack,xtrack+zufall1,ytrack+zufall2);           //20 und 40 unsere x,y Koordinaten (getrackt)
g.drawLine(xtrack+zufall1,ytrack+zufall2,xtrack+zufall1,ytrack+zufall2);




zufall1=(int) ((Math.random()*zufallz)+1);
zufall2=(int) ((Math.random()*zufallz)+1);

 zufall3=(int) ((Math.random()*4)+1);




if(zufall3==1){g.setColor(Color.GRAY);}
if(zufall3==2){g.setColor(Color.BLACK);}
if(zufall3==3){g.setColor(Color.BLUE);}



g.drawLine(xtrack,ytrack,xtrack+zufall1,ytrack+zufall2);
g.drawLine(xtrack+zufall1,ytrack+zufall2,xtrack+zufall1,ytrack+zufall2);




zufall1=(int) ((Math.random()*zufallz)+1);
zufall2=(int) ((Math.random()*zufallz)+1);


 zufall3=(int) ((Math.random()*4)+1);





if(zufall3==1){g.setColor(Color.GRAY);}
if(zufall3==2){g.setColor(Color.BLACK);}
if(zufall3==3){g.setColor(Color.BLUE);}

g.drawLine(xtrack,ytrack,xtrack+zufall1,ytrack+zufall2);
g.drawLine(xtrack+zufall1,ytrack+zufall2,xtrack+zufall1,ytrack+zufall2);


zufall1=(int) ((Math.random()*zufallz)+1);
zufall2=(int) ((Math.random()*zufallz)+1);


 zufall3=(int) ((Math.random()*4)+1);





if(zufall3==1){g.setColor(Color.GRAY);}
if(zufall3==2){g.setColor(Color.BLACK);}
if(zufall3==3){g.setColor(Color.BLUE);}

g.drawLine(xtrack,ytrack,xtrack+zufall1,ytrack+zufall2);
g.drawLine(xtrack+zufall1,ytrack+zufall2,xtrack+zufall1,ytrack+zufall2);



    }


}


Klasse Main:

Code:
import java.awt.Color;
import javax.swing.*;










public class Main {


    public static void main(String[] args) {

    float xt=210;
    float yt=200;


    JFrame f=new JFrame("Glaspatch");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Peach p=new Peach();
    f.add(p);
    p.getc((int)xt,(int)yt);
    f.setSize(1024,1024);
    f.setVisible(true);
    f.setBackground(Color.white);
    while(true==true)
    {
    f.repaint(200000, (int)xt, (int)yt, 1024, 1024);
    }


    }

}
 
repaint mit Zeitparameter kenne ich gar nicht so genau,
in jedem Fall wäre es schlecht, das mit einer Endlosschleife Millionenfach pro Sekunde aufzurufen,
selbst wenn man Anfang 20 sec gewartet wird, spätestens dann könnte doch zu jedem Zeitpunkt gemalt werden wenn man alle Events vedenkt

sicher möchtest du sowas:
Java:
while(true) {
  f.repaint();
  Thread.sleep(20000); // 20 sec warten, dann wieder EINMAL repaint() aufrufen
}
 
Die Dokumentation sagt zu repaint mit Zeitparameter:
Code:
tm - maximum time in milliseconds before update
Es handelt sich also um eine obere Grenze für das neuzeichnen, keinesfalls um eine untere Beschränkung. Eine Lösung hat SlaterB ja schon gepostet.

Noch eine Anmerkung, Java Code bitte beim nächsten mal in Java Tags schreiben nicht in Code (C) Tags (im Editor die Java Tasse). Dann gibts auch Syntax Highlighting
 

Zurück
Oben