Swing JTree Filter Suche mit Collapse?!

ElJarno

Bekanntes Mitglied
Hi Leute,
würde gerne so eine Filtersuche realisieren wie sie bei Eclipse in den Einstellungen auch verwendet wird. Sprich man gibt ein Suchbegriff und der Baum wird dann dementsprechend aufgeklappt. Nicht passende Begriffe werden entfernt oder ausgeblendet.
Hab schon hinbekommen den Baum an der richtigen stelle aufzuklappen jedoch werden sie nicht wieder zugeklappt. Dass auch nur diejenigen sichtbar sind würde man glaub ich nicht über remove lösen oder? wäre dann schwierig, man müsste ja dann sich den Ursprung des TreeModel weg schreiben. Nett wär auch noch wenn die TreePaths fett markiert werden. einfach mal die Einstellungen gucken, dann weiß man wie ich das mein. Hier mal en kleiner Ansatz:
Java:
	private void expandAll(JTree tree, TreePath parent, boolean expand,
			String text) {
		TreeNode node = (TreeNode) parent.getLastPathComponent();
		if (node.getChildCount() >= 0) {
			for (Enumeration e = node.children(); e.hasMoreElements();) {
				TreeNode n = (TreeNode) e.nextElement();
				TreePath path = parent.pathByAddingChild(n);
				expandAll(tree, path, expand, text);
			}
		}
		if (node.toString().toLowerCase().contains(text.toLowerCase())) {
			tree.collapsePath(parent);
		} else if(node.isLeaf()) {
			((DefaultTreeModel) tree.getModel())
					.removeNodeFromParent((MutableTreeNode) parent
							.getLastPathComponent());
		}
	}

Gruß Jan
 
Sollen dann tatsächlich die nicht betroffenen Äste und Knoten entfernt werden?
Dann würde ich statt aus dem Gesamtmodel die nicht relevanten Knoten zu entfernen, ein neues TreeModel bzw. einen neuen Tree anhand der relevanten Inhalte aufbauen.
 
Ja wie gesagt, mir is es egal ob die Koten drin bleiben oder nicht, nur muss natürlich wenn nach nichts gefilter wird der komplette Baum wieder ersichtlich sein. Wie bei Eclipse halt.

Gruß Jan
 
meiner Meinung solltest du auf jeden Fall ein neues Model erzeugen welches eine abgespeckte Kopie deines original Models ist. Du musst dir ja den ursprünglichen Zustand merken damit du bei einer neuen Filterung eben wieder von diesem ausgehen kannst.
 
Hm. Eigentlich ist das Filtern eher eine Sache der View. Die Daten sind ja noch da, werden aber nicht angezeigt. Einerseits könnte es zwar einfacher (und vielleicht sogar ziemlich elegant) sein, ein Modell zu erzeugen, das eine gefilterte View auf das eigentliche Modell darstellt, aber spätestens wenn es um Diffizilitäten wie den aktuellen "Pfad-Ausklapp-Status" des Baumes geht, ist das etwas, was ja nur in der View stehen kann. Sollte man mal genauer drüber nachdenken.
 

Zurück
Oben