addpoint() bei Polyline?

Status
Nicht offen für weitere Antworten.

SirGawain

Mitglied
Hallo,

Ich will ein Polyline zeichnen, und seine Punkte mit addPoint bestimmen.
Ich weiß zwar wie das mit einem Polygon geht, und zwar indem man ein Objekt der Klasse Polygon erstellt, und dann einfach "Objekt.addPoint(int, int);" und "drawPolygon(Objekt);".
Allerdings geht das scheinbar nicht mit einem Polyline. Ich hab auch schon versucht das Objekt von der Klasse Polyline zu erstellen, aber die gibts nicht.
Also wie soll ich sonst die Punkte eines Polyline's mit addPoint() bestimmen?
(ich weiß dass es auch über den arrays geht, aber ich will per Tastendruck Punkte hinzufügen können, und das geht ja nur mit addPoint() ).


mfg gawain
 
B

Beni

Gast
Schreib doch selbst eine solche Klasse. Die dürfte nicht so schwierig sein: beinhaltet 2 Arrays, eine Methode addPoint, und eine Methode um sich zu zeichnen.

Code:
public class MyPolyline{
  private int[] x, y;   // Points
  private int points;  // Anzahl Points

  public void paint( Graphics g ){
    g.drawPolyline( x, y, ponts );  //oder so ähnlich
  }

}

Und so zeichnen:
Code:
public void paint( Graphics g ){
  MyPolyline mp = ...
  mp.paint( g );
}

mfg Beni
 

SirGawain

Mitglied
Sry, aber ich bin ziemlicher Java-N00b, und kapiers immer noch nicht so ganz.
Wie mach ich denn jetzt die methode addPoint in MyPolyline ?
Was muss ich den den rumph schreiben?

mfg gawain
 
B

Beni

Gast
Ich würde das ungefähr so schreiben:
Code:
public class Polyline{
  private int[] xPoints;  // x-Koordinaten
  private int[] yPoints;  // y-Koordinaten
  private int nPoints = 0;  // Anzahl Punkte

  public Polyline( int size ){
    // Konstruktor mit der geschätzten Anzahl Punkte
    xPoints = new int [size];
    yPoints = new int [size];
  }

  public void paint( Graphics g ){
    // Die Polyline zeichnen
    g.drawPolyline( xPoints, yPoints, nPoints );
  }


  public void addPoint( int x, int y ){
    // einen Punkt hinzufügen.

    if( nPoints == xPoints.length ){
      // sollten die Arrays zu klein sein: Arrays vergrössern.
      xPoints = expand( xPoints );
      yPoints = expand( yPoints );
    }

    // hinzufügen des Punktes
    xPoints[ nPoints ] = x;
    yPoints[ nPoints ] = y;

    // Anzahl Punkte um 1 erhöhen
    nPoints++;
  }

  protected static int[] expand( int[] original ){
    // den array "original" in einen doppelt so grossen Array kopieren, und diesen neuen Array zurückgeben.
    int length = original.length;

    int[] array = new int[ length*2 + 1 ];

    for( int i = length-1; i>0; i-- )
      array[i] = original[i];

    return array;
  }
}

Ein neuer Punkt wird an die erste noch nicht gefüllte Stelle der Arrays gesetzt.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben