JTree am Child ein Element zufügen

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:
forum01.JPG

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:
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:
forum03.JPG


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
 

Neue Beiträge

Zurück