Java JTree aus/in XML nodes + ID

Halleluja! Wenn Du nicht verstehst, was hier geschrieben wird, empfiehlt es sich nachzufragen! Schüler oder Student?

Poste den Code, der den JTree erstellt, dann erläutere ich Dir, wie es sich damit verhält.
 
Code:
......
    private JTree jtree;
    private TreeModel treemodel;

public TestGui() {

......
        jtree = new JTree();
        
        getContentPane().add(new JScrollPane(jtree), BorderLayout.CENTER);

        try {
            treemodel=Pers.deSerialize(jtree).getModel();
        } catch (Exception e) {
......

-und die Methode dazu:

Code:
public class Pers {
	
private List<TreeNode[]> expanded;
private JTree jtree;
private TreeModel model;

	JTree deSerialize(JTree jtree) {
        try {
            XMLDecoder d = new XMLDecoder(new BufferedInputStream(new FileInputStream("tree.xml")));
            jtree.setModel((TreeModel) d.readObject());
            expanded = (List<TreeNode[]>) d.readObject();
            d.close();
        } catch (FileNotFoundException ex) {        
        }
        return jtree;
    }
    void addNode(JTree jtree) {
    	this.jtree=jtree;
        TreePath selectedPath = this.jtree.getSelectionPath();

        //Knoten nicht selektiert
        if (selectedPath == null) {
            return;
        }
        DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) selectedPath.getLastPathComponent();
        DefaultMutableTreeNode newChild = new DefaultMutableTreeNode("neuer Knoten " + countNew++);
        ((DefaultTreeModel) this.jtree.getModel()).insertNodeInto(newChild, selectedNode, selectedNode.getChildCount());

        TreePath newPath = selectedPath.pathByAddingChild(newChild);
        this.jtree.setSelectionPath(newPath);
        this.jtree.startEditingAtPath(newPath);

    }
 
Zuletzt bearbeitet:
Das reicht noch nicht. Du hast noch mehr Code, der sich um den JTree kümmert. Wie werden die Knoten erstellt?
 
Echt? Ich sehe keinen Unterschied!

Was mich interessiert, ist der Code mittels dem neue Knoten in den Baum eingefügt werden.

Und nochmal: Schüler oder Student?
 
Bin Student. Achso, das meintest du. Ich bessere nochmal aus.
 
Zuletzt bearbeitet:
Dann fasse ich mich kurz. Der Baum stellt üblicherweise Domain-Objekte dar, die als Teil Deiner Domänenschicht die Anwendungsdaten repräsentieren. In diesem Fall also Kategorien und die Elemente, die darin enthalten sind.

In der GUI bietest Du die Möglichkeit entweder Kategorien oder Elemente (Deine Wörter) anzulegen, fragst einen Namen dafür ab und fügst entsprechende Objekte in den Baum ein.

Code:
class Category{
    private final String id;
    private final String name;
    public Category(String rId, String rName) {
        id = rId;
        name = rName;
    }

    getter/setter ...

    public String toString() { return name; }
}

Beim Erstellen des Knotens wird eine neue Kategorie erstellt (Du musst natürlich vorher prüfen, dass diese nicht schon besteht) und in den Baum eingefügt:

Code:
Category category = new Category(name.toLowerCase(), name);
DefaultMutableTreeNode node = new DefaultMutableTreeNode(category);

Wenn Du Dich nicht mit XMLEncoder näher befassen möchtest, um die Wörter zu ignorieren, entferne vorm wegschreiben einfach alle Wörter aus dem Baum.
 
Hallo, Danke Dir! Wie serialisiere ich jetzt eig. alles inkl. ID?
Ich meine

Code:
XMLEncoder o = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("tree.xml")));
o.writeObject(tree.getModel());

wird bestimmt nicht ausreichen.
 
Könntest du mir Persistence Delegates erklären bzw. wie ich es anwenden kann?
 

Ähnliche Themen

Zurück
Oben