3

私の現在のデザインは次のとおりです。メインアプリを表示する外枠があります。ユーザーがメインアプリのボタンをクリックすると、ポップアップウィンドウが起動するはずです。JOptionPane.showInternalOptionDialogを使用しており、ボタンオブジェクトをオプションとして渡します。ユーザーがこれらのボタンの1つをクリックすると、特定のコマンドを実行してからウィンドウを閉じる必要があります。ポップアップが表示されているフレームを閉じることができませんでした。

このフォーラムで同様の質問を見つけました。これは、次の回避策を示唆しています。 JOptionPane.showOptionDialog()によって作成されたダイアログを閉じる

しかし、上記の回避策は私の完全なGUIを閉じます。JOptionPaneポップアップを閉じたいだけです。

前もって感謝します。

4

4 に答える 4

7

試す

JOptionPane.getRootFrame().dispose();

イベントで

于 2011-08-05T21:37:20.203 に答える
2

いくつかの解決策:

  1. showX()メソッドを使用する代わりに、JOptionPaneを直接作成します。これにより、ボタンに渡すことができるダイアログへの参照を取得して、disposeメソッド()を呼び出すことができるようになります。
  2. JOptionPaneを使用する代わりに、独自のダイアログを作成します。これは、単純なダイアログから離れ始めていることを考えると、私の好みのオプションです。
于 2011-03-23T16:39:57.923 に答える
2

私も同じ問題を抱えていました。X ミリ秒後に JOptionPane を閉じるスレッドを使用して解決します。

import javax.swing.JOptionPane;

    public class JOptionPaneExample {
        public static void main(String[] args) {
            final JOptionPane pane =new JOptionPane();
            Thread t1 = new Thread(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }               
                    pane.getRootFrame().dispose();
                }
            });
            t1.start();
            pane.showMessageDialog(null, "I will close after 3000 milli's", "Programmatic Auto-close JOptionPane", JOptionPane.INFORMATION_MESSAGE);
            System.exit(0);
        }
    }
于 2015-10-12T08:09:13.257 に答える
0

デフォルトでは、 のボタンをクリックするJOptionPaneとダイアログが閉じます。そうでない場合は、文字列やその他のオブジェクトではなく実際のコンポーネントを使用しており、独自のイベント ハンドラーではなくボタンのカスタム イベント ハンドラーを呼び出しているためです。

ボタンの代わりに文字列を使用して、別のアプローチを取ることをお勧めします。ボタンの配列を入力値として使用し、呼び出しがshowInternalOptionDialog返されたら、int インデックスをチェックして何が押されたかを調べ、コードでそれをオンにすることができます。この方法では、まったく触れる必要がなく、自動的JOptionPaneに閉じます。

于 2011-03-23T17:36:11.403 に答える