Java Swing实现空输入框默认读取为0的技术咨询
问题根源
你当前代码报错的核心原因是:只要任意一个输入框为空,Double.parseDouble() 接收空字符串时会直接抛出NumberFormatException,直接进入catch分支触发错误提示。不需要用ArrayList实现需求,单独封装一个输入解析的工具方法即可实现空输入默认返回0的逻辑。
解决步骤
1. 先封装输入解析方法
在你的当前类里新增一个私有方法,专门处理输入框文本转数字的逻辑,空输入会直接返回0,只有输入非空且格式非法时才抛出异常:
private double parseInput(String inputText) throws NumberFormatException { // 先去除前后空格,再判断是否为空 if (inputText == null || inputText.trim().isEmpty()) { return 0.0; } return Double.parseDouble(inputText.trim()); }
2. 修改按钮的事件监听逻辑
替换原有直接调用Double.parseDouble()的逻辑,改为调用上面封装的方法即可。另外你原来DEBIT按钮里num1、num2初始值设为6是无效代码,直接统一设为0即可:
JButton creditButton = new JButton("CREDIT"); creditButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double num1=0, num2=0, balance=0; try { num1 = parseInput(creditInput.getText()); num2 = parseInput(debitInput.getText()); balance = num1 - num2; totalBalance.setText("$" + Double.toString(balance)); }catch(NumberFormatException e2) { JOptionPane.showMessageDialog(null, "Please Enter A Valid Number"); } } }); JButton debitButton = new JButton("DEBIT"); debitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double num1=0, num2=0, balance=0; try { num1 = parseInput(creditInput.getText()); num2 = parseInput(debitInput.getText()); balance = num1 - num2; totalBalance.setText("$" + Double.toString(balance)); }catch(NumberFormatException e2) { JOptionPane.showMessageDialog(null, "Please Enter A Valid Number"); } } }); // CLEAR按钮逻辑不需要修改 JButton clearButton = new JButton("CLEAR"); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { creditInput.setText(""); debitInput.setText(""); } });
效果说明
修改后只要输入框内容为空、或者是合法数字就不会触发报错,空输入会自动按0计算;只有当输入内容为非法格式(比如字母、特殊符号)时才会弹出错误提示,符合需求。
内容的提问来源于stack exchange,提问作者FingerLessB
相关产品推荐
相关产品推荐

