ShadowmanTDC
Grünschnabel
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:

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:

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:

Und hier mal ein kleiner Auszug von meinem Code:
Das hier ist der Codeabschnitt der dafür zuständig ist immer an der selektierten stelle ein Blatt anzuhängen:
Schuld an der Sache ist bestimmt das hier:
Er soll halt immer am Child einfügen.
Ich hoffe ich habe mich verständlich ausgedrückt
Vielen vielen Dank.
Grüße
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:

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:

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:

Und hier mal ein kleiner Auszug von meinem Code:
Code:
// 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:
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:
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