1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.jadira.dependencynavigator.gui;
19
20 import java.awt.Color;
21 import java.awt.Component;
22 import java.awt.Dimension;
23 import java.awt.Font;
24 import java.awt.FontMetrics;
25
26 import javax.swing.BorderFactory;
27 import javax.swing.JTree;
28 import javax.swing.tree.DefaultTreeCellRenderer;
29
30 import org.jadira.dependencynavigator.model.Artifact;
31
32 public class DependencyTreeRenderer extends DefaultTreeCellRenderer {
33
34 private static final long serialVersionUID = -4604073586040441112L;
35
36 @Override
37 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
38 DefaultTreeCellRenderer r = (DefaultTreeCellRenderer) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
39 Artifact artifact = (Artifact) value;
40 r.setForeground(Color.BLACK);
41 r.setBackground(Color.WHITE);
42 r.setOpaque(true);
43 if (selected) {
44 r.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
45 } else {
46 r.setBorder(null);
47 }
48 if (Artifact.SELECTED_NONE == artifact.getSelected()) {
49 r.setFont(r.getFont().deriveFont(Font.PLAIN));
50 } else {
51 r.setFont(r.getFont().deriveFont(Font.BOLD));
52 if (Artifact.SELECTED_PRINCIPLE == artifact.getSelected()) {
53 r.setBackground(Color.YELLOW);
54 }
55 }
56 return r;
57 }
58
59
60
61
62
63
64 @Override
65 public Dimension getPreferredSize() {
66 Dimension dim = super.getPreferredSize();
67 FontMetrics fm = getFontMetrics(getFont());
68 char[] chars = getText().toCharArray();
69
70
71
72
73
74
75 int w = getIconTextGap() + 16;
76 for (int i = 0; i < chars.length; i++) {
77 w += fm.charWidth(chars[i]);
78 }
79 w += getText().length();
80 dim.width = w;
81 return dim;
82 }
83 }