1 |
package skrueger.swing.checkboxtree; |
2 |
|
3 |
import java.awt.Color; |
4 |
import java.awt.Component; |
5 |
import java.awt.Font; |
6 |
|
7 |
import javax.swing.BorderFactory; |
8 |
import javax.swing.JCheckBox; |
9 |
import javax.swing.JTree; |
10 |
import javax.swing.UIManager; |
11 |
import javax.swing.tree.DefaultMutableTreeNode; |
12 |
import javax.swing.tree.DefaultTreeCellRenderer; |
13 |
import javax.swing.tree.TreeCellRenderer; |
14 |
|
15 |
public class CheckBoxNodeRenderer implements TreeCellRenderer { |
16 |
protected JCheckBox leafRenderer = new JCheckBox(); |
17 |
|
18 |
protected DefaultTreeCellRenderer nonLeafRenderer = new DefaultTreeCellRenderer(); |
19 |
|
20 |
Color selectionBorderColor; |
21 |
|
22 |
protected Color selectionForeground; |
23 |
|
24 |
protected Color selectionBackground; |
25 |
|
26 |
protected Color textForeground; |
27 |
|
28 |
protected Color textBackground; |
29 |
|
30 |
public JCheckBox getLeafRenderer() { |
31 |
return leafRenderer; |
32 |
} |
33 |
|
34 |
public CheckBoxNodeRenderer() { |
35 |
Font fontValue; |
36 |
fontValue = UIManager.getFont("Tree.font"); |
37 |
if (fontValue != null) { |
38 |
leafRenderer.setFont(fontValue); |
39 |
} |
40 |
Boolean booleanValue = (Boolean) UIManager |
41 |
.get("Tree.drawsFocusBorderAroundIcon"); |
42 |
leafRenderer.setFocusPainted((booleanValue != null) |
43 |
&& (booleanValue.booleanValue())); |
44 |
|
45 |
leafRenderer.setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); |
46 |
|
47 |
selectionBorderColor = UIManager.getColor("Tree.selectionBorderColor"); |
48 |
selectionForeground = UIManager.getColor("Tree.selectionForeground"); |
49 |
selectionBackground = UIManager.getColor("Tree.selectionBackground"); |
50 |
textForeground = UIManager.getColor("Tree.textForeground"); |
51 |
textBackground = UIManager.getColor("Tree.textBackground"); |
52 |
} |
53 |
|
54 |
public Component getTreeCellRendererComponent(JTree tree, Object value, |
55 |
boolean selected, boolean expanded, boolean leaf, int row, |
56 |
boolean hasFocus) { |
57 |
|
58 |
Component returnValue; |
59 |
if (leaf) { |
60 |
|
61 |
String stringValue = tree.convertValueToText(value, selected, |
62 |
expanded, leaf, row, false); |
63 |
leafRenderer.setText(stringValue); |
64 |
leafRenderer.setSelected(false); |
65 |
|
66 |
leafRenderer.setEnabled(tree.isEnabled()); |
67 |
|
68 |
if (selected) { |
69 |
leafRenderer.setForeground(selectionForeground); |
70 |
leafRenderer.setBackground(selectionBackground); |
71 |
} else { |
72 |
leafRenderer.setForeground(textForeground); |
73 |
leafRenderer.setBackground(textBackground); |
74 |
} |
75 |
|
76 |
if ((value != null) && (value instanceof DefaultMutableTreeNode)) { |
77 |
Object userObject = ((DefaultMutableTreeNode) value) |
78 |
.getUserObject(); |
79 |
if (userObject instanceof CheckBoxNode) { |
80 |
CheckBoxNode node = (CheckBoxNode) userObject; |
81 |
leafRenderer.setText(node.getText()); |
82 |
leafRenderer.setSelected(node.isSelected()); |
83 |
} |
84 |
|
85 |
} |
86 |
returnValue = leafRenderer; |
87 |
} else { |
88 |
returnValue = nonLeafRenderer.getTreeCellRendererComponent(tree, |
89 |
value, selected, expanded, leaf, row, hasFocus); |
90 |
} |
91 |
return returnValue; |
92 |
} |
93 |
} |