複数のカスタム ダイアログがあり、閉じる操作を簡単に指定できる方法が必要でした。まず、匿名の内部 windowListener クラスを使用し、ダイアログごとにその方法で閉じる方法を指定していました。
独自のクラスを作成して WindowListener クラスを実装し、すべてのダイアログに対して 1 つのウィンドウ クローズ メソッドを指定する方が効率的であると考えました。
だから私はこれをしました、そしてそれはうまくいきます。
public class WindowWatcher implements WindowListener{
@Override
public void windowClosing(WindowEvent e) {
System.out.println("Are you sure you wish to exit?");
int Answer = JOptionPane.showConfirmDialog(frame, "Are you sure want to exit?", "Quit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (Answer == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
}
注: クラスには他にも実装されているメソッドがあります。
とにかく、私が直面している問題は、[終了] をクリックしてから [いいえ] をクリックし、ダイアログを続行して [OK] をクリックしようとしたときです。何も起こりません。
これは、呼び出し元の JOptionPane の UNINITIALIZED_VALUE と関係があることを理解しています。
この UNINITIALIZED_VALUE に対する呼び出し元の optionPane を確認する必要があります。おもう??
何かのようなもの:
optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE);
ただし、上記のコードは、optionPane にアクセスできることを前提としています。ただし、私のクラス「WindowWatcher」クラスでは、アクセスできません。
どうすればこれを行うことができますか?おそらく、e.GetSource() を JOptionPane. としてキャストできます。
編集。
((JOptionPane)e.getSource()).setValue(JOptionPane.UNINITIALIZED_VALUE);
上記は機能しませんでした。「JDialog は JoptionPane としてキャストできません」
どうもありがとう!