我已经被困了好几天试图找出为什么我无法从 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");
}
答案 0 :(得分:1)
您正在value
分配变量TextFieldHandler
。 JTextField
执行的操作事件将在Enter
键事件中触发。如果您在DoListener.actionPerformed()
的开头分配变量,它将被解决。因此,您只需将TextFieldHandler.actionPerformed()
中的代码移至DoListener.actionPerformed()
答案 1 :(得分:0)
我看了你的代码。只有在文本字段上按Enter键时才会调用已在textField中注册的TextFiled处理程序。
TextFieldHandler handler = new TextFieldHandler();
textField.addActionListener(handler);
因此,只有在textField上按Enter键才会调用TextFieldHandler中的actionPerformed,并且只有你的insurancevaluetextField读取并设置为value。
您可以更改侦听器,以便文本字段键更改将捕获值,或者只是将textfiled读取逻辑添加到计算按钮侦听器中。即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调试程序。您将很快发现错误。
答案 2 :(得分:0)
仅当您键入内容并按Enter键时,才会在TextField上发生ActionListener事件。
这个处理程序不会被引发,insurancevaluetextField.addActionListener(handler); 它的值将为0,这就是为什么在输入
后没有按Enter键时显示错误信息的原因