1 |
alfonx |
714 |
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 |
|
|
} |