3

我目前的设计是这样的:我有一个显示主应用程序的外框。当用户单击主应用程序上的按钮时,应启动一个弹出窗口。我正在使用 JOptionPane.showInternalOptionDialog 并将按钮对象作为选项传递。当用户单击其中一个按钮时,它应该运行某些命令,然后关闭窗口。我无法关闭显示弹出窗口的框架。

我在这个论坛中发现了一个类似的问题,它提出了以下解决方法。 关闭由 JOptionPane.showOptionDialog() 创建的对话框

但是上述解决方法关闭了我的完整 gui。我只想关闭 JOptionPane 弹出窗口。

提前致谢。

4

4 回答 4

7

尝试

JOptionPane.getRootFrame().dispose();

在一个事件中

于 2011-08-05T21:37:20.203 回答
2

几个解决方案:

  1. 直接创建 JOptionPane 而不是使用 showX() 方法。这将允许您引用可以传递给按钮的对话框以允许它调用 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

默认情况下,单击 a 中的按钮JOptionPane将关闭对话框。如果您没有,那是因为您使用的是实际组件而不是字符串或其他对象,并且它正在调用按钮的自定义事件处理程序而不是它自己的。

我建议您采用不同的方法,使用字符串而不是按钮。使用按钮数组作为输入值,当调用showInternalOptionDialog返回时,您可以检查 int 索引以找出按下的内容,然后在代码中打开它。这样,您根本不必触摸JOptionPane它,它会自行关闭。

于 2011-03-23T17:36:11.403 回答