6

どうすればいいのかわかりません。アプリケーションを作成しています。テーブルを操作する必要があるため、JTable を使用しています。しかし、私はそれに多くの問題を抱えています。動作しているようですが、列を削除しようとすると、この列は消えます (GUI のみ) が、すべての情報はまだ存在します。また、列数は変更されません。
さまざまなコードを検索して試しましたが、何も変わりませんでした。

 public void addTblCol(JTable table,String name) {
    DefaultTableModel model = (DefaultTableModel)table.getModel();
     TableColumn col = new TableColumn(model.getColumnCount());

    col.setHeaderValue(name);
    table.addColumn(col);
    model.addColumn(name);
    this.realColCnt++;
      };
public void delTblCol(JTable table,int index) {
            DefaultTableModel model = (DefaultTableModel)table.getModel();
          TableColumn col = table.getColumnModel().getColumn(index);
    table.removeColumn(col);
    table.revalidate();
    this.realColCnt--;
      };
4

4 に答える 4

9

は、モデルの最後からのみ列を効果的に削除できる方法をDefaultTableModelサポートしています。setColumnCount()

モデルの途中から列を削除する場合は、次のことを行う必要があります。

  1. を拡張しDefaultTableModelて独自のremoveColumn(int column)メソッドを作成します。
  2. このメソッドは、ベクター内のすべての行をループし、Vector.remove(int)メソッドを使用してすべての行の列を削除する必要があります。
  3. 最後に、これが完了したら、fireTableStructureChanged()メソッドを呼び出して、テーブルを再描画できるように列が削除されたことをテーブルに伝える必要があります。
于 2013-11-03T21:53:37.407 に答える
4

あなたの質問に関連するいくつかの一般的な情報。

JTable APIには、public void removeColumn(TableColumn aColumn)明示的に次のように記載されています。

この JTable の列の配列から aColumn を削除します。注: このメソッドは、モデルからデータの列を削除しません。表示を担当していた TableColumn を削除するだけです。

したがって、あなたが経験している動作は予想されるものです。モデルからデータを削除しようとしている場合は、TableModel のデータと ColumnModel を変更する必要があります。繰り返しますが、より具体的なヘルプが必要な場合は、詳細をお知らせください。

removeColumn(...)カスタム テーブル モデルを作成し、1 つの列からすべてのデータを削除してから適切なメソッドを呼び出すメソッドを与えることを検討してくださいfireXXX(...)



コメントであなたの状態を編集します:

答えのためのTHx、私は初心者です。このプログラムは、私がそれを作成するために 2 日を無駄にした研究のためのようなものです.そして今、再びそれに問題があります. 最も簡単な方法は何ですか?

それはすべて、あなたが何をしたいかによって異なります。表示を変更するだけの場合は、現在行っているように列を削除し、データをそのままにしておきます。

于 2013-11-03T20:58:45.230 に答える
2

camickr のソリューションに基づいてremove、このコードをJTable.

public class CustomTableModel extends DefaultTableModel {
    public void removeColumn(int column) {
        // for each row, remove the column
        Vector rows = dataVector;
        for (Object row : rows) {
            ((Vector) row).remove(column);
        }

        // remove the header
        columnIdentifiers.remove(column);

        // notify
        fireTableStructureChanged();
    }
}

列を削除できるかどうかはチェックしないことに注意してください。

于 2017-05-16T20:02:16.477 に答える