Java tutorial
import java.awt.BorderLayout; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.text.Position; import javax.swing.tree.TreePath; public class Main { JTree tree = new JTree(); Main() { JPanel p = new JPanel(new BorderLayout(2, 2)); JTextField find = new JTextField("food:pizza"); find.addActionListener(e -> { boolean found = findText(find.getText()); System.out.println(find.getText() + " found " + found); }); p.add(find, BorderLayout.PAGE_START); tree.setVisibleRowCount(8); for (int row = tree.getRowCount(); row >= 0; row--) { tree.expandRow(row); } p.add(new JScrollPane(tree), BorderLayout.CENTER); JOptionPane.showMessageDialog(null, p); } public boolean findText(String nodes) { String[] parts = nodes.split(":"); TreePath path = null; for (String part : parts) { int row = (path == null ? 0 : tree.getRowForPath(path)); path = tree.getNextMatch(part, row, Position.Bias.Forward); if (path == null) { return false; } } tree.scrollPathToVisible(path); tree.setSelectionPath(path); return path != null; } public static void main(String[] args) { new Main(); } }