3

ボタンJTableを使用して選択した行を削除したいと思います。AbstractTableModel

以下のコードは、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テーブルモデルに変更があるたびに、それ自体がメソッドを呼び出します。しかし、使用する場合は、メソッドAbstractTableModelを明示的に呼び出す必要がありfireXXます。したがって、テーブルに変更があるときはいつでも、関連するfireXXメソッドを呼び出すだけです。

為に、

テーブルに新しい行を挿入するには、 fireTableRowsInsertedを使用します

削除(あなたの場合) fireTableRowsDeletedを使用

更新はfireTableRowsUpdatedを使用します

注: DefaultTableModelほとんどのメソッドが実装されています。したがって、本当に必要がない限り、 go for AbstractTableModelelse に固執してDefaultTableModelください。

于 2012-12-15T16:08:25.193 に答える