1 package edu.jiangxin.apktoolbox.swing.treetable;
2
3 import java.awt.Component;
4 import java.awt.Graphics;
5 import java.io.Serial;
6
7 import javax.swing.JTable;
8 import javax.swing.JTree;
9 import javax.swing.table.TableCellRenderer;
10 import javax.swing.tree.TreeModel;
11
12
13 public class MyTreeTableCellRenderer extends JTree implements TableCellRenderer {
14 @Serial
15 private static final long serialVersionUID = 1L;
16
17
18 protected int visibleRow;
19
20 private MyTreeTable treeTable;
21
22 public MyTreeTableCellRenderer(MyTreeTable treeTable, TreeModel model) {
23 super(model);
24 this.treeTable = treeTable;
25 }
26
27
28 public void initialize() {
29
30
31
32 setRowHeight(getRowHeight());
33 }
34
35
36
37
38 public void setRowHeight(int rowHeight) {
39 if (rowHeight > 0) {
40 super.setRowHeight(rowHeight);
41 if (treeTable != null && treeTable.getRowHeight() != rowHeight) {
42 treeTable.setRowHeight(getRowHeight());
43 }
44 }
45 }
46
47
48
49
50 public void setBounds(int x, int y, int w, int h) {
51 super.setBounds(x, 0, w, treeTable.getHeight());
52 }
53
54
55
56
57 public void paint(Graphics g) {
58 g.translate(0, -visibleRow * getRowHeight());
59
60 super.paint(g);
61 }
62
63
64
65
66 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
67 if (isSelected)
68 setBackground(table.getSelectionBackground());
69 else
70 setBackground(table.getBackground());
71
72 visibleRow = row;
73 return this;
74 }
75 }