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.table.TableModel; 024 import javax.swing.tree.TreeModel; 025 026 /** The <code>TreeTableModel</code> interface specifies the methods the JTreeTable will use to interrogate a tabular tree data model. 027 * <p /> 028 * The <code>JTreeTable</code> can be set up to display any data model which implements the <code>TreeTableModel</code> interface with a couple of lines of code: 029 * <pre> 030 * TreeTableModel myData = new MyTreeTableModel(); 031 * JTreeTable treeTable = new JTreeTable(myData); 032 * </pre> 033 * @author <a href="mailto:chris@riedquat.de">Christian Hujer</a> 034 */ 035 public interface TreeTableModel<R, T> { 036 037 /** Returns a child with a certain index. 038 * @param parent Node to return child for 039 * @param index Index of child 040 * @return child node with index from parent or <code>null</code> if no child was found 041 * @see TreeModel#getChild(Object, int) 042 */ 043 T getChild(T parent, int index); 044 045 /** Returns the number of available children. 046 * @return number of available children 047 * @see TreeModel#getChildCount(Object) 048 */ 049 int getChildCount(T node); 050 051 /** Returns the type for column number <code>column</code>. 052 * @param column Column to get type for 053 * @return type of <var>column</var> 054 * @see TableModel#getColumnClass(int) 055 */ 056 Class<?> getColumnClass(int column); 057 058 /** Returns the number of availible columns. 059 * @return number of available columns 060 * @see TableModel#getColumnCount() 061 */ 062 int getColumnCount(); 063 064 /** Returns the name for column number <code>column</code>. 065 * @param column Column to get name for 066 * @return name of <var>column</var> 067 * @see TableModel#getColumnName(int) 068 */ 069 String getColumnName(int column); 070 071 /** Returns the root of the treetable. 072 * @return root of the treetable 073 */ 074 R getRoot(); 075 076 /** Returns the value to be displayed for node <code>node</code> at column number <code>column</code>. 077 * @param node Node to get value of 078 * @param column Column to get value of 079 * @return object 080 * @see TableModel#getValueAt(int, int) 081 */ 082 Object getValueAt(T node, int column); 083 084 /** Indicates whether the the value for node <code>node</code> at column number <code>column</code> is editable. 085 * @param node Node to check 086 * @param column Column to check 087 * @return <code>true</code> if the cell is editable, otherwise <code>false</code> 088 * @see TableModel#isCellEditable(int, int) 089 */ 090 boolean isCellEditable(T node, int column); 091 092 /** Returns <code<true</code> if node is a leaf. 093 * @param node Node 094 * @return <code>true</code> if node is a leaf, otherwise <code>false</code> 095 */ 096 boolean isLeaf(T node); 097 098 /** Sets the value for node <code>node</code> at column number <code>column</code>. 099 * @param value Value to be set 100 * @param node Node to set value at 101 * @param column Column of value in the node 102 * @see TableModel#setValueAt(Object, int, int) 103 */ 104 void setValueAt(Object value, T node, int column); 105 106 } // interface TreeTableModel