Forum: PC-Programmierung Java - Funktionsgraph zeichnen


von Samuel J. (capstrovor)


Lesenswert?

Hallo

Ich versuche gerade mit Java einen Funktionsgraphen zu zeichnen. Dazu 
habe ich eine Methode "getY" die mir zu einem x Wert den passenden 
y-Wert zurückgibt. Jetzt wollte ich jeden Punkt einzeln mit einer 
while-Schleife zeichnen lassen. Allerdings wird immer nur der letzte 
Punkt gezeichnet. Es sieht so aus, als würde bei jedem Durchgang der 
while-Schleife alles von der while-Schleife gelöscht. Allerdings wird 
das Koordinatensystem nicht gelöscht, eben nur die Punkte aus der 
while-Schleife...
Wo liegt da das Problem?

Code der paintComponent()

protected void paintComponent(Graphics g)
    {
      super.paintComponent(g);

      g.drawLine(0, 255, 1800, 255);
      g.drawLine(400, 0, 400, 540);

      do
      {
        g.drawLine(x, fn.getY(x), x, fn.getY(x));
        x++;
      } while(x<50);
    }

(fn ist ein Objekt der Klasse mit der Methode getY(x))

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

XOR-Mode aktiv?

Siehe Doku zu Graphics.setXORMode etc.

von Samuel J. (capstrovor)


Lesenswert?

Soll er avtikiert oder deaktiviert sein?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Poste doch mal bitte den kompletten Code... Wozu eine While Schleife 
wenn du effektiv ein for schleife nachbildest? Wo Ist x definiert, Hast 
du die Rückgabe von fn geprüft und warum berechnest du den Wert 2x,... 
und und und...

von Vlad T. (vlad_tepesch)


Lesenswert?

müsste es nicht eher irgendwie heißen:
1
for(x=0; x<50; ++x){
2
  g.drawLine(x, fn.getY(x), x+1, fn.getY(x+1));
3
}

wie sieht denn eine Linie aus, die ich von einem Punkt zu sich selbst 
zeichne? Ich würde da gar nix malen.

von Mark B. (markbrandis)


Lesenswert?

Vlad Tepesch schrieb:
> müsste es nicht eher irgendwie heißen:
>
1
> for(x=0; x<50; ++x){
2
>   g.drawLine(x, fn.getY(x), x+1, fn.getY(x+1));
3
> }
4
>
>
> wie sieht denn eine Linie aus, die ich von einem Punkt zu sich selbst
> zeichne? Ich würde da gar nix malen.

Das wird's wohl sein. Eine Linie von (x,y) nach (x,y) ist halt nicht so 
prickelnd, eben ein Punkt. Von (x1, y1) nach (x2, y2) wird's da schon 
spannender.

von Karl H. (kbuchegg)


Lesenswert?

Und dann gibts da auch noch den Fall, dass in
1
protected void paintComponent(Graphics g) {
2
  super.paintComponent(g);
3
  g.drawLine(0, 255, 1800, 255);
4
  g.drawLine(400, 0, 400, 540);
5
  do
6
  {
7
    g.drawLine(x, fn.getY(x), x, fn.getY(x));
8
    x++;
9
  } while(x<50);
10
}

x schon mal grundsätzlich einen Wert größer/gleich 50 hat, wenn die 
Funktion betreten wird. Auch in diesem Fall wird nur der letzte Punkt 
gemalt und der Fall könnte ganz leicht auftreten, wenn diese Funktion 
mehrmals aufgerufen wird.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Karl Heinz schrieb:
> wenn diese Funktion mehrmals aufgerufen wird.

Davon ist auszugehen... das wird nämlich vom Zeichenthread aufgerufen. 
Deshalb schrieb ich ja den Tatsächlichen Code zu posten und nicht solche 
Bruchstücke....

von Hans J. (step_up_mosfet)


Lesenswert?

Ich habe dazu die Paint-Methode überschrieben damit das JPanel nicht 
automatisch neu gezeichnet wird.

Erstelle mal eine Paint() Methode in deiner Klasse die dein System 
zeichnet, dann hast du die volle Kontrolle darüber war gezeichnet wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.