Java 如何获取要读取和计算的第二个文本字段值

Java 如何获取要读取和计算的第二个文本字段值,java,string,jtextfield,Java,String,Jtextfield,我已经被困了好几天,试图找出为什么无法从inurancevaluetextfield中获取值。我已经附上了这两个文件,以便如果有人想运行它,他们可以看到我的问题。我进入了选择保险复选框并输入100到2000之间的值的阶段,但我不断收到错误消息,说明我的值不在这些金额之间。所以我认为文本字段根本没有被读取 public void setInsurancecost(double insurancecost) { this.insurancecost = insurancecost;

我已经被困了好几天,试图找出为什么无法从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");
                      }                         
公共作废设置保险成本(双重保险成本)
{
此项。保险成本=保险成本;
}
公共双重保险成本()
{
如果(值<100)
{JOptionPane.showMessageDialog(null,“只能为价值在100美元到2000美元之间的项目购买保险”);
}
否则如果(值>=100)
{保险成本=价值*0.05;
}
否则,如果(值>2000)
{JOptionPane.showMessageDialog(null,“只能为价值在100美元到2000美元之间的项目购买保险”);
}
退货保险费;
} 
公共类TextFieldHandler实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件e)
{
DecimalFormat df=新的DecimalFormat(“0.00”);
字符串valueStr=insurancevaluetextField.getText();
value=Double.parseDouble(valueStr);
}
}
私有类DoListener实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件e)
{
DecimalFormat df=新的DecimalFormat(“0.00”);
字符串arg=e.getActionCommand();
如果(参数等于(“计算保险”))
{
System.out.println(“选择计算保险按钮”);
添加(保险显示区);
insuranceDisplayArea.setText(“您的包的保险费为:$”+df.format(getInsurancecost())+“\n”);
}                         

您正在
TextFieldHandler
处分配变量
JTextField
的操作执行事件将在
Enter
键事件处触发。如果您在
DoListener.actionPerformed()的开头分配变量,则会解决此问题
。因此,您只需将
TextFieldHandler.actionPerformed()
中的代码移动到
DoListener.actionPerformed()
我查看了您的代码。您向textField注册的textField处理程序仅在按下文本字段上的enter键时才会调用

    TextFieldHandler handler = new TextFieldHandler();
    textField.addActionListener(handler);
因此,只有当您在textField上按enter键时,才会调用在TextFieldHandler中执行的操作,此时只有您的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);
   .... }
我建议换一个女服务员

当您使用API时,请阅读它。确切地了解它们的功能。
还可以使用良好的IDE调试程序。您将很快发现错误。

只有在键入内容并按enter键时,才会在TextField上发生ActionListener事件

不会引发此处理程序,请确保ValueTextField.addActionListener(处理程序);
它的值将是0,这就是为什么在键入后不按enter键时会显示错误消息的原因。谢谢!我发现,如果我按如下所示粘贴字符串,那么它就工作得很好。if(arg.equals(“Calculate Insurance”){String valueStr=insurancevaluetextField.getText();value=Double.parseDouble(valueStr);谢谢你@Diluu,你是对的,我已经解决了这个问题:)