Anzeige:
Ergebnis 1 bis 4 von 4

Thema: in JTree suchen?

  1. #1
    Registrierter Benutzer Avatar von lousypoetry
    Registriert seit
    10.04.2005
    Beiträge
    56

    in JTree suchen?

    Hi,

    ich hab einen JTree mit einem DefaultTreeModel. In dem Baum befi[/CODE]nden sich jetzt Knoten mit wiederum Kindknoten. Gibt es eine vordefinierte Funktion zum Suchen innerhalb dieses Baumes?

    Hab versucht, selbst eine zu schreiben, komm aber nicht weiter:

    Code:
    private void findNode(String node) {
    		
    	DefaultNode tmp = (DefaultNode) treeModel.getRoot();
    	
            // so noch nicht richtig, nur mal ganz ganz grob	
    	while(tmp != null) {
    		if(tmp.getNodeValue().equals(node)) {
    			System.out.println("found!");
    		}
    		else {
    			tmp = (DefaultNode) tmp.getFirstChild();
    		}
    	}
    }
    Das Problem ist eine ClassCastException in der ersten Zeile, das scheint so also nicht zu funktionieren. Hat jemand von euch da eine Idee? Danke!

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.11.2004
    Beiträge
    122
    Hallo.
    Ich schaetze mal, DefaultNode wird abstrakt sein.
    Nimm doch mal TreeNode.

    Gruß
    Kai

  3. #3
    Registrierter Benutzer Avatar von lousypoetry
    Registriert seit
    10.04.2005
    Beiträge
    56
    Das ist ne gute Idee, jetzt klappt es!

    Hätte aber noch eine Frage: jetzt hab ich meinen Knoten gesucht (und gefunden) und möchte nun, dass er selektiert bzw. markiert wird. Am günstigsten scheint mit das mit setSelectionPath() zu funktionieren. Aber: wie komme ich nun von meinem gefundenen Knoten an der TreePath?
    Angenommen mein gesuchter Knoten ist ein DefaultMutableTreeNode mit dem Namen "tmp", tmp.getPath() liefert mir ein Array von TreeNodes zurück, kann ich aus diesem Array jetzt irgendwie einen TreePath erstellen, sodass ich setSelectionPath() benutzen kann?

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.11.2004
    Beiträge
    122
    Hallo poetry.
    Also ich hab das jetzt auch mit dem SelectionModel getestet, aber das scheint doch sehr kompliziert zu sein.

    Es geht ganz einfach mit JTree.setSelectionRow().

    Gruß
    Kai

    PS:
    Die Suchfunktion habe ich so gemacht:
    Code:
    	private int findNode(String nodeName)
    	{
    		TreeNode root = (TreeNode)jtree.getModel().getRoot();
    		
    		for (int i = 0; i < root.getChildCount(); ++i) {
    			TreeNode child = root.getChildAt(i);
    			
    			if (child.toString().equals(nodeName)) {
    				return i;
    			}
    		}
    		 
    		return -1;
    	}

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •