【问题标题】:Check for empty JFormattedTextField检查空的 JFormattedTextField
【发布时间】:2025-12-08 02:00:01
【问题描述】:

我是新来的,我想要一些关于我正在做的小型 Java 项目的帮助。这是我需要帮助的代码 sn-p:

private void CalculateButtonActionPerformed(java.awt.event.ActionEvent evt)                                                
{                                                    
    // TODO add your handling code here:
    float Principal, Rate, Time, Result, Temp;

    Principal = Float.valueOf(PrincipalTextField.getText());
    Rate = Float.valueOf(RateTextField.getText());
    Time = Float.valueOf(TimeTextField.getText());

    Temp = (float) Math.pow((1 + Rate / 100), Time);
    Result = Principal * Temp;
    ResultTextField.setText(String.valueOf(Result));
}

我想检查用户是否未填写 PrincipalTextField、OR RateTextField 或 TimeTextField,如果是,则显示一个对话框,要求他/她重新检查它们。文本字段是 JFormattedTextField 变量。我意识到我可以使用 if/else 或 while 循环来做到这一点,但我不确定如何着手这样做。请帮忙!

【问题讨论】:

    标签: java swing string jformattedtextfield


    【解决方案1】:

    你可以这样做:

    • getText() 返回一个字符串值。因此,您始终可以调用length() 并检查长度是否为0。 (*我建议在调用 length() 删除任何空格之前先在字符串上调用 trim()

    • 接下来,如果任何长度为零,您要做的是显示一个对话框。您可以致电JOptionPane.showMessageDialog() 来完成此操作。你可以阅读更多关于“如何制作对话框”over here.

    所以,你会做这样的事情:

    String principalText = PrincipalTextField.getText();
    String rateText = RateTextField.getText();
    String timeText = TimeTextField.getText();
    
    if(principalText.trim().length == 0 || rateText.trim().length == 0 || timeText.trim().length == 0){
        JOptionPane.showMessageDialog(null, "YOUR_ERROR_MSG", "ERROR_TITLE", JOptionPane.ERROR_MESSAGE);
    }
    

    这可能是题外话,但我建议查看Java Naming Convention。变量的约定是使用以小写字母

    开头的混合大小写字母组成变量名

    【讨论】:

    • 啊,谢谢。我已经尝试过 trim() 和 length() 方法,但似乎我没有正确使用它们。关于命名约定的事情是新的......不是只有以小写字母开头然后是大写字母的方法,如“showMessageDialog”?我也在学习 Objective-C,其中变量以我所做的方式大写。也许我只是感到困惑。不过非常感谢。
    • @user1654223:不,变量也遵循相同的模式。但很高兴提供帮助:)
    【解决方案2】:
    1. 你错过了JFormattedTextField的原因

    2. 必须将Number Formatter 设置为JFormattedTextField,然后

      • 你不需要解析Float value(最好使用double)

      • 默认情况下空可以是 0(零)值

      • 取值形式为((Number)PrincipalTextField.getValue()).floatValue();

    3. 查看教程的代码示例,

    【讨论】:

      【解决方案3】:

      还可以考虑子类化InputVerifier,如Validating Input 中所述。有一个相关的例子here

      【讨论】: