001 /* JAPI - (Yet another (hopefully) useful) Java API
002 *
003 * Copyright (C) 2004-2006 Christian Hujer
004 *
005 * This program is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU General Public License as
007 * published by the Free Software Foundation; either version 2 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful, but
011 * WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013 * General Public License for more details.
014 *
015 * You should have received a copy of the GNU General Public License
016 * along with this program; if not, write to the Free Software
017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
018 * 02111-1307, USA.
019 */
020
021 package net.sf.japi.swing.treetable;
022
023 import javax.swing.JTree;
024 import javax.swing.event.TreeExpansionEvent;
025 import javax.swing.event.TreeExpansionListener;
026 import javax.swing.table.AbstractTableModel;
027 import javax.swing.tree.TreePath;
028
029 /** Wraps a TreeTableModel in a TableModel.
030 * @author <a href="mailto:chris@riedquat.de">Christian Hujer</a>
031 */
032 public class TreeTableModelTableModelAdapter extends AbstractTableModel {
033
034 /** The underlying JTree. */
035 private JTree tree;
036
037 /** The underlying TreeTableModel. */
038 private TreeTableModel treeTableModel;
039
040 /** Create a TreeTableModelAdapter.
041 * @param treeTableModel TreeTableModel to adapt
042 * @param tree JTree to adapt
043 */
044 public TreeTableModelTableModelAdapter(final TreeTableModel treeTableModel, final JTree tree) {
045 this.tree = tree;
046 this.treeTableModel = treeTableModel;
047
048 tree.addTreeExpansionListener(new MyTreeExpansionListener());
049 }
050
051 /** {@inheritDoc} */
052 public int getRowCount() {
053 return tree.getRowCount();
054 }
055
056 /** {@inheritDoc} */
057 public int getColumnCount() {
058 return treeTableModel.getColumnCount();
059 }
060
061 /** {@inheritDoc} */
062 public Object getValueAt(final int rowIndex, final int columnIndex) {
063 return treeTableModel.getValueAt(nodeForRow(rowIndex), columnIndex);
064 }
065
066 /** {@inheritDoc} */
067 @Override public Class<?> getColumnClass(final int columnIndex) {
068 return treeTableModel.getColumnClass(columnIndex);
069 }
070
071 /** {@inheritDoc} */
072 @Override public String getColumnName(final int column) {
073 return treeTableModel.getColumnName(column);
074 }
075
076 /** {@inheritDoc} */
077 @Override public boolean isCellEditable(final int rowIndex, final int columnIndex) {
078 return treeTableModel.isCellEditable(nodeForRow(rowIndex), columnIndex);
079 }
080
081 protected Object nodeForRow(final int row) {
082 final TreePath treePath = tree.getPathForRow(row);
083 return treePath.getLastPathComponent();
084 }
085
086 /** {@inheritDoc} */
087 @Override public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) {
088 treeTableModel.setValueAt(aValue, nodeForRow(rowIndex), columnIndex);
089 }
090
091 /** TreeExpansionListener for handling TreeExpansion events.
092 * @author <a href="mailto:chris@riedquat.de">Christian Hujer</a>
093 */
094 private class MyTreeExpansionListener implements TreeExpansionListener {
095
096 /** {@inheritDoc} */
097 public void treeExpanded(final TreeExpansionEvent event) {
098 fireTableDataChanged();
099 }
100
101 /** {@inheritDoc} */
102 public void treeCollapsed(final TreeExpansionEvent event) {
103 fireTableDataChanged();
104 }
105
106 } // class MyTreeExpansionListener
107
108 } // class TreeTableModelAdapter