【问题标题】:JTable becomes blank after executing update on table? [closed]对表执行更新后,JTable 变为空白? [关闭]
【发布时间】:2021-03-04 10:57:50
【问题描述】:

我正在尝试编写一些软件,当用户向 SQL 数据库添加新条目时,我的 JTable 会显示数据库中的条目更新。目前,当调用updateTable(Object[][] data)方法时,会导致表格变为空白。

有人知道此类问题的解决方法吗?

这里是方法的代码:

    /**
     * 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());

【问题讨论】:

  • 对于像我们这样的陌生人来说,根据一个小的不可编译的 sn-p 来猜测你的代码出了什么问题是非常困难的,如果不是不可能的话,并且在你询问它为什么行为不端的情况下(暗示您不知道原因),您很可能发布与错误无关的代码。如果您为这个问题明确地创建了一个新的小型可编译和可运行程序,代码足够小以适应问题但又足够完整以编译、运行并为我们显示错误,minimal reproducible example 会更好。该链接将解释这是什么以及它如何提供帮助。
  • 重申:我不是要你的整个程序,也不是代码库的链接,而是按照minimal reproducible example 链接中的说明创建一个新的小程序。
  • 不相关的问题:您应该永远在模型本身之外拨打((AbstractTableModel) table.getModel()).fireTableDataChanged(); 之类的电话。

标签: java swing user-interface jtable


【解决方案1】:
DefaultTableModel dtm = new DefaultTableModel();

即使您将数据添加到 TableModel 中,您也没有添加任何列名,因此就表而言,有 0 列要显示。

你的代码应该是这样的:

String[] columnNames = { "Column1", "Column2", "..." );
DefaultTableModel dtm = new DefaultTableModel(columnNames, 0);

或者更好的方法是使用:

DefaultTableModel dtm = (DefaultTableModel)table.getModel();
dtm.setRowCount(0);

这将保留现有列并仅添加数据。

您也不需要重新创建行数组。您已经将数据作为 2D 数组中的一行:

for (int i = 0; i < data.length; i++)
{
    Object[] row = data[i];
    model.addRow( row );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2019-12-09
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多