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

时间:2016-11-12 09:54:02

标签: java netbeans null jtextfield

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

1 个答案:

答案 0 :(得分:0)

至少有两种情况需要关注。

  1. 未输入任何内容
  2. 输入了非号码
  3. 您还有两种不同的字段类型

    1. 兴趣:十进制类型(例如float
    2. 年份:整数类型(例如int
    3. 我编写了一些辅助函数来帮助解析“空白”值。这些辅助函数是解决方案,但下面提供了一个可运行的示例。

      // 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的“默认”值以及错误值,以便您想要捕获此问题并警告用户。 / p>

      要使用这些功能,您只需使用所有三个参数调用它们:

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