2 * CheckTreeCellRenderer.java
4 package net.sf.openrocket.gui.print.components;
6 import javax.swing.JCheckBox;
7 import javax.swing.JPanel;
8 import javax.swing.JTree;
9 import javax.swing.tree.DefaultMutableTreeNode;
10 import javax.swing.tree.DefaultTreeCellRenderer;
11 import javax.swing.tree.TreeCellRenderer;
12 import javax.swing.tree.TreePath;
13 import java.awt.BorderLayout;
14 import java.awt.Component;
17 * A cell renderer for JCheckBoxes within nodes of a JTree.
19 * Based in part on a blog by Santhosh Kumar. http://www.jroller.com/santhosh/date/20050610
21 public class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer {
24 * The selection model.
26 private CheckTreeSelectionModel selectionModel;
28 * The delegated cell renderer.
30 private DefaultTreeCellRenderer delegate;
32 * The check box within this cell.
34 private JCheckBox checkBox = new JCheckBox();
39 * @param theDelegate the delegated cell renderer
40 * @param theSelectionModel the selection model
42 public CheckTreeCellRenderer (DefaultTreeCellRenderer theDelegate, CheckTreeSelectionModel theSelectionModel) {
43 delegate = theDelegate;
45 delegate.setLeafIcon(null);
46 delegate.setClosedIcon(null);
47 delegate.setOpenIcon(null);
50 selectionModel = theSelectionModel;
51 setLayout(new BorderLayout());
53 checkBox.setOpaque(false);
54 checkBox.setSelected(true);
61 public Component getTreeCellRendererComponent (JTree tree, Object value, boolean selected, boolean expanded,
62 boolean leaf, int row, boolean hasFocus) {
63 Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row,
66 TreePath path = tree.getPathForRow(row);
68 final boolean b = selectionModel.isPathSelected(path, true);
69 checkBox.setSelected(b);
70 if (value instanceof DefaultMutableTreeNode) {
71 Object obj = ((DefaultMutableTreeNode) value).getUserObject();
72 if (obj instanceof CheckBoxNode) {
73 ((CheckBoxNode) obj).setSelected(b);
79 add(checkBox, BorderLayout.WEST);
80 add(renderer, BorderLayout.CENTER);