Hallo,

ich stehe gerade vor einem Problem.

ich muss für die UNI ein Forum basteln und wollte dies mit hilfe eines JTree realisieren.

Das Verzeichniss sieht mit den Defaulteinträgen so aus:
Name:  forum01.JPG
Hits: 22
Größe:  19,0 KB

Nun soweit gut. Jetzt habe ich Testweise eine Taste eingefügt mit dem ich neue Einträge an der selektierten Position einfügen kann. Funktioniert einwandfrei. Ich möchte aber keine weiteren verzweigungen

Also so nicht:
JTree am Child ein Element zufügen-forum02.jpg

Ich weiß nicht wie ich es anstellen muss damit er immer ein Blatt (leaf) an den Ast (child) anhängt.

Wenn ich das Thema auswähle erstellt er ja das Blatt an der richtigen Stelle.
Also sollte es so aussehen:
JTree am Child ein Element zufügen-forum03.jpg


Und hier mal ein kleiner Auszug von meinem Code:
Code :
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
// Tree für das Board
    protected DefaultMutableTreeNode    TreeBoardRoot;
    protected DefaultTreeModel          TreeBoardTreeModel;
    protected JTree                     TreeBoard;
 
// Konstruktor
public Board(){
...
...
// Tree erstellen
        InitializeBoardTree();
        TreeBoard = new JTree(TreeBoardTreeModel);
        TreeSelectionModel tsm = new DefaultTreeSelectionModel();
        tsm.setSelectionMode((TreeSelectionModel.SINGLE_TREE_SELECTION));
        TreeBoard.setSelectionModel(tsm);
        TreeBoard.setRootVisible(true);
}
 
 
//Hier wird der Baum gefüllt mit Defaulteinträgen (initalisiert)
    private void InitializeBoardTree(){
    
        // set default entry
        // Erstellt die Hauptwurzel vom Tree
        TreeBoardRoot = new DefaultMutableTreeNode(new ThemeData("Das Board"));
 
        
        
        // Erstellt eine Kategorie
        DefaultMutableTreeNode BoardCategory = new DefaultMutableTreeNode(new ThemeData("Kategorie I", 1));
        
        
        
        // Erstellt ein Thema und fügt es in die Kategorie ein
        DefaultMutableTreeNode BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema I (02.01.2008 - 18:30)", "Text für Thema 1"));
        BoardCategory.add(BoardTheme);
        
        // Erstellt ein Eintrag zum Thema
        DefaultMutableTreeNode BoardEntry = new DefaultMutableTreeNode(new ThemeData("Antwort I (02.01.2008 - 19:00)", "Antwort 1"));
        BoardTheme.add(BoardEntry);
        
//       Erstellt ein Eintrag zum Thema
        BoardEntry = new DefaultMutableTreeNode(new ThemeData("Antwort II (02.01.2008 - 19:03)", "Antwort 2"));
        BoardTheme.add(BoardEntry);
        
//       Erstellt ein Thema und fügt es in die Kategorie ein
        BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema II (02.01.2008 - 18:37)", "Text für Thema 2"));
        BoardCategory.add(BoardTheme);
        
//       Erstellt ein Eintrag zum Thema
        BoardEntry = new DefaultMutableTreeNode(new ThemeData("Antwort I (02.01.2008 - 19:05)", "Antwort 1"));
        BoardTheme.add(BoardEntry);
        
//       Erstellt ein Thema und fügt es in die Kategorie ein
        BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema III (02.01.2008 - 18:43)", "Text für Thema 3"));
        BoardCategory.add(BoardTheme);
        
        // Fügt die Kategorie mit den Themen in die Wurzel ein
        TreeBoardRoot.add(BoardCategory);
        
        // Erstellt eine weitere Kategorie
        BoardCategory = new DefaultMutableTreeNode(new ThemeData("Kategorie II", 2));
        
        // Erstellt ein Thema für die vorherige Kategorie
        BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema A (02.01.2008 - 18:45)", "Text für Thema A"));
        BoardCategory.add(BoardTheme);
        
        BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema B (02.01.2008 - 18:48)", "Text für Thema B"));
        BoardCategory.add(BoardTheme);
        
        BoardTheme = new DefaultMutableTreeNode(new ThemeData("Thema C (02.01.2008 - 18:53)", "Text für Thema C"));
        BoardCategory.add(BoardTheme);
        
        // Fügt die Kategorie mit den Themen in die Wurzel ein
        TreeBoardRoot.add(BoardCategory);
        TreeBoardTreeModel = new DefaultTreeModel(TreeBoardRoot);
        
    }
 
 
// Hier werden die UserObjekte für den Tree eingefügt
    private class ThemeData {
        public String themetitle = null;
        public String themetext = null;
        public int moderatelevel = -1;
 
        public ThemeData(String title, String text) {
            themetitle = title;
            themetext = text;
        }
        
        public ThemeData(String title, String text, int level) {
            themetitle = title;
            themetext = text;
            moderatelevel = level;
        }
        
        public ThemeData(String title, int level) {
            themetitle = title;
            moderatelevel = level;
        }
        
        public ThemeData(String title) {
            themetitle = title;
        }
        
        // Liefert den Titel wieder für den Baum zurück. Damit der Titel in den Baum eingetragen wird
        public String toString() {
            return themetitle;
        }
    }

Das hier ist der Codeabschnitt der dafür zuständig ist immer an der selektierten stelle ein Blatt anzuhängen:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private void addTreeEntry(String title, String text){
        
        TreePath tp = TreeBoard.getLeadSelectionPath();
        
        if (tp != null){
            DefaultMutableTreeNode node;
            node = (DefaultMutableTreeNode)tp.getLastPathComponent();
            DefaultMutableTreeNode child;
            child = new DefaultMutableTreeNode(new ThemeData("Child", "Und der Text dazu"));
            
            TreeBoardTreeModel.insertNodeInto(child, node, node.getChildCount());
            TreeNode[] path = TreeBoardTreeModel.getPathToRoot(node);
            TreeBoard.expandPath(new TreePath(path));
        }


Schuld an der Sache ist bestimmt das hier:
Code :
1
2
3
4
5
TreePath tp = TreeBoard.getLeadSelectionPath();
 
//und:
 
node = (DefaultMutableTreeNode)tp.getLastPathComponent();


Er soll halt immer am Child einfügen.

Ich hoffe ich habe mich verständlich ausgedrückt

Vielen vielen Dank.

Grüße