gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / TreeComboCellRenderer.java @ 2339
History | View | Annotate | Download (2.68 KB)
1 | 1424 | jjdelcerro | package org.gvsig.tools.swing.impl; |
---|---|---|---|
2 | |||
3 | import java.awt.Component; |
||
4 | import javax.swing.ComboBoxModel; |
||
5 | import javax.swing.Icon; |
||
6 | import javax.swing.JLabel; |
||
7 | import javax.swing.JList; |
||
8 | import javax.swing.ListCellRenderer; |
||
9 | import javax.swing.UIManager; |
||
10 | import javax.swing.border.Border; |
||
11 | import javax.swing.border.EmptyBorder; |
||
12 | import javax.swing.tree.DefaultMutableTreeNode; |
||
13 | import org.gvsig.tools.swing.impl.TreeComboUtils.TreeModelToComboBoxModelAdapter; |
||
14 | |||
15 | public class TreeComboCellRenderer extends JLabel implements ListCellRenderer { |
||
16 | |||
17 | private static final long serialVersionUID = 3732251042879578480L; |
||
18 | private static final Border emptyBorder = new EmptyBorder(0, 0, 0, 0); |
||
19 | private static final int OFFSET = 16; |
||
20 | |||
21 | private final Icon leafIcon = (Icon) UIManager.get("Tree.leafIcon"); |
||
22 | private final Icon nodeIcon = (Icon) UIManager.get("Tree.openIcon"); |
||
23 | private final TreeModelToComboBoxModelAdapter model; |
||
24 | |||
25 | public TreeComboCellRenderer(ComboBoxModel model) { |
||
26 | this.setOpaque(true); |
||
27 | this.model = (TreeModelToComboBoxModelAdapter) model;
|
||
28 | } |
||
29 | |||
30 | @Override
|
||
31 | public Component getListCellRendererComponent( |
||
32 | JList listbox,
|
||
33 | Object value,
|
||
34 | int index,
|
||
35 | boolean isSelected,
|
||
36 | boolean cellHasFocus) {
|
||
37 | DefaultMutableTreeNode entry = model.getNode(value);
|
||
38 | if (entry != null) { |
||
39 | Border border;
|
||
40 | setText(getCellText(entry)); |
||
41 | setIcon(getCellIcon(entry)); |
||
42 | if (index != -1) { |
||
43 | border = new EmptyBorder(0, OFFSET * entry.getLevel(), 0, 0); |
||
44 | } else {
|
||
45 | border = emptyBorder; |
||
46 | } |
||
47 | |||
48 | if (UIManager.getLookAndFeel().getName().equals("CDE/Motif")) { |
||
49 | if (index == -1) { |
||
50 | this.setOpaque(false); |
||
51 | } else {
|
||
52 | this.setOpaque(true); |
||
53 | } |
||
54 | } else {
|
||
55 | this.setOpaque(true); |
||
56 | } |
||
57 | |||
58 | this.setBorder(border);
|
||
59 | if (isSelected) {
|
||
60 | this.setBackground(UIManager.getColor("ComboBox.selectionBackground")); |
||
61 | this.setForeground(UIManager.getColor("ComboBox.selectionForeground")); |
||
62 | } else {
|
||
63 | this.setBackground(UIManager.getColor("ComboBox.background")); |
||
64 | this.setForeground(UIManager.getColor("ComboBox.foreground")); |
||
65 | } |
||
66 | } else {
|
||
67 | setText("");
|
||
68 | } |
||
69 | return this; |
||
70 | } |
||
71 | |||
72 | public Icon getCellIcon(DefaultMutableTreeNode node) { |
||
73 | return node.getAllowsChildren() ? nodeIcon : leafIcon;
|
||
74 | } |
||
75 | |||
76 | public String getCellText(DefaultMutableTreeNode node) { |
||
77 | return node.getUserObject().toString();
|
||
78 | } |
||
79 | } |