Vector auf JTree

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,

ich habe noch ein schwierigeres Problem und zwar habe ich jetzt meine XML- Datei in einen Vector eingelesen und jetzt möchte ich diese Struktur in einem JTree darstellen,
z.B.:

Code:
         <Element type="Allgemein"	  					id="0"     				name="0">  		  
		<varID type="Info" id="0">
			<State id="0">
				<version>			1.0			                        </version> 
				<titel>	                           JavaProgramm          		   </titel>
				<width>				 1074						</width>
             <height>			 840						</height>
				<xPos>				 0						  </xPos>
              <yPos>				 0		     				  </yPos>		
			</State>
		</varID>		
	</Element>

Der JTree sollte dann so aussehen:

Code:
Allgemein
   | 
   ------Info
           |
           -------version
           -------titel
           -------width
           -------height
           -------xPos
           -------yPos

Ist das irgendwie einfach zu realisieren (vector an JTree übergeben wäre mir am liebsten :D ) bzw. wie macht man das am Besten?

lg
 

ARadauer

Top Contributor
so ungefähr würde ich einen knoten definieren

Code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class XmlNode {
	
	private ArrayList<XmlNode> nodes;
	private String tagName;
	private Map<String, String> attribute;
	
		
	public void addNode(XmlNode node){
		if(nodes==null)
			nodes = new ArrayList<XmlNode>();
		nodes.add(node);
	}
	
	
	public int getNumNodes(){
		if(nodes==null)
			return 0;
		return nodes.size();
	}
	
	public XmlNode getNode(int i){
		if(nodes==null)
			return null;
		return nodes.get(i);
	}
	
	public String getTagName() {
		return tagName;
	}

	public void setTagName(String tagName) {
		this.tagName = tagName;
	}

	
	public void addAttribut(String key, String value){
		if(attribute == null)
			attribute = new HashMap<String, String>();
		attribute.put(key, value);
	}
	
	public Map<String, String> getAttribute(){
		return attribute;
	}	

}

dein model hat dann nur einen verweis auf den root Knoten.
 

ARadauer

Top Contributor
würde dann ungefähr so aussehen:

Code:
import java.io.File;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;


public class MyTreeModel implements TreeModel{
	
	private XmlNode root;
	
	public void parseTree(File f){
		//mhn..... kann nicht so schwer sein
		//bzw leicht aber auch nicht ;-)
	}

	@Override
	public void addTreeModelListener(TreeModelListener l) {
	}

	@Override
	public Object getChild(Object parent, int index) {
		if (parent instanceof XmlNode) {
			XmlNode n = (XmlNode) parent;
			return n.getNode(index);			
		}
		return null;
	}

	@Override
	public int getChildCount(Object parent) {
		if (parent instanceof XmlNode) {
			XmlNode n = (XmlNode) parent;
			return n.getNumNodes();
		}
		return 0;
	}

	@Override
	public int getIndexOfChild(Object parent, Object child) {
		if (parent instanceof XmlNode) {
			XmlNode n = (XmlNode) parent;
			return n.indexOfNode((XmlNode)child);
		}
		return -1;
	}

	@Override
	public Object getRoot() {
		return root;
	}

	@Override
	public boolean isLeaf(Object node) {
		if (node instanceof XmlNode) {
			XmlNode n = (XmlNode) node;
			return (n.getNumNodes()==0);
		}
		return true;
	}

	@Override
	public void removeTreeModelListener(TreeModelListener l) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void valueForPathChanged(TreePath path, Object newValue) {
		// TODO Auto-generated method stub
		
	}
	

}

wobei ich gerade sehe, dass es ein interface TreeNode gibt, das könnte man sich auch ansehen. Vielleicht gits auch schon vorgefertigte Systeme um eine XML Datei in einen JTree anzuzeigen.

Aber so würd ich es ungefähr machen. Hab vor ungefähr einem Jahr mal Abteilungen mit Personen in ca 6 Ebenen verwallten müssen und da hab ich so was ähnliches verwendet.
 

PollerJava

Top Contributor
So lese ich die XML- Datei ein:

Code:
SAXBuilder builder = new SAXBuilder();	
	doc = builder.build(xmlFile);
        root = doc.getRootElement();
...

Vielen Dank für Deine Antworten, werd in diese Richtung probieren,
lg
 

ARadauer

Top Contributor
ich denk auf jedenfall, dass das die richtige richtung ist. Dein root ist ja sicher auch schon irgend ein Knoten, vielleicht gibts da eine Möglicheit dass du das direkt oder über einen Adapter an das Model übergibtst. Bzw einfach was drum herum programmieren, das dein root im Model verwendet werden kann.
 

PollerJava

Top Contributor
Ich habs jetzt (auf die schnelle, da der Stress überhand nimmt) so gelöst (rekursiv), Das Beispiel liest direkt eine XML- Datei ein und stellt es am JTree dar,
vielleicht wirds ja mal benötigt von irgendwem:

Code:
import java.awt.BorderLayout;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLToJTreeParser extends JFrame {

	private JTree tree;
	private JScrollPane scrollPane;

	public XMLToJTreeParser() {
		DefaultMutableTreeNode root = initTreeRoot("KonfigComponents.xml");
		tree = new JTree(root);
	}

        public JTree getTree() {
            return tree;
        }
        
	private DefaultMutableTreeNode initTreeRoot(String file) {
		Document doc = null;
		try {
		    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		    DocumentBuilder builder = factory.newDocumentBuilder();
		    doc = builder.parse(this.getClass().getResourceAsStream(file));
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (doc == null)
		   return new DefaultMutableTreeNode("EMPTY");
		Node rootNode = doc.getFirstChild();
		DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootNode.getNodeName());
		treeWalk(rootNode, 0, root);
		return root;
	}

	public static void treeWalk(Node node, int level, DefaultMutableTreeNode parentNode) {
		String nodeName = node.getNodeName();
		DefaultMutableTreeNode childNode = null;
		if (node.hasChildNodes()) {
                    level++;
                    NodeList list = node.getChildNodes();
                    int len = list.getLength();
                    for (int i = 0; i < len; i++) {
                            Node child = list.item(i);
                            childNode = new DefaultMutableTreeNode(child.getNodeName());
                            parentNode.add(childNode);
                            treeWalk(list.item(i), level, childNode);
                   }
		} 
                else {
		     childNode = new DefaultMutableTreeNode(node.getNodeValue());
		     parentNode.add(childNode);
		}
	}

	public final static StringBuffer repeat(int n, char c) {
		char[] cA = new char[n];
		Arrays.fill(cA, c);
		return (StringBuffer) new StringBuffer().insert(0, cA);
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Vector -> 2Diminsonaler Array Allgemeine Java-Themen 10
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2
C vector von vector sortieren Allgemeine Java-Themen 4
D Vector in String Allgemeine Java-Themen 5
J Von Collection zu vector Allgemeine Java-Themen 5
D Vector in Datei schreiben Allgemeine Java-Themen 18
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
H Vector in ein File-Array umwandeln Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
E Swing Jtree Allgemeine Java-Themen 9
R JTree - Mehrere Roots Allgemeine Java-Themen 6
DStrohma Icons in JTree Nodes weiter nach rechts rücken Allgemeine Java-Themen 2
M JTree aktualisieren nach Mausklick Allgemeine Java-Themen 12
DStrohma Jede node in JTree mit eigenem Icon Allgemeine Java-Themen 7
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
S JAVA JTree rekursiv umschreiben Allgemeine Java-Themen 5
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
N JTree nicht genutzte Pfade schließen Allgemeine Java-Themen 2
G JTree Node löschen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben