Class DefaultTableModel

java.lang.Object
javax.swing.table.AbstractTableModel
javax.swing.table.DefaultTableModel
All Implemented Interfaces:
Serializable, TableModel

public class DefaultTableModel extends AbstractTableModel implements Serializable
This is an implementation of TableModel that uses a Vector of Vectors to store the cell value objects.

Warning: DefaultTableModel returns a column class of Object. When DefaultTableModel is used with a TableRowSorter this will result in extensive use of toString, which for non-String data types is expensive. If you use DefaultTableModel with a TableRowSorter you are strongly encouraged to override getColumnClass to return the appropriate type.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans has been added to the java.beans package. Please see XMLEncoder.

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected Vector
    The Vector of column identifiers.
    protected Vector<Vector>
    The Vector of Vectors of Object values.

    Fields declared in class AbstractTableModel

    listenerList
    Modifier and Type
    Field
    Description
    List of listeners
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructs a default DefaultTableModel which is a table of zero columns and zero rows.
    DefaultTableModel(int rowCount, int columnCount)
    Constructs a DefaultTableModel with rowCount and columnCount of null object values.
    DefaultTableModel(Object[][] data, Object[] columnNames)
    Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method.
    DefaultTableModel(Object[] columnNames, int rowCount)
    Constructs a DefaultTableModel with as many columns as there are elements in columnNames and rowCount of null object values.
    DefaultTableModel(Vector<?> columnNames, int rowCount)
    Constructs a DefaultTableModel with as many columns as there are elements in columnNames and rowCount of null object values.
    DefaultTableModel(Vector<? extends Vector> data, Vector<?> columnNames)
    Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addColumn(Object columnName)
    Adds a column to the model.
    void
    addColumn(Object columnName, Object[] columnData)
    Adds a column to the model.
    void
    addColumn(Object columnName, Vector<?> columnData)
    Adds a column to the model.
    void
    addRow(Object[] rowData)
    Adds a row to the end of the model.
    void
    addRow(Vector<?> rowData)
    Adds a row to the end of the model.
    protected static Vector<Object>
    Returns a vector that contains the same objects as the array.
    protected static Vector<Vector<Object>>
    convertToVector(Object[][] anArray)
    Returns a vector of vectors that contains the same objects as the array.
    int
    Returns the number of columns in this data table.
    getColumnName(int column)
    Returns the column name.
    Returns the Vector of Vectors that contains the table's data values.
    int
    Returns the number of rows in this data table.
    getValueAt(int row, int column)
    Returns an attribute value for the cell at row and column.
    void
    insertRow(int row, Object[] rowData)
    Inserts a row at row in the model.
    void
    insertRow(int row, Vector<?> rowData)
    Inserts a row at row in the model.
    boolean
    isCellEditable(int row, int column)
    Returns true regardless of parameter values.
    void
    moveRow(int start, int end, int to)
    Moves one or more rows from the inclusive range start to end to the to position in the model.
    void
    Equivalent to fireTableChanged.
    void
    Ensures that the new rows have the correct number of columns.
    void
    removeRow(int row)
    Removes the row at row from the model.
    void
    Equivalent to fireTableChanged.
    void
    setColumnCount(int columnCount)
    Sets the number of columns in the model.
    void
    setColumnIdentifiers(Object[] newIdentifiers)
    Replaces the column identifiers in the model.
    void
    setColumnIdentifiers(Vector<?> columnIdentifiers)
    Replaces the column identifiers in the model.
    void
    setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
    Replaces the value in the dataVector instance variable with the values in the array dataVector.
    void
    setDataVector(Vector<? extends Vector> dataVector, Vector<?> columnIdentifiers)
    Replaces the current dataVector instance variable with the new Vector of rows, dataVector.
    void
    setNumRows(int rowCount)
    Obsolete as of Java 2 platform v1.3.
    void
    setRowCount(int rowCount)
    Sets the number of rows in the model.
    void
    setValueAt(Object aValue, int row, int column)
    Sets the object value for the cell at column and row.

    Methods declared in class AbstractTableModel

    addTableModelListener, findColumn, fireTableCellUpdated, fireTableChanged, fireTableDataChanged, fireTableRowsDeleted, fireTableRowsInserted, fireTableRowsUpdated, fireTableStructureChanged, getColumnClass, getListeners, getTableModelListeners, removeTableModelListener
    Modifier and Type
    Method
    Description
    void
    Adds a listener to the list that's notified each time a change to the data model occurs.
    int
    findColumn(String columnName)
    Returns a column given its name.
    void
    fireTableCellUpdated(int row, int column)
    Notifies all listeners that the value of the cell at [row, column] has been updated.
    void
    Forwards the given notification event to all TableModelListeners that registered themselves as listeners for this table model.
    void
    Notifies all listeners that all cell values in the table's rows may have changed.
    void
    fireTableRowsDeleted(int firstRow, int lastRow)
    Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been deleted.
    void
    fireTableRowsInserted(int firstRow, int lastRow)
    Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been inserted.
    void
    fireTableRowsUpdated(int firstRow, int lastRow)
    Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been updated.
    void
    Notifies all listeners that the table's structure has changed.
    getColumnClass(int columnIndex)
    Returns Object.class regardless of columnIndex.
    <T extends EventListener>
    T[]
    getListeners(Class<T> listenerType)
    Returns an array of all the objects currently registered as FooListeners upon this AbstractTableModel.
    Returns an array of all the table model listeners registered on this model.
    void
    Removes a listener from the list that's notified each time a change to the data model occurs.

    Methods declared in class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    Modifier and Type
    Method
    Description
    protected Object
    Answers a new instance of the same class as the receiver, whose slots have been filled in with the values in the slots of the receiver.
    boolean
    Compares the argument to the receiver, and answers true if they represent the same object using a class specific comparison.
    protected void
    Deprecated, for removal: This API element is subject to removal in a future version.
    May cause performance issues, deadlocks and hangs.
    final Class<? extends Object>
    Answers the unique instance of java.lang.Class which represents the class of the receiver.
    int
    Answers an integer hash code for the receiver.
    final void
    Causes one thread which is waiting on the receiver to be made ready to run.
    final void
    Causes all threads which are waiting on the receiver to be made ready to run.
    Answers a string containing a concise, human-readable description of the receiver.
    final void
    Causes the thread which sent this message to be made not ready to run pending some change in the receiver (as indicated by notify or notifyAll).
    final void
    wait(long time)
    Causes the thread which sent this message to be made not ready to run either pending some change in the receiver (as indicated by notify or notifyAll) or the expiration of the timeout.
    final void
    wait(long time, int frac)
    Causes the thread which sent this message to be made not ready to run either pending some change in the receiver (as indicated by notify or notifyAll) or the expiration of the timeout.
  • Field Details

    • dataVector

      protected Vector<Vector> dataVector
      The Vector of Vectors of Object values.
    • columnIdentifiers

      protected Vector columnIdentifiers
      The Vector of column identifiers.
  • Constructor Details

    • DefaultTableModel

      public DefaultTableModel()
      Constructs a default DefaultTableModel which is a table of zero columns and zero rows.
    • DefaultTableModel

      public DefaultTableModel(int rowCount, int columnCount)
      Constructs a DefaultTableModel with rowCount and columnCount of null object values.
      Parameters:
      rowCount - the number of rows the table holds
      columnCount - the number of columns the table holds
      See Also:
    • DefaultTableModel

      public DefaultTableModel(Vector<?> columnNames, int rowCount)
      Constructs a DefaultTableModel with as many columns as there are elements in columnNames and rowCount of null object values. Each column's name will be taken from the columnNames vector.
      Parameters:
      columnNames - vector containing the names of the new columns; if this is null then the model has no columns
      rowCount - the number of rows the table holds
      See Also:
    • DefaultTableModel

      public DefaultTableModel(Object[] columnNames, int rowCount)
      Constructs a DefaultTableModel with as many columns as there are elements in columnNames and rowCount of null object values. Each column's name will be taken from the columnNames array.
      Parameters:
      columnNames - array containing the names of the new columns; if this is null then the model has no columns
      rowCount - the number of rows the table holds
      See Also:
    • DefaultTableModel

      public DefaultTableModel(Vector<? extends Vector> data, Vector<?> columnNames)
      Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method.
      Parameters:
      data - the data of the table, a Vector of Vectors of Object values
      columnNames - vector containing the names of the new columns
      See Also:
    • DefaultTableModel

      public DefaultTableModel(Object[][] data, Object[] columnNames)
      Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method. The first index in the Object[][] array is the row index and the second is the column index.
      Parameters:
      data - the data of the table
      columnNames - the names of the columns
      See Also:
  • Method Details

    • getDataVector

      public Vector<Vector> getDataVector()
      Returns the Vector of Vectors that contains the table's data values. The vectors contained in the outer vector are each a single row of values. In other words, to get to the cell at row 1, column 5:

      ((Vector)getDataVector().elementAt(1)).elementAt(5);

      Returns:
      the vector of vectors containing the tables data values
      See Also:
    • setDataVector

      public void setDataVector(Vector<? extends Vector> dataVector, Vector<?> columnIdentifiers)
      Replaces the current dataVector instance variable with the new Vector of rows, dataVector. Each row is represented in dataVector as a Vector of Object values. columnIdentifiers are the names of the new columns. The first name in columnIdentifiers is mapped to column 0 in dataVector. Each row in dataVector is adjusted to match the number of columns in columnIdentifiers either by truncating the Vector if it is too long, or adding null values if it is too short.

      Note that passing in a null value for dataVector results in unspecified behavior, an possibly an exception.

      Parameters:
      dataVector - the new data vector
      columnIdentifiers - the names of the columns
      See Also:
    • setDataVector

      public void setDataVector(Object[][] dataVector, Object[] columnIdentifiers)
      Replaces the value in the dataVector instance variable with the values in the array dataVector. The first index in the Object[][] array is the row index and the second is the column index. columnIdentifiers are the names of the new columns.
      Parameters:
      dataVector - the new data vector
      columnIdentifiers - the names of the columns
      See Also:
    • newDataAvailable

      public void newDataAvailable(TableModelEvent event)
      Equivalent to fireTableChanged.
      Parameters:
      event - the change event
    • newRowsAdded

      public void newRowsAdded(TableModelEvent e)
      Ensures that the new rows have the correct number of columns. This is accomplished by using the setSize method in Vector which truncates vectors which are too long, and appends nulls if they are too short. This method also sends out a tableChanged notification message to all the listeners.
      Parameters:
      e - this TableModelEvent describes where the rows were added. If null it assumes all the rows were newly added
      See Also:
    • rowsRemoved

      public void rowsRemoved(TableModelEvent event)
      Equivalent to fireTableChanged.
      Parameters:
      event - the change event
    • setNumRows

      public void setNumRows(int rowCount)
      Obsolete as of Java 2 platform v1.3. Please use setRowCount instead.
      Parameters:
      rowCount - the new number of rows
    • setRowCount

      public void setRowCount(int rowCount)
      Sets the number of rows in the model. If the new size is greater than the current size, new rows are added to the end of the model If the new size is less than the current size, all rows at index rowCount and greater are discarded.
      Parameters:
      rowCount - number of rows in the model
      Since:
      1.3
      See Also:
    • addRow

      public void addRow(Vector<?> rowData)
      Adds a row to the end of the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.
      Parameters:
      rowData - optional data of the row being added
    • addRow

      public void addRow(Object[] rowData)
      Adds a row to the end of the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.
      Parameters:
      rowData - optional data of the row being added
    • insertRow

      public void insertRow(int row, Vector<?> rowData)
      Inserts a row at row in the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.
      Parameters:
      row - the row index of the row to be inserted
      rowData - optional data of the row being added
      Throws:
      ArrayIndexOutOfBoundsException - if the row was invalid
    • insertRow

      public void insertRow(int row, Object[] rowData)
      Inserts a row at row in the model. The new row will contain null values unless rowData is specified. Notification of the row being added will be generated.
      Parameters:
      row - the row index of the row to be inserted
      rowData - optional data of the row being added
      Throws:
      ArrayIndexOutOfBoundsException - if the row was invalid
    • moveRow

      public void moveRow(int start, int end, int to)
      Moves one or more rows from the inclusive range start to end to the to position in the model. After the move, the row that was at index start will be at index to. This method will send a tableChanged notification message to all the listeners.
       Examples of moves:
      
       1. moveRow(1,3,5);
               a|B|C|D|e|f|g|h|i|j|k   - before
               a|e|f|g|h|B|C|D|i|j|k   - after
      
       2. moveRow(6,7,1);
               a|b|c|d|e|f|G|H|i|j|k   - before
               a|G|H|b|c|d|e|f|i|j|k   - after
       
      Parameters:
      start - the starting row index to be moved
      end - the ending row index to be moved
      to - the destination of the rows to be moved
      Throws:
      ArrayIndexOutOfBoundsException - if any of the elements would be moved out of the table's range
    • removeRow

      public void removeRow(int row)
      Removes the row at row from the model. Notification of the row being removed will be sent to all the listeners.
      Parameters:
      row - the row index of the row to be removed
      Throws:
      ArrayIndexOutOfBoundsException - if the row was invalid
    • setColumnIdentifiers

      public void setColumnIdentifiers(Vector<?> columnIdentifiers)
      Replaces the column identifiers in the model. If the number of newIdentifiers is greater than the current number of columns, new columns are added to the end of each row in the model. If the number of newIdentifiers is less than the current number of columns, all the extra columns at the end of a row are discarded.
      Parameters:
      columnIdentifiers - vector of column identifiers. If null, set the model to zero columns
      See Also:
    • setColumnIdentifiers

      public void setColumnIdentifiers(Object[] newIdentifiers)
      Replaces the column identifiers in the model. If the number of newIdentifiers is greater than the current number of columns, new columns are added to the end of each row in the model. If the number of newIdentifiers is less than the current number of columns, all the extra columns at the end of a row are discarded.
      Parameters:
      newIdentifiers - array of column identifiers. If null, set the model to zero columns
      See Also:
    • setColumnCount

      public void setColumnCount(int columnCount)
      Sets the number of columns in the model. If the new size is greater than the current size, new columns are added to the end of the model with null cell values. If the new size is less than the current size, all columns at index columnCount and greater are discarded.
      Parameters:
      columnCount - the new number of columns in the model
      Since:
      1.3
      See Also:
    • addColumn

      public void addColumn(Object columnName)
      Adds a column to the model. The new column will have the identifier columnName, which may be null. This method will send a tableChanged notification message to all the listeners. This method is a cover for addColumn(Object, Vector) which uses null as the data vector.
      Parameters:
      columnName - the identifier of the column being added
    • addColumn

      public void addColumn(Object columnName, Vector<?> columnData)
      Adds a column to the model. The new column will have the identifier columnName, which may be null. columnData is the optional vector of data for the column. If it is null the column is filled with null values. Otherwise, the new data will be added to model starting with the first element going to row 0, etc. This method will send a tableChanged notification message to all the listeners.
      Parameters:
      columnName - the identifier of the column being added
      columnData - optional data of the column being added
    • addColumn

      public void addColumn(Object columnName, Object[] columnData)
      Adds a column to the model. The new column will have the identifier columnName. columnData is the optional array of data for the column. If it is null the column is filled with null values. Otherwise, the new data will be added to model starting with the first element going to row 0, etc. This method will send a tableChanged notification message to all the listeners.
      Parameters:
      columnName - identifier of the newly created column
      columnData - new data to be added to the column
      See Also:
    • getRowCount

      public int getRowCount()
      Returns the number of rows in this data table.
      Specified by:
      getRowCount in interface TableModel
      Returns:
      the number of rows in the model
      See Also:
    • getColumnCount

      public int getColumnCount()
      Returns the number of columns in this data table.
      Specified by:
      getColumnCount in interface TableModel
      Returns:
      the number of columns in the model
      See Also:
    • getColumnName

      public String getColumnName(int column)
      Returns the column name.
      Specified by:
      getColumnName in interface TableModel
      Overrides:
      getColumnName in class AbstractTableModel
      Parameters:
      column - the column being queried
      Returns:
      a name for this column using the string value of the appropriate member in columnIdentifiers. If columnIdentifiers does not have an entry for this index, returns the default name provided by the superclass.
    • isCellEditable

      public boolean isCellEditable(int row, int column)
      Returns true regardless of parameter values.
      Specified by:
      isCellEditable in interface TableModel
      Overrides:
      isCellEditable in class AbstractTableModel
      Parameters:
      row - the row whose value is to be queried
      column - the column whose value is to be queried
      Returns:
      true
      See Also:
    • getValueAt

      public Object getValueAt(int row, int column)
      Returns an attribute value for the cell at row and column.
      Specified by:
      getValueAt in interface TableModel
      Parameters:
      row - the row whose value is to be queried
      column - the column whose value is to be queried
      Returns:
      the value Object at the specified cell
      Throws:
      ArrayIndexOutOfBoundsException - if an invalid row or column was given
    • setValueAt

      public void setValueAt(Object aValue, int row, int column)
      Sets the object value for the cell at column and row. aValue is the new value. This method will generate a tableChanged notification.
      Specified by:
      setValueAt in interface TableModel
      Overrides:
      setValueAt in class AbstractTableModel
      Parameters:
      aValue - the new value; this can be null
      row - the row whose value is to be changed
      column - the column whose value is to be changed
      Throws:
      ArrayIndexOutOfBoundsException - if an invalid row or column was given
      See Also:
    • convertToVector

      protected static Vector<Object> convertToVector(Object[] anArray)
      Returns a vector that contains the same objects as the array.
      Parameters:
      anArray - the array to be converted
      Returns:
      the new vector; if anArray is null, returns null
    • convertToVector

      protected static Vector<Vector<Object>> convertToVector(Object[][] anArray)
      Returns a vector of vectors that contains the same objects as the array.
      Parameters:
      anArray - the double array to be converted
      Returns:
      the new vector of vectors; if anArray is null, returns null