java - JOptionpane + JDialog(非模态)获取返回值

标签 java swing joptionpane jdialog non-modal

我有一个非模式对话框,其中有两个输入文本字段,其中 JOptionPane 带有“确定”和“取消”按钮。我显示的对话框如下。

        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);

如何从对话框中获取返回值?意味着我需要知道是否按下了“确定”或“取消”按钮。如何才能实现这一目标?

最佳答案

一种方法是向对话框添加一个ComponentListener并监听其可见性的变化,

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 来代替;我展示了整个界面以供说明。

关于java - JOptionpane + JDialog(非模态)获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263965/

相关文章:

java - Bayeux/CometD C Lang 客户端

java - Java接口(interface)的switch语句

java - JApplet 上的分层对象(扩展 JComponet)

java - 十六进制 Jspinner 的一些提示?方法正确吗

Java Swing : Add a component by code in NetBeans

java - JOptionPane 在无按钮上关闭框架

java - XStream - 加载自定义 XML

java - 如何将 Java 连接到 Microsoft SQL 服务器

java - 制作带有标题和标签的对话框

java - 使用自定义错误消息将用户输入转换为整数