Pregunta

Dibujo muchos polígonos triangulares y almacenarlo en la lista enlazada. Mi problema es que, cuando se almaceno el dibujo en un archivo de Bloc de notas, los datos no se puede leer (símbolo raro). Cuando intento imprimir usando println la salida es como esta java.awt.Polygon@1d6096.

Cómo almacenar la coordenada del polígono en el Bloc de notas?

... 
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");
  }
}

EDITADO:

He intentado todas las sugerencias, pero todavía no puedo conseguido que la salida como la siguiente. He probado el "PrintStream", así, pero no puedo resolver el problema. Ayúdame, por favor, mi cabeza es tan pesado con esto: - (

Dibujo los triángulos, hacer cambios, y almacenarlo en la lista enlazada. Después de dibujo terminado, y hacer cambios, hago clic en el botón Guardar y guarde en Notepad.txt con la esperanza de que voy a obtener la salida en el Bloc de notas como esta:

40 60 50 Esta línea representa vértices Xs de triángulo 1
40 40 50 Esta línea representa vértices Ys de triángulo 1

60 80 70 triángulo 2
60 60 70

100 120 110 triángulo 3
100 100 110

¿Fue útil?

Solución

En realidad nadie ha escrito la forma más sencilla absoluta para hacer esto, así que aquí va.

Tome un Polygon p, la salida de una cadena que representa las coordenadas X / Y de p (suponiendo p tiene por lo menos 1 punto) de la forma "(X1 Y1, Y2 x2, 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(")");

Otros consejos

Si lo que desea es almacenar las coordenadas, y sólo quiero escribir de una manera (en el archivo), entonces debería escribir un método de reemplazo en su Polígono:

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

o algo similar.

Por supuesto, los datos son ilegibles. Se trata de "datos", no "texto". Hay que leer el archivo de nuevo con la clase ObjectInputStream. Utilice el método `readObject (); Este método devuelve un objeto. Por supuesto que hay que echarlo en esta forma:

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

Creo que sólo desea guardar el triángulo para seguir trabajando con él después de cerrar el programa.

Comienzo con un caso de prueba.

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());
    }
}

Estoy asumiendo aquí que está utilizando la clase Polygon AWT. Esta prueba falla, porque la clase Polígono de AWT no anula el comportamiento predeterminado. Pero polígono tiene un montón de cosas buenas en lo que no quiere perder (tal vez), por lo que añadir el nuevo comportamiento que queremos (un método toString ()), vamos a cambiar esto un poco:

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());
    }
}

Esto no tiene ni siquiera compilar, porque la clase Triángulo no existe todavía. Así que vamos a crear (estoy usando Eclipse; voy a correr QuickFix para crear la clase para mí):

import java.awt.Polygon;

public class Triangle extends Polygon {

}

Y ahora la prueba compila, pero no como antes. Así que vamos a escribir el método toString ():

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();
    }
}

y ahora pasa la prueba.

Tenga en cuenta que he cambiado el formato de un poco de lo que solicitó, porque creo que es probable que desee ser capaz de distinguir entre el punto (5, 17) y el punto (51, 7).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top