如何使默认值为jTextField,如果它是空的



如何在Netbeans中创建一个简单的利息计算器,其中如果利率文本字段为空,利率自动设置为8.5和类似的时间为1年?

至少有两种情况需要考虑。

  1. 未输入任何内容
  2. 输入非数字

你也有两个不同的字段类型

  1. : 十进制类型(例如float)
  2. : 整数类型(例如int)

我已经编写了一些辅助函数来帮助解析"空白"值。这些辅助函数是解决方案,但下面提供了一个可运行的示例。

// Parses a JTextField for a float
public static float parseFloat(JTextField f, float defaultVal, float failureVal) {
    if (f == null || f.getText().trim().isEmpty()) {
        return defaultVal;
    } else {
        try {
            return Float.parseFloat(f.getText());
        } catch (NumberFormatException e) {
            return failureVal;
        }
    }
}
// Parses a JTextField for an integer
public static int parseInt(JTextField f, int defaultVal, int failureVal) {
        if (f == null || f.getText().trim().isEmpty()) {
            return defaultVal;
        } else {
            try {
                return Integer.parseInt(f.getText());
            } catch (NumberFormatException e) {
                return failureVal;
            }
        }
}

这些函数是非常自解释的,但目的是允许一个"默认"值8.5,以及一个错误值,以防你想抓住这个问题并警告用户。

要使用这些函数,只需带三个参数调用它们:
System.out.println(parseFloat(rateField, 8.5f, 8.5f));
System.out.println(parseFloat(yearField, 1, 1));

年份输入处理与利息输入处理相同,只是Java使用显式数字类型,所以它是复制粘贴,将float更改为int

下面是完整的工作示例:
import javax.swing.*;
import java.awt.*;
public class Main {
    public static void main(String ... args) {
        JLabel rateLabel = new JLabel("Rate:");
        JTextField rateField = new JTextField(10);
        JLabel yearLabel = new JLabel("Year:");
        JTextField yearField = new JTextField(10);
        // Use modal to wait for user input for proof of concept
        JDialog dialog = new JDialog();
        dialog.setModal(true);
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setLayout(new FlowLayout());
        dialog.getContentPane().add(rateLabel);
        dialog.getContentPane().add(rateField);
        dialog.getContentPane().add(yearLabel);
        dialog.getContentPane().add(yearField);
        dialog.pack();
        dialog.setVisible(true);
        float rateValue = parseFloat(rateField, 8.5f, 8.5f);
        int yearValue = parseInt(yearField, 1, 1);
        JOptionPane.showMessageDialog(null, rateLabel.getText() + rateValue);
        JOptionPane.showMessageDialog(null, yearLabel.getText() + yearValue);
    }
    // Parses a JTextField for a float
    public static float parseFloat(JTextField f, float defaultVal, float failureVal) {
        if (f == null || f.getText().trim().isEmpty()) {
            return defaultVal;
        } else {
            try {
                return Float.parseFloat(f.getText());
            } catch (NumberFormatException e) {
                return failureVal;
            }
        }
    }
    // Parses a JTextField for an integer
    public static int parseInt(JTextField f, int defaultVal, int failureVal) {
            if (f == null || f.getText().trim().isEmpty()) {
                return defaultVal;
            } else {
                try {
                    return Integer.parseInt(f.getText());
                } catch (NumberFormatException e) {
                    return failureVal;
                }
            }
    }
}

相关内容

  • 没有找到相关文章

最新更新