ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
5086
5086
EMPFEHLEN
-
01.05.06 17:09 #1
- Registriert seit
- Nov 2003
- Ort
- Hamburg
- Beiträge
- 157
Hallo,
ich hab in einer Datenbank Kategorien ablegt. Diese Kategorien verweisen durch eine ParentID teilweise auf eine höhere Kategorie.
Nun habe ich es geschafft diese mit Hilfe eines JTrees in einen JTree zu schreiben.
Dafür benutze ich eine sich rekursiv aufrufende Funktion.
Nun meine Frage, wie kann ich jedem JTree Eintrag, also einem Node, eine ID mitgeben, die der Benutzer nicht sieht, ich aber auslesen kann? Diese ID brauche ich später, um das ausgewählte Node einem Datenbankeintrag zuordnen zu können. Ich habe da leider überhaupt keine Idee zu
Ich wäre für jeden Ratschlag dankbar.
Gruß
ExtremeSnail
-
Hallo,
schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
import java.awt.BorderLayout; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; public class JTreeDemo extends JFrame { private JTree tree; private JLabel label = new JLabel(" "); public JTreeDemo() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationByPlatform(true); DefaultMutableTreeNodewithID root = new DefaultMutableTreeNodewithID( "Wurzel", "Wurzel0"); for (int ast = 0; ast < 4; ast++) { DefaultMutableTreeNodewithID node = new DefaultMutableTreeNodewithID( "Knoten " + ast); node.setNodeID("Ast" + ast); root.add(node); for (int blatt = 1; blatt < 4; blatt++) node.add(new DefaultMutableTreeNodewithID("Blatt " + (ast * 3 + blatt), "BLatt" + blatt)); } tree = new JTree(root); tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { label.setText(e.getPath() + "\nNode ID:" + ((DefaultMutableTreeNodewithID) tree .getLastSelectedPathComponent()) .getNodeID()); } }); this.add(new JScrollPane(tree), BorderLayout.CENTER); this.add(label, BorderLayout.SOUTH); this.pack(); this.setVisible(true); } public static void main(String[] args) { new JTreeDemo(); } class DefaultMutableTreeNodewithID extends DefaultMutableTreeNode { private String nodeID = ""; public DefaultMutableTreeNodewithID(Object userObject) { super(userObject); } public DefaultMutableTreeNodewithID(Object userObject, String nodeID) { super(userObject); this.nodeID = nodeID; } public void setNodeID(String newNodeID) { this.nodeID = newNodeID; } public String getNodeID() { return nodeID; } } }
Vg Erdal
-
01.05.06 21:11 #3
- Registriert seit
- Nov 2003
- Ort
- Hamburg
- Beiträge
- 157
Danke nun hab ich es

Mir fehlte nur folgende Zeile den Rest hatte ich genauso auch schon versucht
Code :1
(DefaultMutableTreeNodewithID)tree.getLastSelectedPathComponent()).getNodeID());
-
02.05.06 10:04 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Also in dem Fall haette ich nicht mit einer eigenen TreeNode Klasse sondern mit dem UserObject gearbeitet... aber das nur mal so am Rande.
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo Tom,
ein mini Beispiel wie das mit dem userObject gedacht ist, wäre von Vorteil. Schade ich dachte schon, ich hab das Problem ganz elegant gelöst
. Da ich wieder was dazu lernen werde, ist das dennoch ein Grund zum freuen
.
Vg Erdal
-
02.05.06 14:11 #6
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Ich haette das so gemacht um die Darstellungslogik nicht zu sehr an die Anwendungslogik zu binden...Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
package de.tutorials; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; public class JTreeDemo extends JFrame { private JTree tree; private JLabel label = new JLabel(" "); public JTreeDemo() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationByPlatform(true); DefaultMutableTreeNode root = new DefaultMutableTreeNode( new UserObject("A", "AAAAA")); for (int ast = 0; ast < 4; ast++) { DefaultMutableTreeNode node = new DefaultMutableTreeNode( new UserObject("Ast" + ast, "Knoten " + ast)); root.add(node); for (int blatt = 1; blatt < 4; blatt++) node.add(new DefaultMutableTreeNode(new UserObject("Blatt " + (ast * 3 + blatt), "Blatt" + blatt))); } tree = new JTree(root); tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode selectedTreeNode = (DefaultMutableTreeNode) e .getPath().getLastPathComponent(); UserObject userObject = (UserObject) selectedTreeNode .getUserObject(); label.setText(e.getPath() + "\nNode ID:" + userObject.getId()); } }); this.add(new JScrollPane(tree), BorderLayout.CENTER); this.add(label, BorderLayout.SOUTH); this.pack(); this.setVisible(true); } public static void main(String[] args) { new JTreeDemo(); } static class UserObject { String id; String data; public UserObject(String id, String data) { this.id = id; this.data = data; } public String getData() { return data; } public void setData(String data) { this.data = data; } public String getId() { return id; } public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((data == null) ? 0 : data.hashCode()); result = PRIME * result + ((id == null) ? 0 : id.hashCode()); return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final UserObject other = (UserObject) obj; if (data == null) { if (other.data != null) return false; } else if (!data.equals(other.data)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } public String toString() { return this.id + ": " + this.data; } } }
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Danke Tom,
stimmt ein DefaultMutableTreeNode erwartet nicht unbedingt ein String sondern akzeptiert jedes Objekt. Dadurch kann man die Speicherung der ID eine Ebene tiefer nämlich im userObject selbst vornehmen.
Vg Erdal
-
Könnte man hier auch den XMLEncoder/Decoder implementieren? Ich bekomme dort InstantiationException bzw. XMLEncoder: discarding statement XMLEncoder.writeObject(DefaultTreeModel);
Kann also den Baum nicht serialisieren.Geändert von Proggo (14.12.11 um 13:47 Uhr)
-
Ich glaube das Problem kann ich umgehen. Kann mir Jemand erklären, wie ich die ID serialisieren kann per Encoder? Dazu benötigt man glaube Default Persitence Delegate oder? Wie setze ich das richig ein?
sry 4 Doppelpost!
-
Die Frage besteht immernoch. Wie serialisiere ich das erste oder zweite Beispiel per XMLEncoder inkl. ID? Weiß das Niemand?
Ähnliche Themen
-
jTree - Child-Attribute auslesen (XML)
Von H1GHH0o im Forum JavaAntworten: 2Letzter Beitrag: 14.08.07, 08:36 -
JTree Nodes mit Indizes versehen
Von JaX1983 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 16.05.07, 11:11 -
JTree Letzte Node auswählen
Von flashOr im Forum JavaAntworten: 1Letzter Beitrag: 07.12.05, 06:26 -
Knoten-Attribute einer xsd-Datei in einem JTree auslesen
Von Perplex im Forum XML TechnologienAntworten: 0Letzter Beitrag: 20.07.05, 18:24 -
JTree mit Tooltips per Node
Von nero110 im Forum JavaAntworten: 4Letzter Beitrag: 08.07.05, 16:45





Zitieren

Login





