2

JTableカスタムセルエディターを使用しています。エディターが実装されFocusListenerているため、ユーザーがセルから離れた場所をクリックした場合に、セルの内容が有効かどうかを確認できます。

JOptionPanewithin focusLost(in the EventDispatchThread) を使用して、ユーザーが古い値に戻すか、調整された値を受け入れるかを選択できるようにしたいと思います。

ここに問題があります。ユーザーがセルを編集しているときに、テーブルから離れたボタンをクリックすると、ボタンが戻るactionlistenersにアラートが表示されます。 JOptionPane

これは私がしたいことです:

  • ユーザーがセルを編集
  • ユーザーがボタンをクリック
  • セルがフォーカスの喪失を検出
  • JOptionPane が表示され、ユーザーがアクションを選択する
  • JOptionPane が閉じ、セルの値が設定されます
  • 呼び出されたボタンの actionListeners

代わりに、これが起こっています:

  • ユーザーがセルを編集
  • ユーザーがボタンをクリック
  • セルがフォーカスの喪失を検出
  • JOptionPane が表示され、ユーザーがアクションを選択する
  • 呼び出されたボタンの actionListeners
  • JOptionPane が閉じ、セルの値が設定されます

JOptionPaneが閉じられるまでボタンのアクション イベントを延期することは可能ですか?

JDialog他のスレッドから、ダイアログ自体がイベントを処理できるように、イベントのディスパッチが継続されるようにする魔法を読んだことがあります。

4

2 に答える 2

0

私が収集したものから、ユーザーが JOptionPane から正しい値を選択するまで、ボタンのアクションリスナーをまったくアクティブにしたくないでしょう。

focusLost がトリガーされると、「無効」フラグを設定することが解決策のように思えます。選択が完了すると、無効フラグが下がります。ボタン アクションがトリガーされると、フォームが無効になっているかどうかがチェックされます。そうであれば、何もしません。そうでない場合は、通常どおり続行します。

ユーザーが JOptionPane で何かを選択すると、ボタン イベントが自動的に開始されないことに注意してください。代わりに、ボタンを再度クリックする必要があります。私には、これは、フォームを変更する必要があった後にボタンをもう一度「クリック」するよりも優れた機能のように思えます。

于 2012-02-14T11:30:40.880 に答える
0

検証ロジックを の中TableCellEditor#stopCellEditing()に入れて、ダイアログを表示し、値が有効でない場合は false を返します。

フォーカスが失われたときにテーブルの編集を自動的に停止するには、 を使用しますtable.putClientProperty("terminateEditOnFocusLost", true);が、ボタン アクション リスナーの実行が停止するとは思いません。代わりに、通常は actionPerformed でテーブルの編集を停止し、false が返された場合は何もしません (または、アクションがそのテーブル行を削除する場合など、必要に応じて編集をキャンセルします)。

于 2012-02-14T11:42:21.650 に答える