You need to enable JavaScript to run this app. Java Swing年龄计算器:实现当前年减出生年并通过OutputText输出
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing年龄计算器:实现当前年减出生年并通过OutputText输出

问题排查与修复方案

根因

你当前的减法逻辑无法正常运行,是因为引用了错误的界面组件获取当前年份值:

  • 代码中的CurrentYear是仅做提示作用的JLabel,它的文本是固定字符串"Current Year: ",本身不存储年份数值
  • 真正存储了格式化后的当前年份的组件是DateText文本框,它的初始值是系统计算出的4位年份字符串

你之前写的计算代码:

int val = Integer.parseInt(CurrentYear.getText()) - Integer.parseInt(StrYearText);

这里调用CurrentYear.getText()拿到的是纯提示文字,无法转换为整数,会直接触发NumberFormatException导致计算中断。

修正方式

把获取当前年份的来源替换为正确的DateText组件,同时增加基础的输入校验避免程序崩溃:

@Override
public void actionPerformed(ActionEvent e) {
    try {
        String birthYearInput = YearText.getText().trim();
        // 从正确的DateText控件获取当前年份
        String currentYearInput = DateText.getText().trim();
        
        int birthYear = Integer.parseInt(birthYearInput);
        int currentYear = Integer.parseInt(currentYearInput);
        
        int ageResult = currentYear - birthYear;
        // 增加边界判断,避免输入未来的年份得到负年龄
        if(ageResult < 0) {
            JOptionPane.showMessageDialog(appFrame, "输入的出生年份不能晚于当前年份");
            return;
        }
        OutputText.setText(String.valueOf(ageResult));
    } catch (NumberFormatException ex) {
        // 捕获非数字输入的异常,给用户友好提示
        JOptionPane.showMessageDialog(appFrame, "请在年份输入框填写合法的数字内容");
    }
}

入门优化提示

  • 不需要特意从界面控件读取当前年份值:你初始化时已经通过dateFormat.format(date)拿到了当前年份的字符串,可以把这个值存在独立的代码变量中,后续计算直接引用,减少不必要的界面组件耦合
  • 目前的年龄计算为粗略的年份差逻辑,后续可以结合用户输入的月、日参数,实现精准年龄计算(例如当前为2024年3月、用户2000年5月出生时,实际年龄为23而非24)

内容的提问来源于stack exchange,提问作者Jackk Tys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 12:57:04