/* class AbstractTableModel * * Copyright (C) 2001 R M Pitman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package charvax.swing.table; import java.util.Enumeration; import java.util.Vector; import charvax.swing.event.TableModelEvent; import charvax.swing.event.TableModelListener; /** * This abstract class provides default implementations for most of the methods * in the TableModel class. It takes care of the management of listeners, and * provides some convenience methods for generating TableModeEvents and * dispatching them to the listeners. To implement a concrete TableModel as a * subclass of AbstractTableModel, you only need to provide implementations of * the following methods:<pre> public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column); </pre> */ public abstract class AbstractTableModel implements TableModel { /** Adds a listener that will be notified each time the data model * changes. */ public void addTableModelListener(TableModelListener l) { _listeners.add(l); } /** Removes the specified listener from the list of listeners. */ public void removeTableModelListener(TableModelListener l) { _listeners.remove(l); } /** Returns a default name for the column using spreadsheet conventions: A, * B, C... */ public String getColumnName(int column_) { StringBuffer buf = new StringBuffer('A' + column_); return buf.toString(); } /** This empty implementation is provided so that users don't have to * provide their own implementation if their table is not editable. */ public void setValueAt(Object value_, int row_, int column_) {} /** Forwards the specified event to all TableModelListeners that * registered themselves as listeners for this TableModel. */ public void fireTableChanged(TableModelEvent evt_) { Enumeration<TableModelListener> e = _listeners.elements(); while (e.hasMoreElements()) { TableModelListener l = (TableModelListener) e.nextElement(); l.tableChanged(evt_); } } /** Notifies all listeners that the value at [row, column] has been * updated. */ public void fireTableCellUpdated(int row_, int column_) { TableModelEvent evt = new TableModelEvent(this, row_, row_, column_); fireTableChanged(evt); } /** Notifies all listeners that all cell values in the table may have * changed. */ public void fireTableDataChanged() { TableModelEvent evt = new TableModelEvent( this, 0, this.getRowCount()-1, TableModelEvent.ALL_COLUMNS); fireTableChanged(evt); } /** Notifies all listeners that rows in the range [firstRow_, lastRow_], * inclusive, have been deleted. */ public void fireTableRowsDeleted(int firstRow_, int lastRow_) { TableModelEvent evt = new TableModelEvent( this, firstRow_, lastRow_, TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE); fireTableChanged(evt); } /** Notifies all listeners that rows in the range [firstRow_, lastRow_], * inclusive, have been inserted. */ public void fireTableRowsInserted(int firstRow_, int lastRow_) { TableModelEvent evt = new TableModelEvent( this, firstRow_, lastRow_, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT); fireTableChanged(evt); } //==================================================================== // INSTANCE VARIABLES private Vector<TableModelListener> _listeners = new Vector<TableModelListener>(); }