2

JPanelにJTableがあり、編集したセルを保存する方法を知りたいです。現在、セルを編集してEnterキーを押すと、新しいデータが表示されますが、プログラムを閉じて再度開くと、データは元の状態に戻ります。

ピクチャー:

JTableの編集中:

ここに画像の説明を入力してください

プログラムを再起動した後:

ここに画像の説明を入力してください

前もって感謝します

編集:

プロジェクト内の.txtファイルからデータを取得しようとしています。どうすればいいのかよくわかりません。保存したデータを.txtファイルに取り込む方法やJTableに実装する方法がわかりません。

4

3 に答える 3

2

TableModelListenersのメソッドを使用し、何かが変更されるたびに(データのロード時に使用するのと同じ形式で)ディスクへの書き込みをトリガーする必要があります。だから、次のようなものを書いてください

myTable.getModel().addTableModelListener(new TableModelListener() {
   @Override
   public void tableChanged(TableModelEvent e) {
       // access the values of the model and save them to the file here
   }
});
于 2013-01-13T17:59:57.683 に答える
2

おそらく使用するDefaultTableModel (他のことについては話していないため) は Serializable です。JTable.getModel()を使用して取得し、シャットダウン時に ObjectOutputStream を使用してファイルに書き込みます。プログラムの起動時に、ObjectInputStreamを使用してロードし直し、テーブルに設定します。

アプリケーションがいつ終了するかわからない場合は、ウィンドウを閉じるリスナーを追加して、そこにテーブル モデルを保存します。

もちろん、実行間でテーブルを保存する方法は他にもたくさんあります。

于 2013-01-13T17:18:29.080 に答える
1

Swing は MVC を念頭に置いて構築されています。おそらくご存知のように、MVC は Model View Controller の略です。したがって、モデルはデータを含むものであり、データのグラフィカルな表現であるビューから切り離されています。

モデルはデフォルトのテーブル モデルです (または、別の実装を使用している可能性があります)。ビューは JTable そのものです。今では次のように動作します: コントローラーがモデルを変更します。モデルは、そのような変更について知りたい人にイベントを送信します。この場合のコントローラーは JTable (編集可能な部分) でもあります。実際、セルを編集した後、JTable の背後にあるテーブル モデルが変更されます (コントローラーはそのモデルが誰であるかを知っているので、それを変更します)。ここで、モデルは (swing でイベントを送信します) : 「私は変更されました」と言うので、変更イベントがあります。

唯一の問題は、おそらく誰もこのイベントを処理しないため、モデルの変更が再起動後も持続することです。

あなたがすべきことは次のとおりだと思います:モデルを取り、それをファイルにシリアル化する/ xmlファイルまたはデータベースに入れるリスナーを実装します-再起動後も生き残るものは何でも(最も適切な形式について考えることができます)。

特定のクラスについては指摘しませんでしたが (TableModelListener は既に提案されています)、全体的な説明はここでは問題ないと思いました。

お役に立てれば

于 2013-01-13T18:22:00.903 に答える