DefaultTableModel Example Program (Java)

of 01

Java Code

Young man working on computer in restaurant
Niki van Velden/Moment Open/Getty Images

The Java code below is a simple program used to show the different methods of a DefaultTableModel in action.

The first JTable created uses a two-dimensional object array to populate the row data and a String array to populate the column names. The program shows that although you can get to the TableModel interface of the table model to get and set values for individual table cells created for this JTable , you cannot get to the DefaultTableModel in order to manipulate the data any further.

The second JTable is created by defining a DefaultTableModel with the data first. This allows the full range of actions by the table model to be performed on the JTable (e.g, adding a row, inserting a row, removing a row, adding a column, etc.).

You might also be interested in the AbstractTableModel class. This class allows you to create a custom table model for a JTable where you can store the data in anyway you like. It does not have to be in a Vector of Vectors.

Note: See DefaultTableModel Overview for some more information. 

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.table.DefaultTableModel;

public class TableExample {

    public static void main(String[] args) {
        //Use the event dispatch thread for Swing components
         EventQueue.invokeLater(new Runnable()
             public void run()
                 new TableExample().BuildGUI();         
    public void BuildGUI()
        JFrame guiFrame = new JFrame();
        //make sure the program exits when the frame closes
        guiFrame.setTitle("Creating a Table Example");
        //This will center the JFrame in the middle of the screen
        //Create a two dimensional array to hold the data for the JTable.
        Object[][] data = {{1,1,1},{2,2,2},{3,3,3},{4,4,4}};
        //A string array containing the column names for the JTable.
        String[] columnNames = {"Column 1","Column 2","Column 3"};
        //Create the JTable using the data array and column name array.
        JTable exampleJTable = new JTable(data, columnNames);
        //Create a JScrollPane to contain for the JTable
        JScrollPane sp = new JScrollPane(exampleJTable);
        //The JTable will provides methods which access the DefaultTabelModel.
        //created when the JTable object was created
        System.out.println(exampleJTable.getValueAt(2, 2));
        //The DefaultTableModel can be acessed through the getModel method.
        TableModel tabModel = exampleJTable.getModel();
        //Provides the same output as the exampleJTable.getValueAt method call
        System.out.println(tabModel.getValueAt(2, 2).toString());
        //Note: We can't cast the TableMode returned from the getModel method
        //to a DefaultTableModel object because it is implemented as an anonymous
        //inner class in the JTable. So let's create a JTable with a DefaultTableModel
        //we can use:
        //Create a DeafultTableModel object for another JTable
        DefaultTableModel defTableModel = new DefaultTableModel(data,columnNames);
        JTable anotherJTable = new JTable(defTableModel);
        //Create a JScrollPane to contain for the JTable
        JScrollPane anotherSP = new JScrollPane(anotherJTable);
        //an array holding data for a new column
        Object[] newData = {1,2,3,4};
        //Add a column
        defTableModel.addColumn("Column 4", newData);
        //an array holding data for a new row
        Object[] newRowData = {5,5,5,5};
        //Add a row
        //an array holding data for a new row
        Object[] insertRowData = {2.5,2.5,2.5,2.5};
        //Insert a row
        //Change a cell value
        defTableModel.setValueAt(8888, 3, 2);
        //Add the JScrollPanes to the JFrame.
        guiFrame.add(sp, BorderLayout.NORTH);
        guiFrame.add(anotherSP, BorderLayout.SOUTH);