1 package edu.jiangxin.apktoolbox.swing.treetable;
2
3 import javax.swing.JTree;
4 import javax.swing.event.TreeExpansionEvent;
5 import javax.swing.event.TreeExpansionListener;
6 import javax.swing.table.AbstractTableModel;
7 import javax.swing.tree.TreePath;
8 import java.io.Serial;
9
10 public class MyTreeTableModelAdapter extends AbstractTableModel {
11 @Serial
12 private static final long serialVersionUID = 1L;
13
14 JTree tree;
15 transient MyAbstractTreeTableModel treeTableModel;
16
17 public MyTreeTableModelAdapter(MyAbstractTreeTableModel treeTableModel, JTree tree) {
18 this.tree = tree;
19 this.treeTableModel = treeTableModel;
20
21 tree.addTreeExpansionListener(new TreeExpansionListener() {
22 public void treeExpanded(TreeExpansionEvent event) {
23 fireTableDataChanged();
24 }
25
26 public void treeCollapsed(TreeExpansionEvent event) {
27 fireTableDataChanged();
28 }
29 });
30 }
31
32
33
34 public int getColumnCount() {
35 return treeTableModel.getColumnCount();
36 }
37
38 public String getColumnName(int column) {
39 return treeTableModel.getColumnName(column);
40 }
41
42 public Class<?> getColumnClass(int column) {
43 return treeTableModel.getColumnClass(column);
44 }
45
46 public int getRowCount() {
47 return tree.getRowCount();
48 }
49
50 protected Object nodeForRow(int row) {
51 TreePath treePath = tree.getPathForRow(row);
52 return treePath.getLastPathComponent();
53 }
54
55 public Object getValueAt(int row, int column) {
56 return treeTableModel.getValueAt(nodeForRow(row), column);
57 }
58
59 public boolean isCellEditable(int row, int column) {
60 return treeTableModel.isCellEditable(nodeForRow(row), column);
61 }
62
63 public void setValueAt(Object value, int row, int column) {
64 treeTableModel.setValueAt(value, nodeForRow(row), column);
65 }
66 }