1 package net.logAnalyzer.utils.gui.treetable;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import javax.swing.*;
25 import javax.swing.border.BevelBorder;
26 import javax.swing.border.LineBorder;
27 import javax.swing.plaf.ComponentUI;
28 import javax.swing.plaf.TreeUI;
29 import javax.swing.plaf.basic.BasicTreeUI;
30 import javax.swing.plaf.metal.MetalTreeUI;
31 import javax.swing.tree.*;
32 import javax.swing.table.*;
33
34 import java.awt.Color;
35 import java.awt.Dimension;
36 import java.awt.Component;
37 import java.awt.Graphics;
38
39 /***
40 * This example shows how to create a simple JTreeTable component, by using a JTree as a renderer
41 * (and editor) for the cells in a particular column in the JTable.
42 * @version %I% %G%
43 * @author Philip Milne
44 * @author Scott Violet
45 */
46
47 public class JTreeTable extends JTable {
48 protected TreeTableCellRenderer tree;
49
50 public JTreeTable(TreeTableModel treeTableModel) {
51 super();
52
53
54
55 this.setShowGrid(false);
56
57 this.setIntercellSpacing(new Dimension(0, 0));
58
59
60 this.tree = new TreeTableCellRenderer(treeTableModel);
61
62
63 super.setModel(new TreeTableModelAdapter(treeTableModel, this.tree));
64
65
66 this.tree.setSelectionModel(new DefaultTreeSelectionModel() {
67 {
68 setSelectionModel(this.listSelectionModel);
69 }
70 });
71
72 this.tree.setRowHeight(getRowHeight());
73
74
75 setDefaultRenderer(TreeTableModel.class, this.tree);
76 setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
77 }
78
79
80
81
82
83
84
85 public int getEditingRow() {
86 return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 : editingRow;
87 }
88
89 public void setTreeCellRenderer(TreeCellRenderer treeRenderer) {
90 this.tree.setCellRenderer(treeRenderer);
91 }
92
93
94
95
96
97
98 public class TreeTableCellRenderer extends JTree implements TableCellRenderer {
99
100 protected int visibleRow;
101
102 private final boolean initialized;
103
104 public TreeTableCellRenderer(TreeModel model) {
105 super(model);
106 this.initialized = true;
107 this.setUI(this.getUI());
108 }
109
110
111
112
113
114 public void setUI(TreeUI ui) {
115 if (this.initialized && !(ui instanceof TableTreeUI)) {
116 ui = new TableTreeUI(ui, JTreeTable.this.getGridColor());
117 }
118
119 super.setUI(ui);
120 }
121
122 public void setBounds(int x, int y, int w, int h) {
123 super.setBounds(x, 0, w, JTreeTable.this.getHeight());
124 }
125
126 public void paint(Graphics g) {
127 g.translate(0, -visibleRow * getRowHeight());
128 super.paint(g);
129 }
130
131 public Component getTableCellRendererComponent(JTable table, Object value,
132 boolean isSelected, boolean hasFocus, int row, int column) {
133 if (isSelected)
134 setBackground(table.getSelectionBackground());
135 else
136 setBackground(table.getBackground());
137 setBorder(BorderFactory.createLineBorder(JTreeTable.this.getGridColor()));
138 ((TableTreeUI)getUI()).setLineColor(JTreeTable.this.getGridColor());
139 visibleRow = row;
140 return this;
141 }
142 }
143
144
145
146
147
148 public class TreeTableCellEditor extends AbstractCellEditor implements TableCellEditor {
149 public Component getTableCellEditorComponent(JTable table, Object value,
150 boolean isSelected, int r, int c) {
151 return tree;
152 }
153 }
154
155 }