1

複数のカスタム ダイアログがあり、閉じる操作を簡単に指定できる方法が必要でした。まず、匿名の内部 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 としてキャストできません」

どうもありがとう!

4

3 に答える 3