Frage

Ich ziehe viele Dreieck Polygone und speichern sie in verlinkte Liste. Mein Problem ist, dass, wenn ich die Zeichnung in einer Editor-Datei speichern, die Daten nicht lesbar sind (komisch Symbol). Wenn ich versuche, drucken es die Ausgabe mit println ist wie diese java.awt.Polygon@1d6096.

Wie ist die Koordinate des Polygons im Editor?

... 
java.util.List<Polygon> triangles = new LinkedList<Polygon>();
String pathname = "eyemovement.txt";
...
int[] xs = { startDrag.x, endDrag.x, midPoint.x };
int[] ys = { startDrag.y, startDrag.y, midPoint.y }; 
triangles.add(new Polygon(xs, ys,3));

...
public void actionPerformed(ActionEvent e) {
   if(e.getSource() == saveBtn){
      try {
      FileOutputStream fos = new FileOutputStream(pathname);
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeObject(triangles);
      oos.flush();
      oos.close();
      fos.close();
  }
  catch (Exception ex) {
    System.out.println("Trouble writing display list vector");
  }
}

EDITED:

Ich habe alle Vorschläge versucht, aber ich kann immer noch nicht gelungen, die Ausgabe als Folgendes zu erhalten. Ich habe die „Printwriter“ auch versucht, aber ich kann nicht das Problem gelöst. Helfen Sie mir, bitte, mein Kopf ist so schwer, mit dieser: - (

ich die Dreiecke zeichnen, Änderungen vornehmen und speichern sie in verlinkte Liste. Nach fertige Zeichnung und Änderungen vornehmen möchten, klicken Sie auf I-Taste speichern und in NOTEPAD.TXT hoffnungs speichern, dass ich die Ausgabe in Editor wie folgt erhalten:

40 60 50 Diese Linie stellt Eckpunkte Xs des Dreiecks 1 | 40 40 50 Diese Linie repräsentiert Eckpunkten des Dreiecks Ys 1

60 80 70 Dreieck 2
60 60 70

100 120 110 Dreieck 3
100 100 110

War es hilfreich?

Lösung

Niemand geschrieben tatsächlich den absoluten einfachste Weg, dies zu tun, so ist es hier geht.

Nehmen Sie ein Polygon p, Ausgang eine Zeichenfolge, die die x / y-Koordinaten des p (vorausgesetzt p mindestens 1 Punkt) in der Form "(x1 y1, x2 y2, x3 y3, ...)":

System.out.print("(" + p.xpoints[0] + p.ypoints[0]);
for (int i = 0; i < p.npoints; i++) {
  System.out.print(", " + p.xpoints[i] + " " + p.ypoints[i]);
}
System.out.println(")");

Andere Tipps

Wenn Sie nur wollen Koordinaten speichern, und wollen nur einen Weg (in die Datei) schreiben, dann sollten Sie eine Überschreibung Methode auf dem Polygon schreiben:

String toString() {
  return this.x + ", " + this.y;
}

oder etwas ähnliches.

Natürlich sind die Daten nicht lesbar. Es ist "Data", nicht "Text". Sie haben die Datei wieder mit der ObjectInputStream Klasse zu lesen. Verwenden Sie die Methode `readObject- (); Diese Methode gibt ein Objekt. Natürlich können Sie es auf diese Weise zu werfen haben:

Object o = ois.readObject(); // ois is the ObjectInputStream
List<Polygon> list = new ArrayList<Polygon>((List) o));

Ich glaube, Sie nur das Dreieck speichern wollen mit ihm weiterarbeiten, nachdem Ihr Programm zu schließen.

Ich beginne mit einem Testfall.

import java.awt.Polygon;

import junit.framework.TestCase;

public class PolygonTest extends TestCase {
    public void testToString() throws Exception {
        Polygon polygon = new Polygon();
        polygon.addPoint(0, 1);
        polygon.addPoint(1, 1);
        polygon.addPoint(1, 0);
        assertEquals("(0,1;1,1;1,0)", polygon.toString());
    }
}

Ich gehe davon aus, dass Sie hier die AWT-Polygon-Klasse verwenden. Dieser Test schlägt fehl, weil AWTs Polygon-Klasse nicht das Standardverhalten außer Kraft setzen. Aber Polygon hat viele gute Sachen in der es Sie nicht wollen, (vielleicht) zu verlieren, also das neue Verhalten fügen wir (a toString () -Methode) möchten, lassen Sie uns diese Änderung nur ein wenig:

import java.awt.Polygon;

import junit.framework.TestCase;

public class PolygonTest extends TestCase {
    public void testToString() throws Exception {
        Polygon polygon = new Triangle();
        polygon.addPoint(0, 1);
        polygon.addPoint(1, 1);
        polygon.addPoint(1, 0);
        assertEquals("(0,1;1,1;1,0)", polygon.toString());
    }
}

Dies ist nicht einmal kompilieren, weil die Triangle-Klasse noch nicht existiert. So machen sie es schaffen (ich verwende Eclipse, ich QuickFix laufen würde die Klasse für mich erstellen):

import java.awt.Polygon;

public class Triangle extends Polygon {

}

Und nun der Test kompiliert, aber nicht wie zuvor. So wollen wir die Methode toString () schreiben:

import java.awt.Polygon;

public class Triangle extends Polygon {
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("(");
        for (int i = 0; i < npoints; i++) 
            sb.append(String.format("%s,%s;", xpoints[i], ypoints[i]));
        sb.deleteCharAt(sb.length() - 1); // get rid of the final semicolon
        sb.append(")");
        return sb.toString();
    }
}

und nun der Test bestanden wird.

Beachten Sie, dass ich das Format geändert ein wenig von dem, was Sie gebeten, weil ich denke, Sie wahrscheinlich zwischen dem Punkt (5, 17) und dem Punkt (51, 7) in der Lage sein zu unterscheiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top