![](/img/trans.png)
[英]Changing Default of JOptionPane.YES_NO_OPTION while maintaining keyboard shortcuts?
[英]Using Boolean True/False with JOptionPane.YES_NO_OPTION
我在四个单独的对话框中有一系列四个是/否选择,其累积结果将导致十二个单独的链接之一(例如,是/是/是/否->链接A,是/否/否/是->链接B等)。 分支逻辑使用布尔值。
到目前为止,这就是我的...只是第一个对话框并打印结果以进行验证。
public class OutageGuideSelector{
public static void main(String[] args){
boolean contactServerUp;
boolean vistaUp;
boolean stormOutage;
boolean vistaCSUp;
//
int contactServerEntry = JOptionPane.showConfirmDialog(null,
"Is the contact server up", "Please select",
JOptionPane.YES_NO_OPTION);
System.out.println("result from entry " + contactServerEntry);
if(contactServerEntry==1)
contactServerUp = true;
else
if(contactServerEntry==0)
contactServerUp = false;
/* System.out.println(contactServerUp); */
}}
现在,单击YES的结果将返回0
,否则返回1
。 这是正常现象,似乎是违反直觉的,并且docs.oracle.java中没有任何东西可以显示输出值的清晰示例,除了这似乎表明public static final int YES_NO_OPTION
缺省为0。
此外,该行System.out.println(contactServerUp);
会返回一个错误,当我取消注释该字段时, contactServerUp might not have been initialized
字段contactServerUp might not have been initialized
,因此我看不到convert-int-to-boolean是否正常工作。
首先:看来JOptionPane方法不包含任何布尔返回值……除了getWantsInput()
返回了wantInput属性的值之外……所以我认为我已经是使用此方法效率最高的方法了。 我想知道是否有更简单的方法。
其次,我缺少什么阻止我的控制台输出语句识别contactServerUp
? 我放错位置的分号在哪里?
根据javadoc ,当showXxxDialog方法之一返回整数时,可能的值为:
您应该针对这些常量进行测试:
contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
JOptionPane对话框返回的值是在类中定义为常量字段的值。
尽管确实可以假定0表示false,1表示true,但是对于对话框可以具有的不同按钮,值更多。
要知道用户是按是还是否,可以将返回值与此处描述的常量字段进行比较。 例如,在您的情况下:
contactServerUp = (contactServerEntry == JOptionPane.YES_OPTION);
由于对话框,JOptionPane可以具有两个以上的“答案”,因此布尔值将表示不佳。 您忘记了“是”,“否”和“取消”选项,或者只是一个好的答案。
如果今天写的话,我怀疑应该用Enum代替int。
至于第二个问题,编译器不允许访问未初始化的变量。 当您执行以下操作时,可能无法初始化该变量:
if(contactServerEntry==1)
contactServerUp = true;
else
if(contactServerEntry==0)
contactServerUp = false;
例如,如果contactServerEntry == JOptionPane.CLOSED_OPTION
怎么办? 在这种情况下,永远不会初始化您的布尔值。 您需要在if-else链的末尾添加else
子句,或者在开始处将contactServerUp值初始化为默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.