protected void installSpeedSearch() { final TreeSpeedSearch treeSpeedSearch = new TreeSpeedSearch( myTree, new Convertor<TreePath, String>() { @Override @Nullable public String convert(TreePath path) { final ElementNode lastPathComponent = (ElementNode) path.getLastPathComponent(); if (lastPathComponent == null) return null; String text = lastPathComponent.getDelegate().getText(); if (text != null) { int i = text.indexOf(':'); if (i >= 0) { text = text.substring(0, i); } i = text.indexOf('('); if (i >= 0) { text = text.substring(0, i); } } return text; } }); treeSpeedSearch.setComparator(getSpeedSearchComparator()); treeSpeedSearch.addChangeListener( new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { myTree.repaint(); // to update match highlighting } }); }