2010-12-29 9 views
1

私は鉱山に似た記事を読んでいて、Java tutorial pageで読んでいますが、これはうまくいかないようです。基本的でないものが欠けているかどうかは分かりません。カスタムTableModelでJTableの行を削除する方法

私は行を削除する必要があるカスタムテーブルモデルがあります。テーブルは空に初期化され、行はコンボボックスと追加ボタンによって追加されます。選択した行をテーブルから削除する必要がある削除ボタンもあります。

class TableModel extends AbstractTableModel 
{ 
    private String[] columnNames = {"Enabled", "Value" }; 
    protected Class[] columnClasses = new Class[] { Boolean.class, String.class }; 

    public int getColumnCount()    { return columnNames.length; } 
    public int getRowCount()    { return filters.size(); } 
    public String getColumnName(int col) { return columnNames[col]; } 
    public Class getColumnClass(int col) { return columnClasses[col]; } 

    public Object getValueAt(int row, int col) { ... } 

    public void setValueAt(Object value, int row, int col) { ... } 

    public void addRow(String value) 
    { 
     fireTableRowsInserted(filters.size() - 1, filters.size() - 1); 
     int row = filters.size() -1 ; 
     int col = 1; 
     setValueAt(value, row, col);    
    } 

    public void removeRow(int row) 
    {   
     fireTableRowsDeleted(selectedRow, selectedRow); 
    } 
} 

selectedRowには、コンソールに正しい行が印刷されていることが確認されています。 fireTableRowsDeleted関数は何もしません。行はまだ存在します。どのように特定の行を削除するだけですか?

おかげで、

+3

フィルタオブジェクトはどこから来たのですか? @njozwiak – gumuruh

答えて

3

私がこれを投稿した直後に、私はそれを理解しました。内容は、フィルタのリストに基づいています

行:

public int getRowCount() { return filters.size(); } 

私の問題は、私は、リストからそれを削除せずに行を削除しようとしていたでした。そこで、removeRow()を次のように修正しました:

public void removeRow(int row) 
{ 
    filters.remove(row); 
    fireTableRowsDeleted(row, row); 
} 

そして、それは魅力的です。私はこれが答えだと思う

歓声

5

fireTableRowsDeletedへの呼び出しは、単に行が削除されているを示すために、イベントをオフに発射し、あなたはまだ、実際にモデルからそれらを削除する必要があります。

+0

どうしたらモデルから取り除くのですか? -2D配列などのデータを削除していますか? :D – gumuruh

+0

はい、削除メソッドは、データを内部的に保持するために使用されるデータ構造からデータを実際に削除する必要があります。 – vickirk

0

:編集が終了したときに

final int row = selectedRow; 
EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      model.removeRow(row); 
     } 
}); 

行が削除されます。

関連する問題