繁体   English   中英

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

[英]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");
                      }                         

您正在分配变量valueTextFieldHandler 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM