View Javadoc

1   package org.catacomb.druid.swing;
2   
3   import javax.swing.JPanel;
4   import java.awt.Component;
5   import javax.swing.tree.*;
6   import java.awt.BorderLayout;
7   
8   import javax.swing.JTree;
9   
10  
11  public class CheckTreeRenderer extends JPanel implements TreeCellRenderer {
12      private static final long serialVersionUID = 1L;
13  
14      private CheckTreeSelectionModel selectionModel;
15      private TreeCellRenderer delegate;
16      private TristateCheckBox checkBox = new TristateCheckBox();
17  
18  
19      public CheckTreeRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel) {
20          this.delegate = delegate;
21          this.selectionModel = selectionModel;
22          setLayout(new BorderLayout());
23          setOpaque(false);
24          checkBox.setOpaque(false);
25      }
26  
27  
28      public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
29              boolean expanded, boolean leaf, int row, boolean hasFocus) {
30          Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
31  
32          TreePath path = tree.getPathForRow(row);
33          if (path != null) {
34              if (selectionModel.isPathSelected(path, true))
35                  checkBox.setBooleanState(Boolean.TRUE);
36              else
37                  checkBox.setBooleanState(selectionModel.isPartiallySelected(path) ? null : Boolean.FALSE);
38          }
39          removeAll();
40          add(checkBox, BorderLayout.WEST);
41          add(renderer, BorderLayout.CENTER);
42          return this;
43      }
44  }