1

次の問題が発生しています。ontablemodelがJFrame上にあるJTableがあります。テーブルモデルは、コンテンツを格納するための独自のハッシュマップでバックアップされます。テーブルには2つの列があり、右側の列を編集できます。

通常、ユーザーは右側の値を変更してからEnterボタンを押すと、保存関数を呼び出すtabledatachangedイベントが発生します。その後、フレームを閉じることができます。

ただし、一部のユーザーはセルを編集するだけで、Enterキーを押さずにウィンドウを閉じるため、テーブルを保存する機会がありません。フレームが閉じられようとしているときにイベントを書き込む方法は知っていますが、「未完了」の編集の内容を取得し、その編集を完了する方法もわかりません。

私はそれがcelleditorsと関係があると思います、私はアクティブなものを返すはずのtable.getCellEditor()でさえ試しましたが、代わりにnullを返します。

助けてくれてありがとう!

4

1 に答える 1

6

最も簡単な方法は、フォーカスを失ったときに最善を尽くすようにテーブルを構成することです。

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

残念ながら、最善の努力が十分でない場合があります(ユーザーがフレームの閉じるボタンをクリックした場合のfi)。それらの場合、編集を失う可能性のあるすべてのレーンに接続し、手動で編集を強制的に停止する以外に方法はありません。

if (table.isEditing()) {
    boolean stopped = table.getCellEditor().stopCellEditing();
    if (!stopped) {
        // here goes error handling and/or cancelling the edit
    }
}

問題の説明から、

一部のユーザーは、セルを編集するだけで、Enterキーを押さずにウィンドウを閉じます。

最初の機能が機能していることに少し驚いています。WindowListenerで2番目の機能を実行する必要があると予想していたでしょう。

Robのブログエントリも参照してください

于 2012-10-15T14:15:31.907 に答える