[英]How do I get a second textfield value to be read and calculated
我已经被困了好几天,试图弄清楚为什么我不能从inurancevaluetextfield获得值。 我已经附上了两个文件,因此,如果有人要运行它,他们可以看到我的问题。 我进入选择“保险”复选框并输入一个介于100和2000之间的值的阶段,但是我不断收到错误消息,指出我的值不在这些数量之间。 因此,我认为根本不会读取文本字段。
public void setInsurancecost(double insurancecost)
{
this.insurancecost = insurancecost;
}
public double getInsurancecost()
{
if (value < 100)
{ JOptionPane.showMessageDialog(null, "Insurance can only be purchased for items valued between $100 - $2000.");
}
else if (value >= 100)
{ insurancecost = value * 0.05;
}
else if (value > 2000)
{ JOptionPane.showMessageDialog(null, "Insurance can only be purchased for items valued between $100 - $2000.");
}
return insurancecost;
}
public class TextFieldHandler implements ActionListener
{
@Override
public void actionPerformed (ActionEvent e)
{
DecimalFormat df = new DecimalFormat("0.00");
String valueStr=insurancevaluetextField.getText();
value=Double.parseDouble(valueStr);
}
}
private class DoListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
DecimalFormat df = new DecimalFormat("0.00");
String arg = e.getActionCommand();
if (arg.equals("Calculate Insurance"))
{
System.out.println( "calculate insurance button selected");
add (insuranceDisplayArea);
insuranceDisplayArea.setText("The insurance charge for your package is: $"+df.format(getInsurancecost())+"\n");
}
您正在分配变量value
到TextFieldHandler
。 JTextField
的操作执行事件将在Enter
键事件时触发。 如果您在DoListener.actionPerformed()
的开头分配变量,则将解决该问题。 因此,您只需要将TextFieldHandler.actionPerformed()
的代码移动到DoListener.actionPerformed()
我看着你的代码。 您在textField中注册的TextFiled处理程序仅在您在文本字段上按Enter键时才调用。
TextFieldHandler handler = new TextFieldHandler();
textField.addActionListener(handler);
因此,仅当您在textField上按Enter键时,才会在textFieldHandler中调用actionPerformed,而此时只有您的insurancevaluetextField读取并设置为value。
您可以更改侦听器,以便文本字段键更改将捕获值,也可以将文本字段读取逻辑添加到计算按钮侦听器中。 即DoListener
private class DoListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
DecimalFormat df = new DecimalFormat("0.00");
String weightStr = textField.getText();
weight = Double.parseDouble(weightStr);
String valueStr = insurancevaluetextField.getText();
value = Double.parseDouble(valueStr);
.... }
我建议更改DoListener。
使用API时请阅读有关内容。 知道他们到底在做什么。 还可以使用良好的IDE调试程序。 您将很快发现错误。
仅当您键入内容并按Enter时,ActionListener事件才会在TextField上发生。
不会引发此处理程序,insurancevaluetextField.addActionListener(处理程序); 它的值将为0,这就是为什么如果您在键入后不按Enter键就显示错误消息的原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.