问题
I would like to remove selected row from JTable with AbstractTableModel using a button.
The code below works with DefaultTableModel:
...
MyTableModel mtb;
...
private String[]....
private Object[][]...
...
JTable table = new JTable(mtb)
JButton delete;
...
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(delete))
{
if(table.getSelectedRow()<0)
{
JOptionPane.showMessageDialog(this,"Select row");
}
else
{
mtb.removeRow(table.getSelectedRow());
}
}
}
but it deosn't work with AbstractTablemodel.
I have a little mess in my code so here is java example from oracle page that can be used:
Thanks!
回答1:
For AbstractTableModel, you have to implement your own removeRow() based on your model's internal data structure(s), but you can study the source of DefaultTableModel as a guide on which event(s) to fire. For example,
public void removeRow(int row) {
// remove a row from your internal data structure
fireTableRowsDeleted(row, row);
}
回答2:
DefaultTableModel will itself call fireXX methods whenever there is a change in the table model. But if we use AbstractTableModel then we have to explicitly call fireXX methods. So when ever there is a change in the table just call relevant fireXX method.
For,
inserting a new row to the table use fireTableRowsInserted
deletion (in your case) use fireTableRowsDeleted
update use fireTableRowsUpdated
NOTE: DefaultTableModel has most of all the methods implemented. So unless there is a real need go for AbstractTableModel else stick with DefaultTableModel.
来源:https://stackoverflow.com/questions/13880545/remove-rows-from-jtable-with-abstracttablemodel