XML Viewer for Swing

JimK

Bekanntes Mitglied
Hallo,

ich bin am verzweifeln. Ich soll ein Programm schreiben, welches XML Datein liest.
Bei meiner Suche bin auch auf folgendes Tutorial gestoßen und finde die Formatierung und Darstellung echt super also zu mindest diese am Ende des Tutorials. Jedoch verstehe ich den Code nicht ganz und bekomme das Programm einfach nicht zum Laufen.

Kann mit bitte jemand helfen? Bis jetzt habe ich nur die Klassen erstellt so wie im Tutorial beschrieben.
XML Viewer for Swing

Vielen Dank schon mal

LG
JimK
 

Ivan Dolvich

Mitglied
An was hakt es denn?
Wo hast du genau Probleme, den Code zu verstehen?

Gibt es eine Exception, wenn du versuchst, den Code zu starten? Wenn ja, welche?
 

JimK

Bekanntes Mitglied
Momentan habe ich es dank des Programmierbuches soweit geschafft, dass ich mir den Baum anzeigen lassen kann. Jetzt würde ich mir das gerne so anzeigen lassen wie das letzte Beispiel dieser Seite. Mit diesen Baum der auf eine Tabelle gelegt ist und mir in der rechten Hälfte dann jeweils die Werte ausgibt. Dazu müsste ich ja theoretisch nur seinen Code auf meinen anwenden, aber ich weiß nicht wie.

Mein Code sieht momentan so aus:

Java:
package Viewer;

import java.awt.Point;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.sax.SAXSource;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class TreewithModel 
{
  public static void main( String[] args ) throws SAXException, IOException, ParserConfigurationException, TransformerException 
  {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    InputSource is = new InputSource(new FileInputStream("d://test.xml")); 
    
//    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//	DocumentBuilder builder = factory.newDocumentBuilder();
//	Document document = builder.parse(new File("d://test.xml"));
    
//    SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
//    SAXParser parser = saxFactory.newSAXParser(); 
//    XMLReader reader = new XMLTrimFilter(parser.getXMLReader()); 
//
//    TransformerFactory factory = TransformerFactory.newInstance(); 
//    Transformer transformer = factory.newTransformer(); 
//    transformer.setOutputProperty(OutputKeys.INDENT, "no"); 
//    DOMResult result = new DOMResult(); 
//    transformer.transform(new SAXSource(reader, is), result);
    
    
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    factory.setIgnoringElementContentWhitespace(true); 
    factory.setCoalescing(true); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Node node = builder.parse(is); 


    
    
//	Node node = document.getDocumentElement();

    JTree tree = new JTree( new XMLTreeTableModel(node) );
    frame.add( new JScrollPane( tree ) );
    frame.pack();
    frame.setVisible( true );

    tree.getSelectionModel().addTreeSelectionListener(
      new TreeSelectionListener()
      {
        @Override public void valueChanged( TreeSelectionEvent e )
        {
          TreePath path = e.getNewLeadSelectionPath();
          System.out.println( path );
        }
      }
    );
  }
}

Java:
package Viewer;

import java.awt.Point;
import java.util.List;

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

import org.jdesktop.swingx.treetable.TreeTableModel;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLTreeTableModel implements TreeTableModel{ 
    private Node node; 
 
   
 
    public XMLTreeTableModel(Node node){ 
        this.node = node; 
    } 
 
    public Object getRoot(){ 
        return node; 
    } 
 
    public Object getChild(Object parent, int index){ 
        Node node = (Node)parent; 
        NamedNodeMap attrs = node.getAttributes(); 
        int attrCount = attrs!=null ? attrs.getLength() : 0; 
        if(index<attrCount) 
            return attrs.item(index); 
        NodeList children = node.getChildNodes(); 
        return children.item(index - attrCount); 
    } 
 
    public int getChildCount(Object parent){ 
        Node node = (Node)parent; 
        NamedNodeMap attrs = node.getAttributes(); 
        int attrCount = attrs!=null ? attrs.getLength() : 0; 
        NodeList children = node.getChildNodes(); 
        int childCount = children!=null ? children.getLength() : 0; 
        if(childCount==1 && children.item(0).getNodeType()==Node.TEXT_NODE) 
            return attrCount; 
        else 
            return attrCount + childCount; 
    } 
 
    public boolean isLeaf(Object node){ 
        return getChildCount(node)==0; 
    } 
 
    public int getIndexOfChild(Object parent, Object child){ 
        Node node = (Node)parent; 
        Node childNode = (Node)child; 
 
        NamedNodeMap attrs = node.getAttributes(); 
        int attrCount = attrs!=null ? attrs.getLength() : 0; 
        if(childNode.getNodeType()==Node.ATTRIBUTE_NODE){ 
            for(int i=0; i<attrCount; i++){ 
                if(attrs.item(i)==child) 
                    return i; 
            } 
        }else{ 
            NodeList children = node.getChildNodes(); 
            int childCount = children!=null ? children.getLength() : 0; 
            for(int i=0; i<childCount; i++){ 
                if(children.item(i)==child) 
                    return attrCount + i; 
            } 
        } 
        throw new RuntimeException("this should never happen!"); 
    } 
 
    public void addTreeModelListener(TreeModelListener listener){ 
        // not editable 
    } 
 
    public void removeTreeModelListener(TreeModelListener listener){ 
        // not editable 
    } 
 
    public void valueForPathChanged(TreePath path, Object newValue){ 
        // not editable 
    } 
 
    public int getColumnCount(){ 
        return 2; 
    } 
 
    public String getColumnName(int column){ 
        return column==0 ? "Node" : "Value"; 
    } 
 
    public Class getColumnClass(int column){ 
        return column==0 ? TreeTableModel.class : String.class; 
    } 
 
    public Object getValueAt(Object node, int column){ 
        if(column==0) 
            return node; 
        else{ 
            Node n = (Node)node; 
            if(n.getNodeType()==Node.ELEMENT_NODE){ 
                NodeList children = n.getChildNodes(); 
                int childCount = children!=null ? children.getLength() : 0; 
                if(childCount==1 && children.item(0).getNodeType()==Node.TEXT_NODE) 
                    return children.item(0).getNodeValue(); 
            } 
            return n.getNodeValue(); 
        } 
    } 
 
    public boolean isCellEditable(Object node, int column){ 
        return false; 
    } 
 
    public void setValueAt(Object aValue, Object node, int column){ 
        // not editable 
    }

	@Override
	public int getHierarchicalColumn() {
		// TODO Auto-generated method stub
		return 0;
	} 
}
 

JimK

Bekanntes Mitglied
Ok, jetzt hab ich es geschafft mir ein JXTreeTable zu basteln.

Java:
JXTreeTable tree = new JXTreeTable( new XMLTreeTableModel(node) );

Sieht auch super aus. Aber wie kann ich es so wie auf der Webseite formatieren? Also das die Knoten je nach Kategorie die Schriftfarbe annehmen?

LG

JimK
 

JimK

Bekanntes Mitglied
Wichtig wäre jetzt zum Beispile für mich, wie ich diese TreeCellRenderer Klasse in meine Code einbinden kann. Kann mir da jemanden helfen?
 

Purgator

Aktives Mitglied
Also die Klasse XMLTreeCellRenderer ist ja bereits dort beschrieben.
Die erstellst du dir ganz normal.
Einbinden solltest du sie dann in deinem eigentlichen Programm, indem du dem JTree sagst, dass er diesen TreeCellRenderer nehmen soll. Dafür haben JTree's die Methode setCellRenderer(TreeCellRenderer x).

Hoffe das war deine Frage.
 

JimK

Bekanntes Mitglied
Oh man. Ich hatte es schon fasst. Es stand nur an der falschen Stelle. ;(
Mit den folgen Zeilen und den dazugehörigen Tip hat es super funktioniert.

Java:
 TreeCellRenderer renderer = new XMLTreeCellRenderer(node);
 tree.setTreeCellRenderer( renderer );

Vielen Dank!!! :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Erste Schritte JAVA PDF-Viewer Java Basics - Anfänger-Themen 5
F PDF-Viewer mit Eingabemöglichkeit Java Basics - Anfänger-Themen 3
T abgespeckter VNC Viewer in Java Java Basics - Anfänger-Themen 6
G Wie im Viewer, aber nicht im Browser? Java Basics - Anfänger-Themen 2
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben