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

时间:2014-03-24 05:29:09

标签: java string jtextfield

我已经被困了好几天试图找出为什么我无法从 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");
                      }                         

3 个答案:

答案 0 :(得分:1)

您正在value分配变量TextFieldHandlerJTextField执行的操作事件将在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键时显示错误信息的原因