3

我想使用按钮删除选定JTableAbstractTableModel行。

下面的代码适用于 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()); 

                 }
         }
     }

但它不适用于AbstractTablemodel.

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

谢谢!

4

2 回答 2

5

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

public void removeRow(int row) {
    // remove a row from your internal data structure
    fireTableRowsDeleted(row, row);
}
于 2012-12-14T14:32:05.870 回答
3

DefaultTableModelfireXX只要表模型发生变化,它本身就会调用方法。但是如果我们使用AbstractTableModelthen 我们必须显式调用fireXX方法。因此,当表格发生变化时,只需调用相关fireXX方法即可。

为了,

向表中插入新行使用fireTableRowsInserted

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

更新使用fireTableRowsUpdated

注意: DefaultTableModel实现了所有方法中的大部分。因此,除非有真正的需要,AbstractTableModel否则请坚持使用DefaultTableModel.

于 2012-12-15T16:08:25.193 回答