在 table 上执行更新后 JTable 变为空白?
JTable becomes blank after executing update on table?
我正在尝试编写一些软件,当用户向 SQL 数据库添加新条目时,我的 JTable 会显示数据库中的条目更新。当前,调用方法 updateTable(Object[][] data)
时,会导致 table 变为空白。
有人知道此类问题的解决方案吗?
方法代码如下:
/**
* 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();
}
这是调用 updateTable()
:
的代码
// Calls update table, SERVER.dbtoArray() returns a 2D Array of objects.
updateTable(SERVER.dbToArray());
DefaultTableModel dtm = new DefaultTableModel();
即使您将数据添加到 TableModel,您也没有添加任何列名,因此就 table 而言,有 0 列要显示。
你的代码应该是这样的:
String[] columnNames = { "Column1", "Column2", "..." );
DefaultTableModel dtm = new DefaultTableModel(columnNames, 0);
或者更好的方法是使用:
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);
这将保留现有列并仅添加数据。
此外,您不需要重新创建行数组。您已经将数据作为二维数组中的一行:
for (int i = 0; i < data.length; i++)
{
Object[] row = data[i];
model.addRow( row );
}
我正在尝试编写一些软件,当用户向 SQL 数据库添加新条目时,我的 JTable 会显示数据库中的条目更新。当前,调用方法 updateTable(Object[][] data)
时,会导致 table 变为空白。
有人知道此类问题的解决方案吗?
方法代码如下:
/**
* 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();
}
这是调用 updateTable()
:
// Calls update table, SERVER.dbtoArray() returns a 2D Array of objects.
updateTable(SERVER.dbToArray());
DefaultTableModel dtm = new DefaultTableModel();
即使您将数据添加到 TableModel,您也没有添加任何列名,因此就 table 而言,有 0 列要显示。
你的代码应该是这样的:
String[] columnNames = { "Column1", "Column2", "..." );
DefaultTableModel dtm = new DefaultTableModel(columnNames, 0);
或者更好的方法是使用:
DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);
这将保留现有列并仅添加数据。
此外,您不需要重新创建行数组。您已经将数据作为二维数组中的一行:
for (int i = 0; i < data.length; i++)
{
Object[] row = data[i];
model.addRow( row );
}