【问题标题】:JOptionpane + JDialog (non-modal) get the return valueJOptionpane + JDialog(非模态)获取返回值
【发布时间】:2014-02-11 09:23:49
【问题描述】:

我有一个非模态对话框,其中包含两个输入文本字段,其中 JOptionPane 显示带有 OK 和 CANCEL 按钮。我显示如下对话框。

        JTextField field_1 = new JTextField("Field 1");
        JTextField field_2 = new JTextField("Field 2");

        Object[] inputField = new Object[] { "Input 1", field_1,
                "Input_2", field_2 };

        JOptionPane optionPane = new JOptionPane(inputField,
                JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
        JDialog dialog = optionPane.createDialog(null, "Input Dialog");
        dialog.setModal(false);
        dialog.setVisible(true);

如何从对话框中获取返回值?意味着我需要知道是否按下了确定或取消按钮。如何做到这一点?

【问题讨论】:

标签: java swing joptionpane jdialog non-modal


【解决方案1】:

Using getValue() 会告诉你对话框是如何关闭的。由于它是非模态的,因此您需要在对话框关闭后获取该信息,可能使用Thread 等待您的对话框关闭以返回信息。您没有提供任何需要该信息的详细信息,因此使用另一个 Thread 可能不是您的最佳解决方案。

【讨论】:

    【解决方案2】:

    一种方法是将ComponentListener 添加到dialog 并监听其可见性的变化,

    dialog.addComponentListener(new ComponentListener() {
        @Override
        public void componentResized(ComponentEvent e) { }
    
        @Override
        public void componentMoved(ComponentEvent e) { }
    
        @Override
        public void componentShown(ComponentEvent e) { }
    
        @Override
        public void componentHidden(ComponentEvent e) {
            if ((int) optionPane.getValue()
                    == JOptionPane.YES_OPTION) {
                // do YES stuff...
            } else if ((int) optionPane.getValue()
                    == JOptionPane.CANCEL_OPTION) {
                // do CANCEL stuff...
            } else {
                throw new IllegalStateException(
                        "Unexpected Option");
            }
        }
    });
    

    注意:您应该改用ComponentAdapter;我正在展示整个界面以进行说明。

    【讨论】:

    • 我试过了,在与 JOptionPane 交互时没有调用任何 Overriden 方法。
    • @MarkCramer 我确实注意到我的答案有一个编译时错误,我已经修复了。但除此之外,我从问题和这个答案中获取了代码,它似乎按预期工作。您能否创建一个问题来举例说明它在哪些方面不适合您?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多