|
|
Listing 12.3 The TableModelListener Interface and TableModelEvent Class
public interface TableModelListener extends java.util.EventListener
{
/**
* This fine grain notification tells listeners the exact range
* of cells, rows, or columns that changed.
*/
public void tableChanged(TableModelEvent e);
}
public class TableModelEvent extends java.util.EventObject
{
public static final int INSERT = 1;
public static final int UPDATE = 0;
public static final int DELETE = -1;
public static final int HEADER_ROW = -1;
public static final int ALL_COLUMNS = -1;
//
// Instance Variables
//
protected int type;
protected int firstRow;
protected int lastRow;
protected int column;
//
// Constructors
//
/**
* All row data in the table has changed. Listeners should discard
* any state that was based on the rows and requery the TableModel
* to get the new row count and all the appropriate values.
* The JTable will repaint the entire visible region on receiving
* this event, querying the model for the cell values that are
* visible. The structure of the table i.e. the column names, types,
* and order have not changed.
*/
public TableModelEvent(TableModel source) {
// Use Integer.MAX_VALUE instead of getRowCount() in
// case rows were deleted.
this(source, 0, Integer.MAX_VALUE, ALL_COLUMNS, UPDATE);
}
/**
* This row of data has been updated.
* To denote the arrival of a completely new table with a different
* structure use <code>HEADER_ROW</code> as the value for the
* <I>row</I>. When the JTable receives this event and its
* <I>autoCreateColumnsFromModel</I> flag is set it discards any
* TableColumns that it had and reallocates default ones in the
* order they appear in the model. This is the same as calling
* <code>setModel(TableModel)</code> on the JTable.
*/
public TableModelEvent(TableModel source, int row) {
this(source, row, row, ALL_COLUMNS, UPDATE);
}
/**
* The data in rows [<I>firstRow</I>, <I>lastRow</I>] have been
* updated.
*/
public TableModelEvent(TableModel source, int firstRow, int lastRow) {
this(source, firstRow, lastRow, ALL_COLUMNS, UPDATE);
}
/**
* The cells in column <I>column</I> in the range
* [<I>firstRow</I>, <I>lastRow</I>] have been updated.
*/
public TableModelEvent( TableModel source, int firstRow,
int lastRow, int column ) {
this(source, firstRow, lastRow, column, UPDATE);
}
/**
* The cells from (firstRow, column) to (lastRow, column) have been
* changed. The <I>column</I> refers to the column index of the cell
* in the models coordinate system. When <I>column</I> is ALL_
* COLUMNS, all cells in the specified range of rows are
* considered changed.
* <p>
* The <I>type</I> should be one of: INSERT, UPDATE, and DELETE.
*/
public TableModelEvent( TableModel source, int firstRow, int lastRow,
int column, int type) {
super(source);
this.firstRow = firstRow;
this.lastRow = lastRow;
this.column = column;
this.type = type;
}
//
// Querying Methods
//
/** Returns the first row that changed. HEADER_ROW means the meta
* data, i.e. names, types, and order of the columns.
*/
public int getFirstRow() { return firstRow; };
/** Returns the last row that changed. */
public int getLastRow() { return lastRow; };
/**
* Returns the column for the event. If the return
* value is ALL_COLUMNS; it means every column in the specified
* rows changed.
*/
public int getColumn() { return column; };
/**
* Returns the type of event - one of: INSERT, UPDATE, and DELETE.
*/
public int getType() { return type; }
}
|