如果 jTextField 为空,如何为它设置默认值

How to make default value for a jTextField if it is empty

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

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

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

您还有两种不同的字段类型

  1. 兴趣:小数类型(如float
  2. 年份:整数类型(如int

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

// 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;
            }
        }
}

这些函数是不言自明的,但目的是为了让 "default" 值 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;
                }
            }
    }
}