1 17 18 package org.sape.carbon.services.swing.treetable; 19 20 33 34 import javax.swing.JTree ; 35 import javax.swing.SwingUtilities ; 36 import javax.swing.event.TreeExpansionEvent ; 37 import javax.swing.event.TreeExpansionListener ; 38 import javax.swing.event.TreeModelEvent ; 39 import javax.swing.event.TreeModelListener ; 40 import javax.swing.table.AbstractTableModel ; 41 import javax.swing.tree.TreePath ; 42 43 54 public class TreeTableModelAdapter extends AbstractTableModel 55 { 56 JTree tree; 57 TreeTableModel treeTableModel; 58 59 public TreeTableModelAdapter(TreeTableModel treeTableModel, JTree tree) { 60 this.tree = tree; 61 this.treeTableModel = treeTableModel; 62 63 tree.addTreeExpansionListener(new TreeExpansionListener () { 64 public void treeExpanded(TreeExpansionEvent event) { 67 fireTableDataChanged(); 68 } 69 public void treeCollapsed(TreeExpansionEvent event) { 70 fireTableDataChanged(); 71 } 72 }); 73 74 treeTableModel.addTreeModelListener(new TreeModelListener () { 79 public void treeNodesChanged(TreeModelEvent e) { 80 delayedFireTableDataChanged(); 81 } 82 83 public void treeNodesInserted(TreeModelEvent e) { 84 delayedFireTableDataChanged(); 85 } 86 87 public void treeNodesRemoved(TreeModelEvent e) { 88 delayedFireTableDataChanged(); 89 } 90 91 public void treeStructureChanged(TreeModelEvent e) { 92 delayedFireTableDataChanged(); 93 } 94 }); 95 } 96 97 99 public int getColumnCount() { 100 return treeTableModel.getColumnCount(); 101 } 102 103 public String getColumnName(int column) { 104 return treeTableModel.getColumnName(column); 105 } 106 107 public Class getColumnClass(int column) { 108 return treeTableModel.getColumnClass(column); 109 } 110 111 public int getRowCount() { 112 return tree.getRowCount(); 113 } 114 115 protected Object nodeForRow(int row) { 116 TreePath treePath = tree.getPathForRow(row); 117 return treePath.getLastPathComponent(); 118 } 119 120 public Object getValueAt(int row, int column) { 121 return treeTableModel.getValueAt(nodeForRow(row), column); 122 } 123 124 public boolean isCellEditable(int row, int column) { 125 return treeTableModel.isCellEditable(nodeForRow(row), column); 126 } 127 128 public void setValueAt(Object value, int row, int column) { 129 treeTableModel.setValueAt(value, nodeForRow(row), column); 130 } 131 132 136 protected void delayedFireTableDataChanged() { 137 SwingUtilities.invokeLater(new Runnable () { 138 public void run() { 139 fireTableDataChanged(); 140 } 141 }); 142 } 143 } 144 145 | Popular Tags |