[英]Validating a double to be between two values and GUI opens two JFrames
因此,我一直在编写一个程序,该程序接受用户输入的员工数据并将其添加到ArrayList
进行显示。 该程序工作正常,除了两点。 首先,我正在尝试验证用户输入的每小时费率在6到160美元之间。 这是该代码:
try{
double r = Double.parseDouble(rate.getText());
if (r >= 6 && r <= 150){
test.setRate(r);
}
} catch(NumberFormatException e){
JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and $150.");
return;
}
它确实验证它在这些值之间,但如果不是,则将其简单地设置为0,而不是向用户显示消息并退出方法。
我的第二个问题有些复杂,说实话,我完全迷失了。 当我运行程序进行测试或调试时,它会打开两个窗口。 主窗口完全是空白的,但是可以控制EXIT_ON_CLOSE
命令,而第二个窗口具有我编写的所有代码。 我尝试搜索可能已经初始化但找不到的第二个JFrame
。 我有大量的代码,并且不确定可能需要什么,但是我认为这是基于行为导致问题的代码:
face = new JFrame();
face.setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GroupLayout design = new GroupLayout(face.getContentPane());
face.setLayout(design);
face.setVisible(true);
design.setAutoCreateGaps(true);
design.setAutoCreateContainerGaps(true);
design.setVerticalGroup
(
design.createSequentialGroup()
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(fName)
.addComponent(first)
.addComponent(list))
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(lName)
.addComponent(last))
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(hWork)
.addComponent(hours))
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(hRate)
.addComponent(rate))
.addComponent(admin)
.addComponent(market)
.addComponent(account)
.addComponent(prod)
.addComponent(sales)
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(submit)
.addComponent(exit))
);
design.setHorizontalGroup
(
design.createSequentialGroup()
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(fName)
.addComponent(lName)
.addComponent(hWork)
.addComponent(hRate)
.addComponent(admin)
.addComponent(market)
.addComponent(account)
.addComponent(prod)
.addComponent(sales)
.addComponent(submit))
.addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(first)
.addComponent(last)
.addComponent(hours)
.addComponent(rate)
.addComponent(exit))
.addComponent(list)
);
}
除了创建单个控件外,这还与GUI设计有关。 任何见识将在这里非常欢迎! 如果我忘了张贴东西,我会很乐意这样做。
尝试阅读允许的内容...
if (r >= 6 && r <= 150){
test.setRate(r);
}
如果您像我一样,然后结束并“现在做什么?” ...当值正确解析为double
,会发生什么,但超出范围...?
您将需要添加else
条件,以将所有条件限制在指定范围之外。
if (r >= 6 && r <= 150){
test.setRate(r);
} else {
// Show error message here
}
至于第二个问题,请考虑提供一个可运行的示例来演示您的问题。 这将减少混乱并改善响应。
同时,您可能还想看看如何使用Spinners ,它将使您能够定义一个组件,该组件几乎可以完成您的代码片段试图做的事情...
发生您的第一个问题是因为,如果r
不在6到150之间,则try
块不会引发NumberFormatException
因此不会执行catch
。 您需要添加else
语句以显示该消息。
boolean showError = false;
try{
double r = Double.parseDouble(rate.getText());
if (r >= 6 && r <= 150){
test.setRate(r);
}else{
showError = true;
}
} catch(NumberFormatException e){
showError = true;
}
if(showError){
JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and $150.");
}
由于您正在使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
直接我想您是在扩展JFrame
的类中执行此代码的,这意味着您有2个JFrame
,这是您在调用包含该代码和face
的类时创建的。
如果您有一个扩展JFrame
的类,不要创建其他JFrame
,则应删除:
face = new JFrame();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.