Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOptionPane.createDialog和OK\u CANCEL\u选项_Java_Swing_Jdialog_Joptionpane - Fatal编程技术网

Java JOptionPane.createDialog和OK\u CANCEL\u选项

Java JOptionPane.createDialog和OK\u CANCEL\u选项,java,swing,jdialog,joptionpane,Java,Swing,Jdialog,Joptionpane,我有一个自定义对话框,从用户那里收集两个字符串。在创建对话框时,我对选项类型使用OK\u CANCEL\u选项。除用户单击“取消”或关闭对话框外,所有提示均有效,其效果与单击“确定”按钮相同 如何处理取消和关闭事件 下面是我要说的代码: JTextField topicTitle = new JTextField(); JTextField topicDesc = new JTextField(); Object[] message = {"Title: ", topicTitle, "Desc

我有一个自定义对话框,从用户那里收集两个字符串。在创建对话框时,我对选项类型使用OK\u CANCEL\u选项。除用户单击“取消”或关闭对话框外,所有提示均有效,其效果与单击“确定”按钮相同

如何处理取消和关闭事件

下面是我要说的代码:

JTextField topicTitle = new JTextField();
JTextField topicDesc = new JTextField();
Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};

JOptionPane pane = new JOptionPane(message,  JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog getTopicDialog =  pane.createDialog(null, "New Topic");
getTopicDialog.setVisible(true);

// Do something here when OK is pressed but just dispose when cancel is pressed.
在你的情况下返回

JOptionPane.OK_OPTION
JOptionPane.CLOSED_OPTION
JOptionPane.CANCEL_OPTION

简单的示例

我认为更好的选择是使用以下代码

    JTextField topicTitle = new JTextField();
    JTextField topicDesc = new JTextField();
    Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};


    Object[] options = { "Yes", "No" };
    int n = JOptionPane.showOptionDialog(new JFrame(),
            message, "",
            JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
            options, options[1]);
    if(n == JOptionPane.OK_OPTION){ // Afirmative
        //.... 
    }
    if(n == JOptionPane.NO_OPTION){ // negative
        //....
    }
    if(n == JOptionPane.CLOSED_OPTION){ // closed the dialog
        //....
    }
通过使用showOptionDialog方法,您将根据用户的操作得到一个结果,因此您无需执行任何其他操作,只需解释该结果

请参见。从“示例”点开始阅读文本:

以下是我的完整示例:

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Main {
public static void main(String[] args) {

    JTextField topicTitle = new JTextField();
    JTextField topicDesc = new JTextField();


    Object[] message = {"Title: ", topicTitle, "Description: ", topicDesc};

    JOptionPane pane = new JOptionPane(message,  
            JOptionPane.PLAIN_MESSAGE, 
            JOptionPane.YES_NO_CANCEL_OPTION);

    JDialog getTopicDialog =  pane.createDialog(null, "New Topic");
    getTopicDialog.setVisible(true);        

    Object selectedValue = pane.getValue();
    int n = -1;


    if(selectedValue == null)
        n = JOptionPane.CLOSED_OPTION;      
    else
        n = Integer.parseInt(selectedValue.toString());


    if (n == JOptionPane.YES_OPTION){
        System.out.println("Yes");
    } else if (n == JOptionPane.NO_OPTION){
        System.out.println("No");
    } else if (n == JOptionPane.CANCEL_OPTION){
        System.out.println("Cancel");
    } else if (n == JOptionPane.CLOSED_OPTION){
        System.out.println("Close");
    }       
}
}

非常感谢各位。使用showOptionDialog代替createDialog是可行的。您能解释一下您的解决方案吗?我认为它不起作用。需要那个窗格。getValue+处理n,thx