JTable fireTableDataChanged()方法不刷新表

k4s*_*sia 0 java swing jtable

添加一行后,我希望刷新JTable.不幸的是它不是.

我的代码是这样的:

我如何添加一行:

JButton btnDodaj = new JButton("Dodaj");`

panel.add(btnDodaj);

btnDodaj.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        int selectedOption = JOptionPane.showConfirmDialog(null, "Na pewno chcesz dodac nowy rekord?",
                "wybieraj", JOptionPane.YES_NO_OPTION);
        if (selectedOption == JOptionPane.NO_OPTION) {
            return;
        }
        dbHelper.dodajOsoba(editPaneName.getText(), editPaneNazw.getText(), formattedDataUr.getText(),
                (Enum) comboBoxStCyw.getSelectedItem(), (String) comboBoxZaw.getSelectedItem(),
                (String) comboBoxMia.getSelectedItem(), textFieldPesel.getText());
        simpleTableDemo.model.fireTableDataChanged();

    }
});
Run Code Online (Sandbox Code Playgroud)

我如何将simpleTableDemo添加到JPanel:

simpleTableDemo = new ListaOsob();
sl_panel.putConstraint(SpringLayout.NORTH, simpleTableDemo, 100, SpringLayout.SOUTH, comboBoxMia);
sl_panel.putConstraint(SpringLayout.WEST, simpleTableDemo, 33, SpringLayout.WEST, panel);
sl_panel.putConstraint(SpringLayout.EAST, simpleTableDemo, 617, SpringLayout.WEST, panel);
panel.add(simpleTableDemo);
Run Code Online (Sandbox Code Playgroud)

SimpleTableDemo的定义:

Object[][] data2 = dbHelper.wyswietlOsoba();
model = new DefaultTableModel(data2, columnNames);
table = new JTable(model);
Run Code Online (Sandbox Code Playgroud)

编辑:

我的dodajOsoba方法:

try {
        sql = "INSERT INTO osoba1 (imie, nazwisko, dataUrodzenia, stanCywilny, zawod, miasto, pesel) VALUES ('" + imie
                + "', '" + nazwisko + "','" + dataUrodzenia + "','" + stanCywilny + "','" + zawod + "','" + miasto
                + "','" + pesel +"');";
        ListaOsob lista = new ListaOsob();
        lista.model.addRow(new Object[]{imie, nazwisko, dataUrodzenia, stanCywilny,zawod,miasto,pesel});

        stmt.execute(sql);

    }
Run Code Online (Sandbox Code Playgroud)

行添加正确但JTable没有刷新.

我错过了什么?

cam*_*ckr 5

根据代码提供,我们无法分辨出什么是错误的.我们所能做的就是猜测:

  1. 我们不知道该dodajOsoba方法的作用,尽管它几乎肯定是错误的.如果要更改表中显示的数据,则需要直接更新数据TableModel.所以,你的代码应该是使用addRow(...)的方法DefaultTableModel来添加新的数据行.

  2. 您永远不应该fireTableDataChanged()在应用程序代码中调用.TableModel的工作是调用该方法.该addRow(...)方法DefaultTableModel将调用你适当的方法.