Вопрос

Я рисую многоугольные треугольники и сохраняю их в Связанном списке.Моя проблема в том, что, когда я сохраняю рисунок в файле Блокнота, данные нечитаемы (странный символ).Когда я пытаюсь распечатать его с помощью println, результат выглядит следующим образом java.awt.Polygon@1d6096.

Как сохранить координату многоугольника в Блокноте?

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

ОТРЕДАКТИРОВАННЫЙ:

Я перепробовал все предложения, но по-прежнему мне не удается получить следующий результат.Я также пробовал "Printwriter", но я не могу решить проблему.Помогите мне, пожалуйста, у меня так отяжелела голова от этого :-(

Я рисую треугольники, вношу изменения и сохраняю их в Связанном списке.После завершения рисования и внесения изменений я нажимаю кнопку сохранить и сохраняю его в Notepad.txt с надеждой, что я получу вывод в Блокноте, подобный этому:

40 60 50 эта линия представляет вершины Xs треугольника 1
40 40 50 эта линия представляет вершины Ys треугольника 1

60 80 70 треугольник 2
60 60 70

100 120 110 треугольник 3
100 100 110

Это было полезно?

Решение

На самом деле никто не опубликовал абсолютно простой способ сделать это, так что вот оно.

Возьмите Polygon p, вывести строку , представляющую координаты x /y p (предполагая p имеет не менее 1 точки) вида "(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(")");

Другие советы

Если вы просто хотите сохранить координаты и хотите записать только одним способом (в файл), то вам следует написать метод переопределения для вашего полигона:

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

или что-то подобное.

Конечно, данные нечитаемы.Это "Данные", а не "Текст".Вы должны прочитать файл еще раз с помощью ObjectInputStream класс.Используйте метод `readObject();Этот метод возвращает объект.Конечно, вы должны использовать его таким образом:

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

Я думаю, вы просто хотите сохранить треугольник, чтобы продолжить работу с ним после закрытия вашей программы.

Я начинаю с тестового примера.

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

Я предполагаю здесь, что вы используете класс awt Polygon .Этот тест завершается неудачей, поскольку класс Polygon awt не переопределяет поведение по умолчанию.Но в Polygon есть много хорошего, что вы не захотите потерять (возможно), поэтому, чтобы добавить новое поведение, которое мы хотим (метод toString()), давайте немного изменим это:

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

Это даже не компилируется, потому что класс Triangle еще не существует.Итак, давайте создадим его (я использую eclipse;Я запущу QuickFix, чтобы создать класс для меня):

import java.awt.Polygon;

public class Triangle extends Polygon {

}

И теперь тест компилируется, но, как и раньше, завершается с ошибкой.Итак, давайте напишем метод 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();
    }
}

и вот тест пройден.

Обратите внимание, что я немного изменил формат по сравнению с тем, что вы просили, потому что, я думаю, вы, вероятно, хотите иметь возможность различать точку (5, 17) и точку (51, 7).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top