Vektor-Grafik im XML-Format speichern

Status
Nicht offen für weitere Antworten.

Pasche

Bekanntes Mitglied
Wie kann ich am einfachsten einen Vektor in einer Datei speichern ? Am besten direkt in einer XML Datei. Bis jetzt habe ich immer nur Speichervorgänge für GIF oder JPEG Dateien gefunden :-(
 

foobar

Top Contributor
Hier ist ein kleines Beispiel, bei dem ein Vector von Mitarbeiterobjekten in einer Xmldatei gespeichert wird:
Code:
package xmldemo;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;

import org.w3c.dom.Node;
import org.w3c.dom.Text;



public class XMLOutDemo 
{
	private String filename;
	private Vector v_data;
	private Document doc;
	public XMLOutDemo()
	{
		this.v_data = this.get_dummy_data();
		this.filename  = "/home/steffen/xmlout.xml";
		this.doc   = this.get_new_document();
		this.build_document();
		this.save_document();
		System.out.println("fertig");
	}
	
	private void build_document()
	{
		
		Node no_adrverw    = this.doc.createElement("adressenverwaltung");
		
		
		Iterator it = this.v_data.iterator();
		while (it.hasNext())
		{
			Mitarbeiter mit = (Mitarbeiter)it.next();
			Node no_adresse = this.doc.createElement("adresse");
						
			Node no_vor     = this.doc.createElement("vorname");
			Text te_vor 	= this.doc.createTextNode(mit.getVorname());
			Node no_nach    = this.doc.createElement("nachname");
			Text te_nach 	= this.doc.createTextNode(mit.getNachname());
			Node no_url     = this.doc.createElement("urlaub");
			Text te_url 	= this.doc.createTextNode(mit.getUrlaub());
			Node no_abt     = this.doc.createElement("abteilung");
			Text te_abt 	= this.doc.createTextNode(mit.getAbteilung());
			Node no_bon     = this.doc.createElement("bonus");
			Text te_bon 	= this.doc.createTextNode(String.valueOf(mit.getBonus()));
			Node no_sta     = this.doc.createElement("status");
			Text te_sta 	= this.doc.createTextNode(mit.getStatus());
			Node no_geh     = this.doc.createElement("gehalt");
			Text te_geh 	= this.doc.createTextNode(mit.getGehalt());
			
			no_vor.appendChild(te_vor);
			no_nach.appendChild(te_nach);
			no_url.appendChild(te_url);
			no_abt.appendChild(te_abt);
			no_bon.appendChild(te_bon);
			no_sta.appendChild(te_sta);
			no_geh.appendChild(te_geh);
						
			no_adresse.appendChild(no_vor);
			no_adresse.appendChild(no_nach);
			no_adresse.appendChild(no_url);
			no_adresse.appendChild(no_abt);
			no_adresse.appendChild(no_bon);
			no_adresse.appendChild(no_sta);
			no_adresse.appendChild(no_geh);
			no_adrverw.appendChild(no_adresse);
		}
		
		this.doc.appendChild(no_adrverw);
	}
	
	private Vector get_dummy_data()
	{
		Vector vec = new Vector();
		vec.addElement(new Mitarbeiter("vorname 1","nachname 1"));
		vec.addElement(new Mitarbeiter("vorname 2","nachname 2"));
		vec.addElement(new Mitarbeiter("vorname 3","nachname 3"));
		return vec;
	}
	
	private Document get_new_document()
	{
		Document doc = null;
		try 
		{
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder  = factory.newDocumentBuilder();
			doc = builder.newDocument();
		} 
		catch (Exception e) {e.printStackTrace();}
		return doc;
	}
	
	private void save_document()
	{	
		try
		{
			Transformer transformer = TransformerFactory.newInstance().newTransformer();
			DOMSource        source = new DOMSource( this.doc );
			FileOutputStream os     = new FileOutputStream( new File(this.filename) );
			StreamResult     result = new StreamResult( os );
			transformer.transform( source, result );
		}
		catch(Exception e){}
	}

	public static void main(String[] args) 
	{
		new XMLOutDemo();	
	}
}
Code:
package xmldemo;
public class Mitarbeiter 
{
	private String vorname = "";
	private String nachname = "";
	private int mitarbeiter_nr;
	private String urlaub = "";
	private String abteilung = "";
	private float bonus = 0.0f;
	private String status = "";
	private String gehalt = "";
	
	public Mitarbeiter(String vorname , String nachname)
	{
		this.vorname = vorname;
		this.nachname = nachname;
	}
	
	public Mitarbeiter(float bonus , String nachname)
	{
		this.bonus 		  = bonus;
		this.nachname = nachname;
	}
	
	public Mitarbeiter()
	{
	}
	
	public String getAbteilung() {
		return abteilung;
	}

	public float getBonus() {
		return bonus;
	}

	public int getMitarbeiter_nr() {
		return mitarbeiter_nr;
	}

	public String getNachname() {
		return nachname;
	}

	public String getUrlaub() {
		return urlaub;
	}

	public String getVorname() {
		return vorname;
	}

	public void setAbteilung(String string) {
		abteilung = string;
	}

	public void setBonus(float f) {
		bonus = f;
	}

	public void setMitarbeiter_nr(int i) {
		mitarbeiter_nr = i;
	}

	public void setNachname(String string) {
		nachname = string;
	}

	public void setUrlaub(String string) {
		urlaub = string;
	}

	public void setVorname(String string) {
		vorname = string;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String string) {
		status = string;
	}

	public String getGehalt() {
		return gehalt;
	}

	public void setGehalt(String s) {
		gehalt = s;
	}

	public String toString()
	{
		return "Class Mitarbeiter: vorname "+this.getVorname() + " nachname " + this.getNachname() + " bonus " + this.getBonus();
	}

}
 

Pasche

Bekanntes Mitglied
Also ich habe ein gaaaanz tolles Malprogramm erstellt :roll: , bei dem alle gezeichneten Elemente in einem Vektor gespeichert werden. Jetzt möchte ich einfach nur eine Speichern / Laden Funktion einbauen, dass ein bereits gemaltes Bild wieder geladen werden kann. Eigentlich muss ich dann nur den Vektor speichern, oder liege ich da falsch ?
Muss aber halt unbedingt im XML Format sein. Und damit komme ich nicht so klar
 

foobar

Top Contributor
Guck dir den Code an den ich gepostet habe und lies die Dokumentation zu den der einzelnen Klassen. Anstatt einen Vector von Mitarbeiterobjekten zu speichern, arbeitest du eben mit einem Vector von Zeichenobjekten.
 

Pasche

Bekanntes Mitglied
Als Java Anfänger steige ich da ehrlich gesagt nicht durch. Das scheint mir irgendwie ein wenig zu umfangreich für meine Verhältnisse zu sein.

Ich brauche doch ganz einfach nur Vektor speichern / Vektor laden :cry:
 
R

Roar

Gast
ja, nur ist genau das was foobar geschrieben hat eine möglichkeit um einen vektor zu speichern in einer XML Datei. du musst halt nur anpassen dass anstatt Mitarbeiter deine objecte in den vektren gespeichert werden.
 

Pasche

Bekanntes Mitglied
ja ihr seid witzig. wie soll ich denn was anpassen, was ich überhaupt nicht verstehe ? :bahnhof:
 

Pasche

Bekanntes Mitglied
Wenn das Ganze nicht im XML Format sein müsste, gäbe es dann eine nicht so umfangreiche Möglichekeit den Vektor zu speichern und zu laden ?
 
R

Roar

Gast
1. wenn du uns nicht sagst was du nicht evrstehst könne nwir dir auch nix erklären...
2. höchstens per serialisierung (bäh)
 

Pasche

Bekanntes Mitglied
Ich kann das Beispiel nicht mal kompilieren. Mitarbeiter kann ich noch kompilieren, aber bei der anderen Klasse sagt er dann, dass er Mitarbeiter nicht kennt, obwohl es im gleichen Verzeichnis liegt. Keine Ahnung was das ist :(
 

Pasche

Bekanntes Mitglied
ich hab jetzt erstmal die demo ans laufen bekommen. jetzt weiß ich allerdings nicht wie ich das in mein Programm einbauen soll. Ich habe ja nicht verschiedene Objekte der gleichen Klasse in dem Vektor gespeichert, sondern viele Objekte verschiedener Klassen.

Da weiß ich nicht wie ich das unterbringen muss / soll / kann. hab jetzt meinen vektor mit den verschiedenen objekten....und nun ? :(
 
R

Roar

Gast
tja ich hoffe mal deine objekte leiten alle von einer oberklasse ab die entsprechende abstrakte methoden definiert, oder dass deine objekte alle ein interface implementieren welches entsprechende methoden defininiert.
 

Pasche

Bekanntes Mitglied
die klassen sehen in etwa so aus:

Code:
class Line implements Paintable
{
	int x, y, w, h;
	Color color;
	
	public Line( Color color, int x, int y, int w, int h )
	{
		this.color = color;
		this.x = x;
		this.y = y;
		this.w = w;
		this.h = h;
	}
	
	public void paint( Graphics g )
	{
	  	g.setColor( color );
	        g.drawLine( x, y, w, h );
	}
}

aber keine ahnung was ich damit anfangen soll :bahnhof:
 

foobar

Top Contributor
Ich hab deine Klasse mal etwas erweitert. Alles was du jetzt noch machen mußt, ist den DOMTree mit deinen Lineobjekten auf zu bauen. Falls du Probleme hast das Beispiel nach zu vollziehen lies die Dokumentation, da führt kein Weg dran vorbei.

Code:
Node no_x     = this.doc.createElement("x");
Text te_x    = this.doc.createTextNode(line.getX());

Code:
import java.awt.*;
public class Line implements Paintable 
{
	private int x, y, w, h;
	private Color color;
	public Line(Color color, int x, int y, int w, int h)
	{
		this.color = color;
		this.x = x;
		this.y = y;
		this.w = w;
		this.h = h;
	}
	public void paint( Graphics g )
	{
		g.setColor( color );
	    g.drawLine( x, y, w, h );
	} 
	public Color getColor()
	{
		return color;
	}
	public int getH()
	{
		return h;
	}
	public int getW()
	{
		return w;
	}
	public int getX()
	{
		return x;
	}
	public int getY()
	{
		return y;
	}
	public void setColor(Color color)
	{
		this.color = color;
	}
	public void setH(int i)
	{
		h = i;
	}
	public void setW(int i)
	{
		w = i;
	}
	public void setX(int i)
	{
		x = i;
	}
	public void setY(int i)
	{
		y = i;
	}
}
 

Pasche

Bekanntes Mitglied
ok, da werde ich mich mal schlau machen. aber eine frage habe ich da noch.
ich muss das ganze ja noch in mein programm einbauen. das speichern soll erstmal in meiner Klasse "ButtonPanel" bei einem Button hinterlegt werden. wie rufe ich das ganze dann auf ? Ich hätte gedacht, dass ich in der Klasse "PaintPanel", da wo mein Vektor existiert, eine Funktion save() anlege. Etwa so:

Code:
   public void save(){
	  new XMLOutDemo();
   }

jetzt müsste ich ja in dieser funktion auch noch das save_document() aus der XMLDemo aufrufen. aber wie mache ich das von hier ?
 

Pasche

Bekanntes Mitglied
Ich hab das ganze mal provisorisch in mein Programm integriert. Die Klasse XML Demo sieht dann wie folgt aus. Die Klasse Line habe ich von dir übernommen.

Code:
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;

import org.w3c.dom.Node;
import org.w3c.dom.Text;



public class XMLOutDemo
{
   private String filename;
   private Vector v_data;
   private Document doc;
   public XMLOutDemo()
   {
      this.v_data = PaintPanel.paints;
      this.filename  = "xmlout.xml";
      this.doc   = this.get_new_document();
      this.build_document();
      this.save_document();
      System.out.println("fertig");
   }
   
  private void build_document()
   {
      
      Node no_adrverw    = this.doc.createElement("adressenverwaltung");
      
      
      Iterator it = this.v_data.iterator();
      while (it.hasNext())
      {
         Line mit = (Line)it.next();
         Node no_adresse = this.doc.createElement("adresse");
                  
         Node no_nach    = this.doc.createElement("x");
         Text te_nach    = this.doc.createTextNode(String.valueOf(mit.getX()));
         Node no_url     = this.doc.createElement("Y");
         Text te_url    = this.doc.createTextNode(String.valueOf(mit.getY()));
         Node no_abt     = this.doc.createElement("H");
         Text te_abt    = this.doc.createTextNode(String.valueOf(mit.getH()));
         Node no_bon     = this.doc.createElement("W");
         Text te_bon    = this.doc.createTextNode(String.valueOf(mit.getW()));

         no_nach.appendChild(te_nach);
         no_url.appendChild(te_url);
         no_abt.appendChild(te_abt);
         no_bon.appendChild(te_bon);
                  
         no_adresse.appendChild(no_nach);
         no_adresse.appendChild(no_url);
         no_adresse.appendChild(no_abt);
         no_adresse.appendChild(no_bon);
      }
      
      this.doc.appendChild(no_adrverw);
   }
  
   
/*   private Vector get_dummy_data()
   {
      Vector vec = new Vector();
      vec.addElement(new Mitarbeiter("vorname 1","nachname 1"));
      vec.addElement(new Mitarbeiter("vorname 2","nachname 2"));
      vec.addElement(new Mitarbeiter("vorname 3","nachname 3"));
      return vec;
   }*/
   
   private Document get_new_document()
   {
      Document doc = null;
      try
      {
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder builder  = factory.newDocumentBuilder();
         doc = builder.newDocument();
      }
      catch (Exception e) {e.printStackTrace();}
      return doc;
   }
   
   public void save_document()
   {   
      try
      {
         Transformer transformer = TransformerFactory.newInstance().newTransformer();
         DOMSource        source = new DOMSource( this.doc );
         FileOutputStream os     = new FileOutputStream( new File(this.filename) );
         StreamResult     result = new StreamResult( os );
         transformer.transform( source, result );
      }
      catch(Exception e){}
   }

  /* public static void main(String[] args)
   {
      new XMLOutDemo();   
   }*/
}

Das ganze funktioniert erstmal soweit, dass es fehlerfrei zu kompilieren ist :bae:
Wenn ich dann mein Programm ausführe, ein paar Objekte der Klasse Line anlege und auf speichern klicke, wird eine XML-Datei erstellt. Allerdings steht darin nur "Adressverwaltun". Die Werte der einzelnen Line-Objekte werden noch nicht gespeichert.
 

foobar

Top Contributor
Die einzelnen Lineelemente werden nicht an das Wurzelelement gehangen:
Code:
private void build_document()
   {
     
      Node no_adrverw    = this.doc.createElement("mygraphics");
      Iterator it = this.v_data.iterator();
      while (it.hasNext())
      {
         Line mit = (Line)it.next();
         Node no_adresse = this.doc.createElement("line");
                 
         Node no_nach    = this.doc.createElement("x");
         Text te_nach    = this.doc.createTextNode(String.valueOf(mit.getX()));
         Node no_url     = this.doc.createElement("Y");
         Text te_url    = this.doc.createTextNode(String.valueOf(mit.getY()));
         Node no_abt     = this.doc.createElement("H");
         Text te_abt    = this.doc.createTextNode(String.valueOf(mit.getH()));
         Node no_bon     = this.doc.createElement("W");
         Text te_bon    = this.doc.createTextNode(String.valueOf(mit.getW()));

         no_nach.appendChild(te_nach);
         no_url.appendChild(te_url);
         no_abt.appendChild(te_abt);
         no_bon.appendChild(te_bon);
                 
         no_adresse.appendChild(no_nach);
         no_adresse.appendChild(no_url);
         no_adresse.appendChild(no_abt);
         no_adresse.appendChild(no_bon);
         no_adrverw.append(no_adresse);
      }
     
      this.doc.appendChild(no_adrverw);
   }
 

Pasche

Bekanntes Mitglied
geschieht das über das

Code:
no_adrverw.append(no_adresse);

???

Das ist nämlich nicht bekannt ("Cannot resolve symbol")
 

foobar

Top Contributor
Hab mich vertippt:
Code:
no_adrverw.appendChild(no_adresse);
 

Pasche

Bekanntes Mitglied
Ahhhhhh, es funktioniert :)

Man, da bin ich dir ja einiges schuldig 8) Naja, dann hab ich ja erstmal was zu tun um meine ganzen Klassen abzuändern.

Um die Integer Daten zu speichern, hab ich ja diese Umwandlung gemacht:
Code:
Node no_nach    = this.doc.createElement("x");
         Text te_nach    = this.doc.createTextNode(String.valueOf(mit.getX()));

Gibt es auch eine Umwandlung für den Typ Color ? So dass ich die Farbe speichern kann ?
 

Pasche

Bekanntes Mitglied
OK, das bekomm ich wohl hin.

Wo du gerade noch hier bist... :wink:

Ich hab ja jetzt verschiedene Klassen, z.B. Rect, Line oder Oval. Per if-Abfrage wollte ich jetzt das entsprechende Objekt speichern.

Code:
         if (ButtonPanel.print == "rectangle")
		 {
  			Rect mit = (Rect)it.next();
            Node no_adresse = this.doc.createElement("rect");
		 }
      
  		 else if (ButtonPanel.print == "line")
		 {
			Line mit = (Line)it.next();
            Node no_adresse = this.doc.createElement("line");
		 } 
                 
         Node no_x    = this.doc.createElement("x");
         Text te_x    = this.doc.createTextNode(String.valueOf(mit.getX()));
         Node no_y     = this.doc.createElement("y");
         Text te_y    = this.doc.createTextNode(String.valueOf(mit.getY()));
         Node no_h     = this.doc.createElement("h");
         Text te_h    = this.doc.createTextNode(String.valueOf(mit.getH()));
         Node no_w     = this.doc.createElement("w");
         Text te_w    = this.doc.createTextNode(String.valueOf(mit.getW()));

Das kann ja so nicht funktionieren, da das Objekt dann nur innerhalb der if-Abfrage existiert. Aber ich möchte ja nicht jedesmal den ganzen Rest in der if-Abfrage haben. Wie mache ich das denn am besten ?
 

foobar

Top Contributor
Um zu prüfen welche Runtimetype ein Objekt besitzt, benutzt man instanceof.
Code:
Object o = it.next();
if (o instanceof Line)
{
   Line myLine = (Line)o;
}
.....
Um auch nach dem If-Block auf die Variable zugriefen zu können, mußt du das Objekt im äusseren Block definieren.

Code:
Object o = it.next();
Line myLine = null;
if (o instanceof Line)
{
   myLine = (Line)o;javascript:
}
 

Pasche

Bekanntes Mitglied
das problem liegt eher in den folgenden zeilen:

Code:
         Node no_x    = this.doc.createElement("x");
         Text te_x    = this.doc.createTextNode(String.valueOf(mit.getX()));
         Node no_y     = this.doc.createElement("y");
         Text te_y    = this.doc.createTextNode(String.valueOf(mit.getY()));
         Node no_h     = this.doc.createElement("h");
         Text te_h    = this.doc.createTextNode(String.valueOf(mit.getH()));
         Node no_w     = this.doc.createElement("w");
         Text te_w    = this.doc.createTextNode(String.valueOf(mit.getW()));

Hier muss ja das Objekt "mit" bekannt sein. Wenn ich jetzt ein Rechteck anlege, heißt das Objekt z.B. "rect", bei einer Linie ist es "line". Muss ich dann jedesmal diese ganzen Zeilen mit in die If-Abfrage packen ? Oder gibt es eine Möglichkeit, vorher ein unbestimmes Objekt anzulegen und das dann zu verwenden ?
 

Pasche

Bekanntes Mitglied
ich muss dieses blöde Malprogramm nur für ein Projekt machen, danach wollte ich mit Java nicht mehr so viel zu tun haben. Da wollte ich nicht unbedingt Stunden vor irgendwelchen Büchern sitzen.

Ich weiß dass es sicherlich das Beste wäre, ich wär dir aber trotzdem dankbar, wenn du mir dafür noch ein Beispiel zeigen könntest.
 

foobar

Top Contributor
Code:
interface SerializeGraphic
{
	public int getH();
	public int getW();
	public int getX();
	public int getY();
	public int getNodeName();
}

Code:
	public class Line implements SerializeGraphic 
	{
		private int x, y, w, h;
		private Color color;
		public Line(Color color, int x, int y, int w, int h)
		{
			this.color = color;
			this.x = x;
			this.y = y;
			this.w = w;
			this.h = h;
		}
		public void paint(Graphics g)
		{
			g.setColor(color);
			g.drawLine(x, y, w, h);
		}
		public Color getColor()
		{
			return color;
		}
		public void setColor(Color color)
		{
			this.color = color;
		}
		public int getH()
		{
			return h;
		}
		public int getW()
		{
			return h;
		}
		public int getX()
		{
			return x;
		}
		public int getY()
		{
			return y;
		}
		public int getNodeName()
		{
			return "line";
		}
	}

......
Code:
SerializeGraphic gr = (SerializeGraphic) it.next();
Node no_adresse = this.doc.createElement( gr.getNodeName());
Node no_nach = this.doc.createElement(  gr.getX() );
.....
 
G

Guest

Gast
Code:
public int getNodeName()
      {
         return "line";
      }

Da bekomme ich die Fehlermeldung

"incompatible types

found : java.lang.String

required: int

return "line";

^
"

Aber wenn ich eine Integer zurückgeben muss, bringt mir das doch nicht viel ???:L
 

foobar

Top Contributor
Das kommt davon, wenn man copy und paste macht ;-)
Code:
public String getNodeName()
{
      return "line";
}
Ich denke es sollte nun klar sein wie du vorgehen mußt.
 
G

Guest

Gast
Was jetzt aber noch fehlt, ist die Übergabe eines bestimmten Objektes. Im Moment ist ja nicht bekannt, von welchem Objekt denn die Daten übernommen werden sollen:

Code:
SerializeGraphic gr = (SerializeGraphic) it.next();
Node no_adresse = this.doc.createElement( gr.getNodeName());
Node no_nach = this.doc.createElement(  gr.getX() );

Wie kann ich denn jetzt festlegen, dass "gr" beispielsweise "Rect" ist etc.
Den Namen holt er sich ja mit "getNodeName", aber wie lege ich fest, von welchem Objekt ?
 

foobar

Top Contributor
Wie kann ich denn jetzt festlegen, dass "gr" beispielsweise "Rect" ist etc.
Den Namen holt er sich ja mit "getNodeName", aber wie lege ich fest, von welchem Objekt ?
Alle deine Graphikobjekte müssen das Interface SerializeGraphic implementieren, dadurch sind sie alle kompatibel zu SerializeGraphic. Da du auf SerializeGraphic castest ist es egal ob du gerade ein Lineobjekt oder ein Rectobjekt verarbeitest, denn alle diese Objekte sind auch SerializeGraphicObjekte.
Polylorphie ist ein ziemlich komplexes Thema, deshalb solltest du auf jeden Fall ein Javabuch lesen. Polymorphie und Vererbung wird dir in Java überall begegnen.
 
G

Guest

Gast
Es läuft jetzt alles wie ich es mir vorgestellt habe. Danke :toll:

Wow, das war aber eine schwierige Geburt :roll:
 

Thorsten

Mitglied
Das geht doch auch einfacher:

Code:
try 
{	
   FileOutputStream fos = new FileOutputStream("meinVector.xml");
   BufferedOutputStream bos = new BufferedOutputStream(fos);
			
   //XML Encoder erstellen
   XMLEncoder XML = new XMLEncoder(bos);
			
   //Den Vector schreiben
   XML.writeObject(meinVector);

   XML.close();
   XML = null;
}
catch (IOException e)
{
}

Dann habe ich eine XML-Datei mit dem Inhalt des Vectors :)
Der XMLEncoder / XMLDecoder liegt in java.beans.
 

foobar

Top Contributor
Dann habe ich eine XML-Datei mit dem Inhalt des Vectors icon_smile.gif
Der XMLEncoder / XMLDecoder liegt in java.beans.
Um einfach nur ein Objekt zu speichern ist XmlEncoder sicherlich die bessere Lösung. Aber wenn man die XmlDaten auch noch andersweitig verwenden will, ist eine Lösung mit DOM oder JDOM besser geeignet. Da man mit DOM mehr Kontrolle darüber hat wie die Daten gespeichert werden.
 

Slava

Bekanntes Mitglied
warum überfördern mit quelcode?
du brauchst kein XML. für deine zweke ist Serialisieren ausreichend

du muss deineclassen mit Serializable ergenzen etwa so
class Line implements Paintable,Serializable{...
dann kannst du dein gefühlter Vector direkt in eine datei speichern so
Code:
try {
       FileOutputStream fs = new FileOutputStream("test.ser");
       ObjectOutputStream os = new ObjectOutputStream(fs);
       os.writeObject(deinvector);
       os.close();
     } catch (IOException e) {
       System.err.println(e.toString());
    }
um dein Vector aus datei auszulesen machst du so
Code:
try {
       FileInputStream fs = new FileInputStream("test.ser");
      ObjectInputStream is = new ObjectInputStream(fs);
       Vector deinvector = (Vector)is.readObject();
       System.out.println(time.toString());
       is.close();
     } catch (ClassNotFoundException e) {
       System.err.println(e.toString());
     } catch (IOException e) {
       System.err.println(e.toString());
     }
im vector gespeicherte Objecte sind so wie ich verstanden habe von Paintable abgeleitet
in einer schleife kannst du
Paintable p= (Paintable)deinvector.next();
initialisieren .
wenn du mit xml mahen möchtest nim java.bean.XMLDecoder und java,bean.XMLEncoder damit kannst du direkt serialisieren aber das sieht wie eine xml aus!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Projekt - ChatClient - JEditorPane - Smilies, Vektor AWT, Swing, JavaFX & SWT 2
A Vektor in Anonyme Klasse übergeben AWT, Swing, JavaFX & SWT 2
D JTextFields in Vektor: index auslesen AWT, Swing, JavaFX & SWT 10
I Font 2 Vektor AWT, Swing, JavaFX & SWT 3
G linie / vektor zeichnen AWT, Swing, JavaFX & SWT 2
G JTable mit Vektor-Konstruktor erzeugen?! AWT, Swing, JavaFX & SWT 3
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Winkelberechnungen auf 2D Grafik AWT, Swing, JavaFX & SWT 2
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
S LookAndFeel GUI-Grafik AWT, Swing, JavaFX & SWT 5
J Verschwommene Grafik AWT, Swing, JavaFX & SWT 4
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
Kenan89 Grafik und Text in JPanel anzeigen AWT, Swing, JavaFX & SWT 8
D Fenster mit Grafik überlappen AWT, Swing, JavaFX & SWT 3
Maxim6394 Rotation einer Grafik in swing AWT, Swing, JavaFX & SWT 13
D Swing Grafik in JPanel anzeigen. AWT, Swing, JavaFX & SWT 3
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C Grafik von main aus aufrufen AWT, Swing, JavaFX & SWT 13
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
T rekursive Grafik AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem mit schreiben von Text auf eine Grafik AWT, Swing, JavaFX & SWT 7
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
S Pacman-Grafik AWT, Swing, JavaFX & SWT 23
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
D Systemmodale Grafik AWT, Swing, JavaFX & SWT 10
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
W Grafik aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
C gute Grafik-Bibliotheken gesucht AWT, Swing, JavaFX & SWT 6
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
O Grafik wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
P JPanel mit Grafik von HDD über JTree AWT, Swing, JavaFX & SWT 10
S 2D-Grafik beeinflussen durch Scrollbalken AWT, Swing, JavaFX & SWT 2
A Grafik aus MIME-kodiertem Inhalt erzeugen AWT, Swing, JavaFX & SWT 2
T (WACOM) Grafik Tablet abfragen AWT, Swing, JavaFX & SWT 3
S Button mit Grafik versehen AWT, Swing, JavaFX & SWT 5
D Grafik bearbeiten AWT, Swing, JavaFX & SWT 11
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
M Grafik flexibel an berechneten Koordinaten positionieren AWT, Swing, JavaFX & SWT 4
M dynamische Grafik in JFrame einbetten AWT, Swing, JavaFX & SWT 2
G Transparente Grafik über JMF Video zeichnen AWT, Swing, JavaFX & SWT 2
I Grafik in Text umwandeln AWT, Swing, JavaFX & SWT 11
G Grafik auf mehrere Methoden/Klassen zerlegen AWT, Swing, JavaFX & SWT 2
G Grafik in Button einbinden AWT, Swing, JavaFX & SWT 3
M Grafik in JFrame in Kombination mit Steuerelementen AWT, Swing, JavaFX & SWT 2
T grafik in jpanel wird nicht neugezeichnet AWT, Swing, JavaFX & SWT 7
F Zellen über eine Grafik legen AWT, Swing, JavaFX & SWT 7
S Grafik Farbwert verändern? AWT, Swing, JavaFX & SWT 8
D Farbe einer Grafik über den Cursor abfragen AWT, Swing, JavaFX & SWT 6
G Keine Anzeige von Grafik bei externem paintComponent-Aufruf AWT, Swing, JavaFX & SWT 2
S Popup auf Grafik AWT, Swing, JavaFX & SWT 18
J Grafik "sichtbar" verschieben AWT, Swing, JavaFX & SWT 2
G Grafik auf JComponent ohne Überschreiben von Paint-Methoden AWT, Swing, JavaFX & SWT 4
G Grafik erzeugen: eine Art Zustandsgraph eines Automaten AWT, Swing, JavaFX & SWT 7
P grafik in JScrollPanel AWT, Swing, JavaFX & SWT 5
D AppletCode als JAR aus JSP benutzen und als Grafik speichern AWT, Swing, JavaFX & SWT 2
S Update von Grafik auf JPanel AWT, Swing, JavaFX & SWT 2
S Auf einem JTabbedPane eine Grafik zeichnen AWT, Swing, JavaFX & SWT 11
W Grafik in JLabel aktualisieren AWT, Swing, JavaFX & SWT 4
S Tooltip mit Grafik AWT, Swing, JavaFX & SWT 2
D Visualisierung einer Selektion in einer Grafik. AWT, Swing, JavaFX & SWT 7
P Grafik auf Button AWT, Swing, JavaFX & SWT 3
E Einträge der JComboBox werden durch Grafik verdeckt AWT, Swing, JavaFX & SWT 11
L Komponente und Grafik gleichzeitig auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
T swing - grafik schrittweise ausgeben ohne repaint() AWT, Swing, JavaFX & SWT 2
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
S XML Output String Format AWT, Swing, JavaFX & SWT 2
C LayoutManager BorderLayout im richtigen Format beschriften AWT, Swing, JavaFX & SWT 10
R XY und Z format AWT, Swing, JavaFX & SWT 3
S Abspeichern aus einem ImageIcon ins korrekte Format AWT, Swing, JavaFX & SWT 2
P Bild im TIFF oder BMP Format einlesen AWT, Swing, JavaFX & SWT 3
M Format eines Textfeldes AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben