17

JTable からいくつかの行を削除したいと考えています。どうすればいいですか?

4

6 に答える 6

38

JTable から行を削除するには、基になるTableModelから対象の行を削除する必要があります。たとえば、TableModel がDefaultTableModelのインスタンスである場合、次のようにして行を削除できます。

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove);
于 2009-07-13T06:29:33.650 に答える
9

簡単な解決策が必要な場合は、DefaultTableModelを使用してみてください。

AbstractTableModelを拡張する独自のテーブルモデルを作成した場合は、removeRow()メソッドも実装する必要があります。正確な実装は、データの保存に使用した基本構造によって異なります。

たとえば、Vectorを使用したことがある場合は、次のようになります。

public class SimpleTableModel extends AbstractTableModel {
    private Vector<String> columnNames = new Vector<String>();
    // Each value in the vector is a row; String[] - row data;
    private Vector<String[]> data = new Vector<String[]>();

    ...

    public String getValueAt(int row, int col) {
        return data.get(row)[col];
    }

    ...

    public void removeRow(int row) {
        data.removeElementAt(row);
    }
}

Listを使用したことがある場合は、非常によく似ています。

// Each item in the list is a row; String[] - row data;
List<String[]> arr = new ArrayList<String[]>();

public void removeRow(int row) {
    data.remove(row);
}

HashMap:

//Integer - row number; String[] - row data;
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>();

public void removeRow(Integer row) {
    data.remove(row);
}

そして、このようなアレイを使用している場合

String[][] data = { { "a", "b" }, { "c", "d" } };

配列から要素を動的に削除する方法がないため、運が悪いことになります。どの行が削除され、どの行が削除されないかを通知するフラグを個別に格納するか、その他の不正な方法で配列を使用しようとする場合がありますが、それはお勧めしません...それは不必要な複雑さをもたらし、実際には解決するだけです別のを作成することによる問題これは、ここで終わる確実な方法です。代わりに、上記のいずれかの方法でテーブルデータを保存してみてください。

これがどのように機能するか、および独自のモデルを適切に機能させるために何をすべきかをよりよく理解するには、 JavaチュートリアルDefaultTableModel API、およびそのソースコードを参照することを強くお勧めします。

于 2009-07-14T07:16:38.213 に答える
5

うーん、みんなとてもシンプルです

for( int i = model.getRowCount() - 1; i >= 0; i-- )
{
    model.removeRow(i);
}
于 2010-12-27T00:36:23.570 に答える
4

JTable にフィルタを適用する正しい方法は、TableRowSorter に追加されたRowFilterインターフェイスを使用することです。このインターフェイスを使用すると、基になるモデルを変更せずにモデルのビューを変更できます。この戦略は、Model-View-Controller パラダイムを維持しますが、非表示にしたい行をモデル自体から削除すると、関心の分離が混乱してパラダイムが壊れます。

于 2009-07-13T14:53:38.340 に答える
3

使用できる単純なモデルについては、DefaultTableModel を参照してください。

http://java.sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

これは AbstractTableModel を拡張しますが、基本的な目的には十分なはずです。いつでも AbstractTableModel を拡張して独自のものを作成できます。JTable にも必ず設定してください。

http://java.sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

テーブル モデルで JTable を使用する方法の詳細については、Sun の基本的なチュートリアルを参照してください。

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

于 2009-07-13T06:26:32.127 に答える
3

JTable は通常、MVC 実装のビュー部分を形成します。モデルから行を削除する必要があります。これらの変更をリッスンする必要がある JTable は、この削除を反映するように更新されます。したがって、JTable のメソッドとして removeRow() などは見つかりません。

于 2009-07-13T06:10:18.180 に答える