【问题标题】:Checking for empty JTextField before user input在用户输入之前检查空的 JTextField
【发布时间】:2015-04-04 10:10:24
【问题描述】:
private class CalculateButtonHandler implements ActionListener{

    public CalculateButtonHandler(JTextField initialAmmount, JTextField yearsToMaturity, JTextField interestRate){
        double endingBalance;
        String text = interestRate.getText();
        int interestRateInt = Integer.parseInt(text);

        String text1 = yearsToMaturity.getText();
        int yearsToMaturityInt = Integer.parseInt(text);

        String text2 = initialAmount.getText();
        int initialAmountInt = Integer.parseInt(text);

        endingBalance = initialAmountInt * Math.pow((1 + interestRateInt/1), 1 *           yearsToMaturityInt);
    }

    public void actionPerformed(ActionEvent e){
    }
}

当前运行时错误: 线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“”

我假设发生运行时错误是因为程序运行时没有输入,并且用户没有机会输入要解析为 int 的字符串。我不知道如何检查这个。

【问题讨论】:

  • 一个简单的解决方案可能是,假设如果它发生在按钮单击时,禁用按钮直到输入所有有效输入。
  • 考虑使用JSpinnerSpinnerNumberModel 而不是JTextField
  • 顺便说一句,您的代码中有一个错字 - 您使用了三次 Integer.parseInt(text),即使变量名为 text、text1 和 text2。

标签: java swing jpanel jtextfield


【解决方案1】:

处理on-button-clicked事件的代码需要在actionPerformed方法中,而不是在构造函数中。

private class CalculateButtonHandler implements ActionListener{

    private final JTextField interestRate;
    private final JTextField yearsToMaturity;
    private final JTextField interestRate;

    public CalculateButtonHandler(JTextField initialAmmount, JTextField     yearsToMaturity, JTextField interestRate) {
        this.initialAmmount = initialAmmount;
        this.yearsToMaturity = yearsToMaturity;
        this.interestRate = interestRate;
    }

    public void actionPerformed(ActionEvent e){
       double endingBalance;
       String text = interestRate.getText();
       int interestRateInt = Integer.parseInt(text);

       String text1 = yearsToMaturity.getText();
       int yearsToMaturityInt = Integer.parseInt(text);

       String text2 = initialAmount.getText();
       int initialAmountInt = Integer.parseInt(text);

       endingBalance = initialAmountInt * Math.pow((1 + interestRateInt/1), 1 *           yearsToMaturityInt);
   }
}

【讨论】:

  • 在我将代码移动到 actionPerformed 方法后,它编译得很好并且初始运行时错误已修复,但现在我卡在“AWT-EventQueue-0” java.lang.NumberFormatException: For input字符串:“CD 利率:”
  • 当您单击按钮时会发生这种情况,对吗?您是否在没有将参数填写到文本字段中的情况下单击它?正如@Shrikant Havale 指出的那样,如果您想阻止用户这样做,那么在填写所有值之前禁用按钮怎么样?或者也许使用默认值?取决于您的实际用例。
  • 那个错误发生了~before~界面甚至出现在屏幕上。
  • 您确定要将此动作侦听器注册到按钮,例如 button.addActionListener(new CalculateButtonHandler()),而不是其他组件?是的,您得到的错误很可能与您向我们展示的这个处理程序无关,因为 actionPerformed 中的代码应该只在您单击按钮时执行。也许如果您的应用程序很小,请包含整个代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2014-07-30
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多