I am trying to write some software where when a user adds a new entry to a SQL database, my JTable showing the entries in the database updates. Currently, when the method updateTable(Object[][] data)
is called, it results in the table becoming blank.
Would anyone know of a fix for this type of issue?
Here is the code for the method:
JavaScript
x
/**
* This method updates the JTable which shows the Amp Settings.
*
* @param data A 2D Array of Objects witch represents the data in the
* database.
*/
private void updateTable(Object[][] data)
{
// A new DefaultTableModel.
DefaultTableModel dtm = new DefaultTableModel();
// Looping over the data, create a new row and add it to the DataModel.
for (int i = 0; i < data.length; i++)
{
Object[] row = new Object[data[i].length];
// Fill the row's data.
for (int j = 0; j < row.length; j++)
{
row[j] = data[i][j];
}
// Set the row in the table model.
dtm.addRow(row);
}
// Set the model of the table to the newly created DefaultTableModel.
table.setModel(dtm);
((AbstractTableModel) table.getModel()).fireTableDataChanged();
}
Here is the code which calls updateTable()
:
JavaScript
// Calls update table, SERVER.dbtoArray() returns a 2D Array of objects.
updateTable(SERVER.dbToArray());
Advertisement
Answer
JavaScript
DefaultTableModel dtm = new DefaultTableModel();
Even though you add data to the TableModel you didn’t add any column names so as far as the table is concerned there are 0 columns to display.
Your code should be something like:
JavaScript
String[] columnNames = { "Column1", "Column2", "..." );
DefaultTableModel dtm = new DefaultTableModel(columnNames, 0);
Or a better approach would be to use:
JavaScript
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);
This will keep the existing columns and just add the data.
Also you don’t need to recreate the row array. You already have the data as a row in your 2D array:
JavaScript
for (int i = 0; i < data.length; i++)
{
Object[] row = data[i];
model.addRow( row );
}