Pergunta

I chamar muitos polígonos triângulo e armazená-lo na lista encadeada. Meu problema é que, quando eu armazenar o desenho em um arquivo de bloco de notas, os dados são ilegíveis (símbolo estranho). Quando tento imprimi-lo usando println a saída é assim java.awt.Polygon@1d6096.

Como armazenar a coordenada do polígono no bloco 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:

Eu tentei todas as sugestões, mas ainda não posso conseguiu chegar a saída como a seguinte. Eu tentei o "PrintWriter", bem como, mas eu não posso resolver o problema. Ajuda-me, por favor, minha cabeça é tão pesado com este: - (

Eu desenho os triângulos, fazer alterações, e armazená-lo na lista encadeada. Após desenho acabado, e as mudanças make, eu clique no botão Salvar e salve-o em Notepad.txt com esperança de que vou obter a saída no bloco de notas como esta:

40 60 50 esta linha representa vértices do triângulo Xs 1 | 40 40 50 esta linha representa vértices de triângulo Ys 1

60 80 70 triângulo 2 | 60 60 70

100 120 110 triângulo 3
100 100 110

Foi útil?

Solução

Ninguém realmente postou a maneira mais simples absoluta para fazer isso, então aqui vai.

Dê uma Polygon p, saída de uma string representando os X / Y coordenadas de p (assumindo p tem pelo menos 1 ponto) da forma "(y1 x1, 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(")");

Outras dicas

Se você quiser apenas para armazenar coordenadas, e só quero escrever de uma maneira (para o arquivo), então você deve escrever um método de substituição em seu Polygon:

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

ou algo similar.

É claro que os dados são ilegíveis. É "Data", não "Texto". Você tem que ler o arquivo novamente com a classe ObjectInputStream. Usar o método `readObject (); Este método devolve um objecto. Claro que você tem para lançá-lo neste caminho:

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

Eu acho que você só quer salvar o triângulo de continuar a trabalhar com ele depois de fechar o seu programa.

Eu começo com um caso de teste.

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

Estou assumindo aqui que você está usando o awt classe Polygon. Este teste falhar, porque a classe Polygon de awt não substituir o comportamento padrão. Mas Polygon tem muitas coisas boas nele você não quer perder (talvez), de modo a adicionar o novo comportamento que queremos (um método toString ()), vamos mudar isso um pouco:

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

Este nem sequer compilar, porque a classe Triangle ainda não existe. Então, vamos criá-lo (estou usando o eclipse, eu vou correr QuickFix para criar a classe para mim):

import java.awt.Polygon;

public class Triangle extends Polygon {

}

E agora os compila teste, mas não como antes. Então, vamos escrever o 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();
    }
}

e agora o teste passa.

Note que eu mudei o formato um pouco do que você pediu, porque eu acho que você provavelmente vai querer ser capaz de distinguir entre o ponto (5, 17) e o ponto (51, 7).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top