XML erzeugen aus JTree und wieder einlesen...

fl_ex

Bekanntes Mitglied
Mooin,

ich bin am Ende mittlerweile im Inet nix zu finden....
Ich möchte aus einem JTree, der mit Buttons etc. erweitert werden kann, eine XML-Datei abspeichern damit die Nodes, die ich hinzugefügt habe beim nächsten Programmstart wieder geladen werden können, weil sonst lädt er immer nur die "Anfangskonfig."

Mein Code:

Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class BebauungsplanTree {

}

class BebauungsplanTreeFrame extends JFrame implements ActionListener {
	public BebauungsplanTreeFrame() {
		setTitle("Bebauungsplan in K-SIE-4");
		setSize(450, 300);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// Tree erstellen
		final StartTree startTree = new StartTree();
		TreeNode root = startTree.makeSampleTree();
		model = new DefaultTreeModel(root);
		tree = new JTree(model);
		tree.setEditable(true);

		Container contentPane = getContentPane();
		JScrollPane scrollPane = new JScrollPane(tree);
		contentPane.add(scrollPane, "Center");

		// Panel und Buttons hinzufügen
		JPanel panel = new JPanel();
		nachbarpunktBtn = new JButton("add Nachbarpunkt");
		nachbarpunktBtn.addActionListener(this);
		panel.add(nachbarpunktBtn);
		unterpunktBtn = new JButton("add Unterpunkt ");
		unterpunktBtn.addActionListener(this);
		panel.add(unterpunktBtn);
		deleteButton = new JButton("Delete");
		deleteButton.addActionListener(this);
		panel.add(deleteButton);
		pathButton = new JButton("Ort");
		pathButton.addActionListener(this);
		panel.add(pathButton);
		editButton = new JButton("Edit");
		editButton.addActionListener(this);
		panel.add(editButton);

		// noch nicht implementiert!

		saveButton = new JButton("Save");
		saveButton.addActionListener(this);
		panel.add(saveButton);

		contentPane.add(panel, "South");
	}

	public void actionPerformed(ActionEvent event) {
		DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
				.getLastSelectedPathComponent();

		System.out.println(tree.getSelectionPath());

		if (selectedNode == null)
			return;

		// Markiertes Element löschen
		if (event.getSource().equals(deleteButton)) {
			if (selectedNode.getParent() != null)
				model.removeNodeFromParent(selectedNode);
			return;
		}

		// Pfadausgabe des zuletzt benutzten Objekts
		if (event.getSource().equals(pathButton)) {
			if (selectedNode.getParent() != null)
				JOptionPane.showConfirmDialog((Component) null, "" + tree.getSelectionPath(),
						"Pfadangabe", JOptionPane.DEFAULT_OPTION);
			return;
		}

		// SEARCH
		System.out.println(tree.getModel().getRoot());

		// Save des Trees!
		if (event.getSource().equals(saveButton)) {

			System.out.println(tree.getModel().getRoot());

			if (selectedNode.getParent() != null) {

				FileWriter writer = null;

				File file = new File("test.txt");
				try {
					writer = new FileWriter(file, true);
					writer.write(String.valueOf(tree));
					writer.flush();
				} catch (final IOException e) {
					e.printStackTrace();
				}

			}
			return;
		}

		// Umbenennen
		if (event.getSource().equals(editButton)) {
			String renamePunkt = JOptionPane.showInputDialog("Umbenennen in...");
			DefaultMutableTreeNode renameNode = new DefaultMutableTreeNode(renamePunkt);

			DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();

			if (parent != null) {
				int selectedIndex = parent.getIndex(selectedNode);
				model.removeNodeFromParent(selectedNode);
				model.insertNodeInto(renameNode, parent, selectedIndex);
			}
			return;
		}

		// Unterpunkte hinzufügen
		String newPunkt = JOptionPane.showInputDialog("Bitte Namen eingeben...");
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(newPunkt);

		if (event.getSource().equals(nachbarpunktBtn)) {
			DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();

			if (parent != null) {
				int selectedIndex = parent.getIndex(selectedNode);
				model.insertNodeInto(newNode, parent, selectedIndex + 1);
			}
		} else if (event.getSource().equals(unterpunktBtn)) {
			model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());
		}

		// now display new node
		TreeNode[] nodes = model.getPathToRoot(newNode);
		TreePath path = new TreePath(nodes);
		tree.scrollPathToVisible(path);
	}

	private DefaultTreeModel model;

	private JTree tree;
	private JButton nachbarpunktBtn;
	private JButton unterpunktBtn;
	private JButton deleteButton;
	private JButton pathButton;
	private JButton editButton;

	// noch nicht implementiert
	private JButton saveButton;
}

Wäre für jede Hilfe dankbar... Auch wenn ihr jetzt Anmerkungen habt zum Programm immer posten verbesserungen etc. würden mich auch freuen... am wichtigsten aber die XML-Sache ^^

;)

Grüße
fl_ex
 

fl_ex

Bekanntes Mitglied
okay habs hinbekommen ... :)

einfach serialisiert:
Java:
public class Serializer {

	public void serialize(final JTree tree) {
		try {
			XMLEncoder o = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(
					"Y:/testFile.xml")));
			o.writeObject(tree.getModel());
			o.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}


und wieder deserialisert:
Java:
	private DefaultTreeModel deSerialize() {
		XMLDecoder d = null;
		Object result = null;
		try {
			d = new XMLDecoder(new BufferedInputStream(new FileInputStream("Y:/testFile.xml")));
			result = d.readObject();
			d.close();
		} catch (FileNotFoundException ex) {
			JOptionPane.showMessageDialog(null, "Datei nicht gefunden");
		}
		return (DefaultTreeModel) result;
	}

DANKE trotzdem =)
 

fl_ex

Bekanntes Mitglied
von einem Problem ins nächste...^^

Also habe einen Speichern und einen Laden Button...
Wenn ich jetzt eine Struktur baue speichert er die XML ab und man kann sie auch mit iexplorer ansehen und sich durchklickern...
Wenn ich das programm nun neu starte und auf laden klicken wird die struktur geladen wie ich sie abgespeichert habe... so weit so gut...

Jetzt kann ich aber keine Button mehr benutzen?! Löschen,Editieren!? unterpunkte anlegen geht immernoch^^
Muss da noch was zusätzlich gemacht werden?

Laden Button:
Java:
		// **********
		// LADEN -!!-
		// **********

		JButton btnLaden = new JButton("LADEN");
		btnLaden.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				DefaultTreeModel modelSave = (DefaultTreeModel) tree.getModel();
				modelSave = deSerialize();
				tree.setModel(modelSave);

			}
		});

Speichern button:
Java:
// **************************
		// SPEICHERN*(Baum) -!!-
		// **************************
		ActionListener save = new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
						.getLastSelectedPathComponent();
				if (event.getSource().equals(btnSpeichern)) {

					final Serializer serializer = new Serializer();
					serializer.serialize(tree);

					if (selectedNode.getParent() != null)
						// JOptionPane.showConfirmDialog((Component) null, "" +
						// tree.getSelectionPath(),
						// "Pfadangabe", JOptionPane.DEFAULT_OPTION);
						return;
				}
			};
		};

.... von einem Problem ins nächste.. immer wieder^^ vllt kann mir ja jemand helfen :)
 
Zuletzt bearbeitet:

DerEisteeTrinker

Bekanntes Mitglied
Was heißt geht nicht? Exception? Passiert nichts? Fällt in China ein Sack Reis um?

Einfach mal ganz simpel den Debugger anwerfen und dann schauen wo was nicht hinhaut.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Erzeugen einer openapi spec via swagger XML & JSON 1
W Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests XML & JSON 13
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
C XML erzeugen Tipps und Tricks XML & JSON 7
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
J XML Parser anhand xsd erzeugen XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
H PDF erzeugen mit FOP(fo fehlerhaft) XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
R XSD aus Java Klassen erzeugen?? XML & JSON 2
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
P cxf: WSDL dynamisch erzeugen (zur Laufzeit) XML & JSON 7
N Teilbaum aus DOM-Baum erzeugen XML & JSON 5
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
S Java - Klassen erzeugen aus xsd bzw. wsdl XML & JSON 3
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
T Einzug bei XSLTransformator erzeugen XML & JSON 3
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
B jdom document aus string erzeugen? XML & JSON 1
H PDFs erzeugen mit Apache FOP XML & JSON 3
D XML Datei mit DOM erzeugen XML & JSON 6
G JAXB Objekte erzeugen XML & JSON 3
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
B DTD aus Java erzeugen XML & JSON 2
M PDF erzeugen aus Stringarray XML & JSON 1
G XML Dokument mit DOM erzeugen XML & JSON 9
S svg erzeugen XML & JSON 2
B org.w3c.dom.Node erzeugen XML & JSON 2
B XML-Document mit Java erzeugen und zuruecksenden XML & JSON 1
S Menüeinträge aus XML erzeugen XML & JSON 21
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1
P JTree aus XML XML & JSON 2
T XML JTree änder sich nicht XML & JSON 2
M XML in Jtree bearbeiten XML & JSON 2
G Probleme mit XML und JTree XML & JSON 9
F JTree zu XML XML & JSON 2
S JTree - Nur Elemente mit Attributen einfügen XML & JSON 2
D JTree aus XML Datei erstellen & JTree wieder in XML spei XML & JSON 4
J XML-Dokument / JTree XML & JSON 7
P Knoten-Attribute einer xsd-Datei in einem JTree auslesen XML & JSON 18
R Jtree + Attribute XML & JSON 6
R xml mit Jdom lesen und als Jtree anzeigen. XML & JSON 9
Z Erzeugung einer Referenz von Knoten in JTree auf DOMTree XML & JSON 3
J xml in jtree: kleine Hilfe nötig XML & JSON 3
A JTree Struktur aus XML (mit Attributen) XML & JSON 12
D Xml-Datei in JTree anzeigen und Elemente ausblenden XML & JSON 2
Avalon JSON flatten und wieder in DTO konvertieren XML & JSON 21
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
R XML eingelesen und wieder geschrieben... Fehler XML & JSON 7
S Mal wieder Sax was sonst ;( XML & JSON 5
S Geändertes XML-File wieder abspeichern. XML & JSON 10
P XML - mal wieder. XML & JSON 10
N Objekte via XML speichern und wieder einlesen XML & JSON 12

Ähnliche Java Themen

Neue Themen


Oben