1 package org.mc4j.console.swing.treetable; 2 3 16 17 import javax.swing.JTree ; 18 import javax.swing.SwingUtilities ; 19 import javax.swing.event.TreeExpansionEvent ; 20 import javax.swing.event.TreeExpansionListener ; 21 import javax.swing.event.TreeModelEvent ; 22 import javax.swing.event.TreeModelListener ; 23 import javax.swing.table.AbstractTableModel ; 24 import javax.swing.tree.TreePath ; 25 26 37 public class TreeTableModelAdapter extends AbstractTableModel 38 { 39 JTree tree; 40 TreeTableModel treeTableModel; 41 42 public TreeTableModelAdapter(TreeTableModel treeTableModel, JTree tree) { 43 this.tree = tree; 44 this.treeTableModel = treeTableModel; 45 46 tree.addTreeExpansionListener(new TreeExpansionListener () { 47 public void treeExpanded(TreeExpansionEvent event) { 50 fireTableDataChanged(); 51 } 52 public void treeCollapsed(TreeExpansionEvent event) { 53 fireTableDataChanged(); 54 } 55 }); 56 57 treeTableModel.addTreeModelListener(new TreeModelListener () { 62 public void treeNodesChanged(TreeModelEvent e) { 63 delayedFireTableDataChanged(); 64 } 65 66 public void treeNodesInserted(TreeModelEvent e) { 67 delayedFireTableDataChanged(); 68 } 69 70 public void treeNodesRemoved(TreeModelEvent e) { 71 delayedFireTableDataChanged(); 72 } 73 74 public void treeStructureChanged(TreeModelEvent e) { 75 delayedFireTableDataChanged(); 76 } 77 }); 78 } 79 80 82 public int getColumnCount() { 83 return treeTableModel.getColumnCount(); 84 } 85 86 public String getColumnName(int column) { 87 return treeTableModel.getColumnName(column); 88 } 89 90 public Class getColumnClass(int column) { 91 return treeTableModel.getColumnClass(column); 92 } 93 94 public int getRowCount() { 95 return tree.getRowCount(); 96 } 97 98 protected Object nodeForRow(int row) { 99 TreePath treePath = tree.getPathForRow(row); 100 return treePath.getLastPathComponent(); 101 } 102 103 public Object getValueAt(int row, int column) { 104 return treeTableModel.getValueAt(nodeForRow(row), column); 105 } 106 107 public boolean isCellEditable(int row, int column) { 108 return treeTableModel.isCellEditable(nodeForRow(row), column); 109 } 110 111 public void setValueAt(Object value, int row, int column) { 112 treeTableModel.setValueAt(value, nodeForRow(row), column); 113 } 114 115 119 protected void delayedFireTableDataChanged() { 120 SwingUtilities.invokeLater(new Runnable () { 121 public void run() { 122 fireTableDataChanged(); 123 } 124 }); 125 } 126 } 127 128 | Popular Tags |