如何在Netbeans中创建一个简单的利息计算器,其中如果利率文本字段为空,利率自动设置为8.5和类似的时间为1年?
至少有两种情况需要考虑。
- 未输入任何内容
- 输入非数字
你也有两个不同的字段类型
-
: 十进制类型(例如
float
) -
: 整数类型(例如
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;
}
}
}
}