Закрытие JOptionPane.ShowInternalOptionDialog программно - PullRequest
2 голосов
/ 23 марта 2011

Мой текущий дизайн выглядит так: у меня есть внешняя рамка, которая отображает основное приложение.Когда пользователь нажимает кнопку в главном приложении, должно быть запущено всплывающее окно.Я использую JOptionPane.showInternalOptionDialog и передаю объекты кнопки в качестве параметров.Когда пользователь нажимает одну из этих кнопок, он должен выполнить определенные команды и затем закрыть окно.Мне не удалось закрыть фрейм, отображающий всплывающее окно.

На этом форуме я нашел похожий вопрос, предлагающий следующий обходной путь. Закрытие диалогового окна, созданного JOptionPane.showOptionDialog ()

Но указанный выше обходной путь закрывает мой полный графический интерфейс.Я просто хочу закрыть всплывающее окно JOptionPane.

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 06 августа 2011

try

JOptionPane.getRootFrame().dispose();

в событии

2 голосов
/ 23 марта 2011

Пара решений:

  1. Создайте JOptionPane напрямую вместо использования методов showX (). Это позволит вам иметь ссылку на диалоговое окно, которое вы можете передать своей кнопке, чтобы она могла вызвать метод dispose ().
  2. Создайте свой собственный диалог вместо использования JOptionPane. Это будет мой предпочтительный вариант, так как вы начинаете уходить от простого диалога.
0 голосов
/ 12 октября 2015

У меня была такая же проблема.Я решаю это с помощью потока, который закрывает мою панель JOptionPane через X миллисекунд.

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);
        }
    }
0 голосов
/ 23 марта 2011

По умолчанию нажатие кнопки в JOptionPane закроет диалоговое окно.Если это не так, это потому, что вы используете реальные компоненты, а не строки или другие объекты, и он вызывает собственные обработчики событий ваших кнопок вместо своих собственных.

Я бы порекомендовал вам использовать другой подход,используя строки вместо кнопок.Используйте массив кнопок в качестве входных значений, и когда возвращается вызов showInternalOptionDialog, вы можете проверить индекс int, чтобы выяснить, что было нажато, а затем включить его в своем коде.Таким образом, вам совсем не нужно прикасаться к JOptionPane, и он закроется сам.

...