1

私は自分と同じような投稿を読んでいて、Javaチュートリアルページを読んでいますが、これを機能させることができないようです。基本的なものが欠けているかどうかはわかりません...

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

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関数は何もしません。行はまだ存在します。特定の行を削除するにはどうすればよいですか?

ありがとう、

4

3 に答える 3

5

行が削除されたことを示すためにイベントを発生させるだけの呼び出しfireTableRowsDeletedは、モデルから実際にそれらを削除する必要があります。

于 2010-12-29T21:26:17.097 に答える
4

これを投稿した直後に私はそれを理解しました。

行の内容は、フィルターのリストに基づいています。

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

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

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

そしてそれは魅力のように機能します。

乾杯

于 2010-12-29T21:28:52.773 に答える
-1

私はこれが答えだと思います:

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

編集が終了すると、行は削除されます。

于 2013-01-01T23:23:23.943 に答える