Advertisement
Guest User

Incomplete sample for tree "highlighter" renderer

a guest
Dec 2nd, 2013
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.69 KB | None | 0 0
  1. private void fireHighlightDocumentChanged(final JTextField txt) {
  2.         TreeCellRenderer renderer = ttActivity.getTreeCellRenderer();
  3.        
  4.         String search = txt.getText().trim();
  5.        
  6.         if (renderer instanceof JXTree.DelegatingRenderer) {
  7.             renderer = ((JXTree.DelegatingRenderer)renderer).getDelegateRenderer();
  8.         }
  9.        
  10.         if (renderer instanceof GanttActivityTreeCellRenderer) {
  11.             GanttActivityTreeCellRenderer r = (GanttActivityTreeCellRenderer)renderer;
  12.             r.setHighlightString(search);
  13.             search = search.toLowerCase();
  14.            
  15.             if (Strings.isNullOrEmpty(search)) {
  16.                 ttActivity.expandAll();
  17.                 ttActivity.repaint();
  18.                 return; // -->
  19.             }
  20.            
  21.             IterableIterator<Activity> it = model.activityPreorderIterator();
  22.            
  23.             ttActivity.collapseAll();
  24.            
  25.             Set<Activity> set = Sets.newHashSet();
  26.             Activity first = null;
  27.            
  28.             while (it.hasNext()) {
  29.                 Activity a = it.next();
  30.                 if (a.getDescription().toLowerCase().contains(search)) {
  31.                    
  32.                     if (null == first) {
  33.                         first = a;
  34.                     }
  35.                    
  36.                     if (!model.isParent(a)) {
  37.                         a = model.getParent(a);
  38.                     } else if (model.getParent(a) != null) {
  39.                         a = model.getParent(a);
  40.                     }
  41.                     set.add(a);
  42.                 }
  43.             }
  44.            
  45.             for (Activity a : set) {
  46.                 ttActivity.expandPath(ttActivity.getTreePath(a));
  47.             }
  48.            
  49.             if (null != first) {
  50.                 ttActivity.scrollPathToVisible(ttActivity.getTreePath(first));
  51.             }
  52.         }
  53.     }
  54.  
  55. // ------------
  56.  
  57. public class GanttActivityTreeCellRenderer extends DefaultTreeCellRenderer {
  58.  
  59.     private Pattern pattern = null;
  60.     private String search = null;
  61.  
  62.     public GanttActivityTreeCellRenderer() {
  63.     }
  64.  
  65.     public void setHighlightString(String search) {
  66.         this.search = Strings.emptyToNull(search);
  67.         this.pattern = Pattern.compile(String.format("(?i)(%s)", Pattern.quote(search)));
  68.     }
  69.    
  70.     @Override
  71.     public void updateUI() {
  72.         setTextSelectionColor(null);
  73.         setTextNonSelectionColor(null);
  74.         setBackgroundSelectionColor(null);
  75.         setBackgroundNonSelectionColor(null);
  76.         super.updateUI();
  77.     }
  78.  
  79.     @Override
  80.     public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
  81.         JLabel renderer = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
  82.         renderer.setOpaque(false);
  83.  
  84.         if (value instanceof Activity) {
  85.             Activity a = (Activity) value;
  86.  
  87.             // Icons
  88.             renderer.setIcon(NodeType.get(a).getIcon(expanded));
  89.             if (null == a.getParentId() && null == a.getModel().getActivityWBS(a.getActivityId())) {
  90.                 renderer.setIcon(NodeType.ROOT.getIcon(expanded));
  91.             }
  92.  
  93.             // Search Highlight
  94.             if (!selected && !Strings.isNullOrEmpty(search)) {
  95.                 if (a.getDescription().toLowerCase().contains(search.toLowerCase())) {
  96.                     renderer.setOpaque(true);
  97.                     renderer.setText(text2htmlHighlithed(getText(), search));
  98.                     renderer.setForeground(getTextNonSelectionColor());
  99.                 }
  100.             }
  101.  
  102.             String text = a.isFinished() ? String.format("<s>%s", getText()) : getText();
  103.  
  104.             boolean isLeaf = a.getModel().isLeaf(a);
  105.  
  106.             if (a.isMilestone()) {
  107.                 renderer.setText(String.format("<html><font color=#B20000>%s", text)); // red
  108.             } else if ((a.isFinished() && !a.isOpened()) || (!isLeaf && a.isFinished())) {
  109.                 renderer.setText(String.format("<html><font color=#7F7F7F>%s", text)); // gray
  110.             } else if (a.isOpened() && isLeaf) {
  111.                 renderer.setText(String.format("<html><font color=#006C00>%s", text)); // green
  112.             }
  113.         }
  114.  
  115.         return renderer;
  116.     }
  117.  
  118.     private String text2htmlHighlithed(String text, String search) {
  119.         String out = search;
  120.         Matcher m = pattern.matcher(text);
  121.         if (m.find()) {
  122.             out = m.replaceAll("<font bgcolor=#FFFF00>$0<font>"); // replace with matched group, to preserve case of that match
  123.         }
  124.  
  125.         return String.format("<html>%s", out);
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement