使用AbstractTableModel从JTable中删除行

时间:2012-12-14 14:25:15

标签: java swing user-interface jtable abstracttablemodel

我想使用按钮从JTable中移除选定的行。

以下代码适用于DefaultTableModel:

AbstractTableModel

但它不适用于... 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()); } } }

我的代码有点乱,所以这里是来自oracle页面的java example可以使用:

谢谢!

2 个答案:

答案 0 :(得分:4)

对于AbstractTableModel,您必须根据模型的内部数据结构实现自己的removeRow(),但是您可以研究DefaultTableModel的来源作为哪个事件的指南(s)开火。例如,

public void removeRow(int row) {
    // remove a row from your internal data structure
    fireTableRowsDeleted(row, row);
}

答案 1 :(得分:2)

只要表模型发生变化,

DefaultTableModel本身就会调用fireXX方法。但是如果我们使用AbstractTableModel,那么我们必须明确调用fireXX方法。因此,当表格发生变化时,只需调用相关的fireXX方法即可。

有关,

使用fireTableRowsInserted

向表中插入新行

删除(在您的情况下)使用fireTableRowsDeleted

更新使用fireTableRowsUpdated

注意: DefaultTableModel包含大部分已实施的方法。因此,除非确实需要AbstractTableModel否则坚持使用DefaultTableModel