0

わかりましたので、ここで質問しなければならないのはタイトルだけだと思います。

空のAbstractTableModel行を追加したいときは、次のコードを使用します。

public void addRow() {
    Object[][] oldData = data;
    data = new Object[oldData.length + 1][3];

    // Copy old data to new data
    for (int x = 0; x < oldData.length; x++) { 
        data[x] = oldData[x]; 
    } 

    // Append new row 
    data[oldData.length] = new Object[] {"", "", false}; 

    fireTableRowsInserted(data.length - 2, data.length - 1);
}

今、私は空の行を表示しているので、ユーザーにそれを編集してもらいたいのですが、ユーザーがそうすると思います。では、ユーザーが変更を加えたときにデータが配列に保存されるようにするにはどうすればよいでしょうか? または、それが不可能な場合、より良い代替手段はありますか?

わかりましたので、おそらく私がやりたいことを説明する必要があります:

ここに画像の説明を入力

ファイルから内容を読み込んで、表として表示しています。これで、ユーザーはボタンをクリックしてテーブルに新しい行を追加できAdd Rowます。これにより、クリックごとに 1 つの空の行が追加されます。(上のこの画像では、ボタンを 2 回押した場合の例です。

今、ユーザーがセルを編集してから、おそらくいくつかの行を削除できるようにしたいのですが、Save Databaseボタンをクリックすると、テーブル内の更新されたデータが保存されます。

4

1 に答える 1

2

いくつかのアプローチを比較することで、よりよく理解できるかもしれません。

  • このでは、バックグラウンドスレッドまたはボタンのいずれかでテーブルに新しい行を追加できます。バックグラウンドスレッドはRunnable、を介してEDT上ののインスタンスをシーケンスしますinvokeLater()。概念的には理解しやすいですが、間違えやすいです。

  • SwingWorker共有データへのシーケンスアクセスをカプセル化します。APIチュートリアルpublish()は、 /を使用してコンポーネントのモデルを更新する基本的なアプローチを示していますprocess()。この推奨されるメカニズムは、より堅牢でスケーラブルです。

  • このより高度なでは、Swingは一連のインスタンスを制御するTimerペースを調整します。ExecutorSwingWorker

すべての場合において、テーブルは機能し続けます。sscceの基礎としてanyを使用できます。

補遺:あなたが提案した戦略についてもう少し説明していただけますか?

例のリストを更新し、コンテキストで探すべきいくつかのことを提案しました。

于 2013-03-02T06:23:12.073 に答える