1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.gui;
21
22 import java.awt.Component;
23 import java.awt.Graphics;
24
25 import javax.swing.JTable;
26 import javax.swing.JTree;
27 import javax.swing.UIManager;
28 import javax.swing.table.TableCellRenderer;
29 import javax.swing.tree.DefaultTreeCellRenderer;
30 import javax.swing.tree.TreeCellRenderer;
31 import javax.swing.tree.TreeModel;
32
33
34
35
36 class TreeTableCellRenderer extends JTree implements
37 TableCellRenderer {
38
39
40
41
42 private static final long serialVersionUID = 4324031590789321581L;
43
44
45 private final TreeTable treeTable;
46
47
48 private int visibleRow;
49
50
51
52
53
54
55 TreeTableCellRenderer(TreeTable treeTable, TreeModel model) {
56 super(model);
57 this.treeTable = treeTable;
58 }
59
60
61
62
63
64 @Override
65 public void updateUI() {
66 super.updateUI();
67
68
69 final TreeCellRenderer tcr = getCellRenderer();
70 if (tcr instanceof DefaultTreeCellRenderer) {
71 final DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tcr;
72
73
74
75
76 renderer.setTextSelectionColor(UIManager.getColor("Table.selectionForeground"));
77 renderer.setBackgroundSelectionColor(UIManager.getColor("Table.selectionBackground"));
78 }
79 }
80
81
82
83
84
85 @Override
86 public void setRowHeight(int newRowHeight) {
87 if (newRowHeight > 0) {
88 super.setRowHeight(newRowHeight);
89 if (treeTable != null
90 && treeTable.getRowHeight() != newRowHeight) {
91 treeTable.setRowHeight(getRowHeight());
92 }
93 }
94 }
95
96
97
98
99 @Override
100 public void setBounds(int x, int y, int w, int h) {
101 super.setBounds(x, 0, w, treeTable.getHeight());
102 }
103
104
105
106
107
108 @Override
109 public void paint(Graphics graph) {
110 graph.translate(0, -visibleRow * getRowHeight());
111 super.paint(graph);
112 }
113
114
115
116
117
118 @Override
119 public Component getTableCellRendererComponent(JTable table,
120 Object value,
121 boolean isSelected,
122 boolean hasFocus,
123 int row, int column) {
124 if (isSelected) {
125 setBackground(table.getSelectionBackground());
126 }
127 else {
128 setBackground(table.getBackground());
129 }
130
131 visibleRow = row;
132 return this;
133 }
134
135 }