我想更新数据库中的swing表的行值,清除模型,并使用新的更新值加载新模型。问题是当我单击按钮更新值时,模型被清除但表中没有数据显示。我做错了什么?
为了使示例更容易,删除了与表格无关的部分代码。
公共类ShowValues扩展了JFrame {
//Attributes
private DefaultTableModel model;
private JTable table = new JTable()
{
public boolean isCellEditable(int row, int column)
{
return false;
};
};
public ShowValues() {
btnDeleteItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
int selectedRowNumber = table.getSelectedRow();
String selectedItemId = (String) table.getModel().getValueAt(selectedRowNumber, 0);
//code to change selected item's state to deleted in the DB
model.setRowCount(0); //clear model
showTable(); //load new model
labelMsg.setText("Item deleted");
}
});
btnDeleteItem.setBounds(200, 320, 203, 57);
contentPane.add(btnDeleteItem);
}
public void showTable()
{
String columnNames[] = {"Item Id", "Item Name", "Item price"};
//code to get the data form the DB
String dataValues[][] = new String[itemNum][3];
for(int i=0; i<itemNum; i++)
{
dataValues[i][0] = idItem[i];
dataValues[i][1] = nameItem[i];
dataValues[i][2] = priceItem[i];
}
model = new DefaultTableModel(dataValues, columnNames);
table.setModel(model);
scrollPane = new JScrollPane(table);
scrollPane.setBounds(17, 20, 490, 205);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
topPanel.add(scrollPane);
}
}
答案 0 :(得分:1)
//将所选项目的状态更改为DB中删除的代码
为什么要重新加载所有数据只是因为更改了行中一个属性的值?这不是很有效。
只需使用setValueAt(...)
方法更改JTable中的值。
问题是,当我单击按钮更新值时,模型被清除但表中没有数据
问题是你创建了一个新的JTable,但是你从不将表添加到JScrollPane的视口中。
解决方案是不创建新的JTable。只需创建一个新的TableModel。然后你可以使用:
table.setModel( theNewlyCreateTableModel );