自定义JDialog - 查看是否按下了OK

时间:2015-01-12 10:27:02

标签: java swing actionlistener joptionpane jdialog

我有一个自定义的JDialog,我为了解决一些本地问题(RTL等') 直到现在,它只有一个" ok"选项, 我现在必须修改它还有一个取消按钮。 我做到了 现在唯一的问题是我不知道如何从中获取输入,是按下还是取消?

请帮忙。

这是我的代码:

public MyDialog(String title,boolean withCancelButton) {

String message = "<html><b><font color=\"#8F0000\" size=\"7\" face=\"Ariel\">" + title + "</font></p></html>";

JOptionPane pane = new JOptionPane(message, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);        

JDialog dialog = pane.createDialog(null, title);

dialog.setVisible(true);
dialog.dispose();

if (pane.getOptionType() == 1)
    okWasPressed = true;
else
    okWasPressed = false;

}

问题是pane.getOptionType()总是返回&#34; 2&#34;,所以它可能是选项计数或其他东西。

如何进行实际选择?

感谢, 戴夫。

3 个答案:

答案 0 :(得分:1)

最简单的选择是使用标准功能,如下所示:

int opt = JOptionPane.showOptionDialog(jf, "Do you really want to?", "Confirm",
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
if(opt == JOptionPane.OK_OPTION) {
    System.out.println("Ok then!");
} else {
    System.out.println("Didn't think so.");
}

如果你真的想使用你自己的对话框,就像在例子中一样,你应该使用getValue()来检查被按下的内容:

JOptionPane optionPane = new JOptionPane("Do you really want to?",
        JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = optionPane.createDialog(jf, "Confirm");

dialog.setVisible(true);
dialog.dispose();

int opt = (int) optionPane.getValue();
if(opt == JOptionPane.OK_OPTION) {
    System.out.println("Ok then!");
} else {
    System.out.println("Didn't think so.");
}

答案 1 :(得分:0)

通常可以这样做:

int response = JOptionPane.showConfirmDialog(parent, "message", "title", JOptionPane.OK_CANCEL_OPTION);
System.out.println(response);

答案 2 :(得分:0)

询问JavaDocs ...

中描述的问题
 JOptionPane pane = new JOptionPane(arguments);
 pane.set.Xxxx(...); // Configure
 JDialog dialog = pane.createDialog(parentComponent, title);
 dialog.show();
 Object selectedValue = pane.getValue();
 if(selectedValue == null)
   return CLOSED_OPTION;
 //If there is not an array of option buttons:
 if(options == null) {
   if(selectedValue instanceof Integer)
      return ((Integer)selectedValue).intValue();
   return CLOSED_OPTION;
 }
 //If there is an array of option buttons:
 for(int counter = 0, maxCounter = options.length;
    counter < maxCounter; counter++) {
    if(options[counter].equals(selectedValue))
    return counter;
 }
 return CLOSED_OPTION;

您应该可以使用JOptionPane#getValue()

但是,除非你有一些强烈的理由这样做,否则你应该使用static工厂方法之一。有关详细信息,请参阅How to Make Dialogs