001 /* 002 * $Id: TreeTableModel.java 2476 2007-11-25 15:52:59Z kschaefe $ 003 * 004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, 005 * Santa Clara, California 95054, U.S.A. All rights reserved. 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021 package org.jdesktop.swingx.treetable; 022 023 024 import javax.swing.tree.TreeModel; 025 026 /** 027 * The model used by {@code JXTreeTable}. 028 * <p> 029 * This model is a combination of {@link TreeModel} and 030 * {@link javax.swing.table.TableModel} for use with the tree table. It does not 031 * actually extends {@code TableModel}, but instead copies method signature as 032 * appropriate and alters other to work with the underlying {@code TreeModel}. 033 * <p> 034 * 035 * @see TreeModel 036 * @see javax.swing.table.TableModel 037 */ 038 public interface TreeTableModel extends TreeModel { 039 /** 040 * Returns the most specific superclass for all the cell values in the 041 * column. This is used by the {@code JXTreeTable} to set up a default 042 * renderer and editor for the column. 043 * 044 * @param columnIndex 045 * the index of the column 046 * @return the common ancestor class of the object values in the model. 047 * @see javax.swing.table.TableModel#getColumnClass(int) 048 */ 049 public Class<?> getColumnClass(int columnIndex); 050 051 /** 052 * Returns the number of columns in the model. A {@code JXTreeTable} uses 053 * this method to determine how many columns it should create and display by 054 * default. 055 * 056 * @return the number of columns in the model 057 * @see javax.swing.table.TableModel#getColumnCount() 058 */ 059 public int getColumnCount(); 060 061 /** 062 * Returns the name of the column at {@code columnIndex}. This is used to 063 * initialize the table's column header name. Note: this name does not need 064 * to be unique; two columns in a table can have the same name. 065 * 066 * @param column 067 * the index of the column 068 * @return the name of the column 069 * @see javax.swing.table.TableModel#getColumnName(int) 070 */ 071 public String getColumnName(int column); 072 073 /** 074 * Returns the column that is the "tree" column. While it is not required, 075 * most implementations will default the first column to be the hierarchical 076 * one. 077 * 078 * @return the index of the hierarchical column or -1 if no column is the 079 * hierarchical column. 080 */ 081 public int getHierarchicalColumn(); 082 083 /** 084 * Returns the value for the {@code node} at {@code columnIndex}. The 085 * {@code node} must be managed by this model. Unamanaged nodes should throw 086 * an {@code IllegalArgumentException}. 087 * 088 * @param node 089 * the node whose value is to be queried 090 * @param column 091 * the column whose value is to be queried 092 * @return the value Object at the specified cell 093 * @throws IllegalArgumentException 094 * if {@code node} is not managed by this model. 095 * @see #setValueAt 096 * @see javax.swing.table.TableModel#getValueAt(int, int) 097 */ 098 public Object getValueAt(Object node, int column); 099 100 /** 101 * Returns true if the cell for the {@code node} at {@code columnIndex} is 102 * editable. Otherwise, {@code setValueAt} on the cell will not change the 103 * value of that cell. The {@code node} must be managed by this model. 104 * Unamanaged nodes should throw an {@code IllegalArgumentException}. 105 * 106 * @param node 107 * the node whose value to be queried 108 * @param column 109 * the column whose value to be queried 110 * @return true if the cell is editable 111 * @throws IllegalArgumentException 112 * if {@code node} is not managed by this model. 113 * @see #setValueAt 114 * @see javax.swing.table.TableModel#isCellEditable(int, int) 115 */ 116 public boolean isCellEditable(Object node, int column); 117 118 /** 119 * Sets the value for the {@code node} at {@code columnIndex} to 120 * {@code value}. The {@code node} must be managed by this model. 121 * Unamanaged nodes should throw an {@code IllegalArgumentException}. 122 * 123 * 124 * @param value 125 * the new value 126 * @param node 127 * the node whose value is to be changed 128 * @param column 129 * the column whose value is to be changed 130 * @throws IllegalArgumentException 131 * if {@code node} is not managed by this model. 132 * @see #getValueAt 133 * @see #isCellEditable 134 * @see javax.swing.table.TableModel#setValueAt(Object, int, int) 135 */ 136 public void setValueAt(Object value, Object node, int column); 137 }