添加一行后,我希望刷新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();
}
});
我如何将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);
SimpleTableDemo的定义:
Object[][] data2 = dbHelper.wyswietlOsoba();
model = new DefaultTableModel(data2, columnNames);
table = new JTable(model);
编辑:
我的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);
}
正确添加了行,但JTable没有刷新。
我错过了什么?
答案 0 :(得分:5)
根据代码提供,我们无法分辨出错误。我们所能做的只是猜测:
我们不知道dodajOsoba
方法做了什么,尽管它几乎肯定是错的。如果要更改表中显示的数据,则需要直接更新TableModel
中的数据。因此,您的代码应使用addRow(...)
的{{1}}方法添加新的数据行。
您永远不应在应用程序代码中调用DefaultTableModel
。 TableModel的工作是调用该方法。 fireTableDataChanged()
的{{1}}方法会为您调用适当的方法。