You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX JDBC Eclipse中如何将TextField设为整数/双精度类型

解决TextField处理整数/双精度数值并支持后续计算的问题

现有代码的核心错误

  • expeditionTime.(Time); 是语法错误,TextField的内容设置必须调用setText方法,且该方法仅接受字符串参数
  • expeditionAltitude.setText(Altitude); 直接传入int类型会编译报错,setText不支持数值类型参数
  • expeditionDistance = Distance; 如果expeditionDistance是TextField对象,这种直接赋值的写法完全错误

核心实现思路

TextField本质是字符串容器,必须将数值转为字符串才能显示,但我们需要单独维护对应的数值类型成员变量——这些变量用于后续计算和数据库存储,TextField仅作为输入/展示的视图载体。

具体实现代码

1. 定义类成员变量

先声明用于存储数值的变量(后续计算/存库用),以及TextField组件引用:

// 用于后续计算、数据库存储的数值变量
private double expeditionTimeValue;
private int expeditionAltitudeValue;
private int expeditionDistanceValue;

// TextField组件引用
private TextField expeditionDate;
private TextField expeditionTime;
private TextField expeditionAltitude;
private TextField expeditionDistance;
private TextField expeditionNotes;

2. 修正setTextField方法

将数值转为字符串显示到TextField,同时同步更新数值变量:

void setTextField(String date, double time, int altitude, int distance, String notes) {
    expeditionDate.setText(date);
    
    // 双精度数值转字符串显示,同步更新数值变量
    expeditionTime.setText(String.valueOf(time));
    expeditionTimeValue = time;
    
    // 整数转字符串显示,同步更新数值变量
    expeditionAltitude.setText(String.valueOf(altitude));
    expeditionAltitudeValue = altitude;
    
    expeditionDistance.setText(String.valueOf(distance));
    expeditionDistanceValue = distance;
    
    expeditionNotes.setText(notes);
}

3. 获取用户输入并转为数值类型(含验证)

当需要用输入值计算或存库时,将TextField的字符串内容转回数值类型,同时处理非法输入的异常:

// 处理双精度类型输入
try {
    expeditionTimeValue = Double.parseDouble(expeditionTime.getText().trim());
} catch (NumberFormatException e) {
    // 输入非法时的处理逻辑,比如提示用户、设置默认值
    System.out.println("请输入合法的时间数值");
    expeditionTimeValue = 0.0;
    expeditionTime.setText("");
}

// 处理整数类型输入(海拔)
try {
    expeditionAltitudeValue = Integer.parseInt(expeditionAltitude.getText().trim());
} catch (NumberFormatException e) {
    System.out.println("请输入合法的海拔数值");
    expeditionAltitudeValue = 0;
    expeditionAltitude.setText("");
}

// 处理整数类型输入(距离)
try {
    expeditionDistanceValue = Integer.parseInt(expeditionDistance.getText().trim());
} catch (NumberFormatException e) {
    System.out.println("请输入合法的距离数值");
    expeditionDistanceValue = 0;
    expeditionDistance.setText("");
}

4. 输入过滤优化(可选)

给TextField添加输入监听,只允许输入合法的数值字符,从源头避免非法输入:

// 双精度TextField:仅允许数字和一个小数点
expeditionTime.textProperty().addListener((observable, oldValue, newValue) -> {
    if (!newValue.matches("\\d*\\.?\\d*")) {
        expeditionTime.setText(oldValue);
    }
});

// 整数TextField:仅允许数字
expeditionAltitude.textProperty().addListener((observable, oldValue, newValue) -> {
    if (!newValue.matches("\\d*")) {
        expeditionAltitude.setText(oldValue);
    }
});

expeditionDistance.textProperty().addListener((observable, oldValue, newValue) -> {
    if (!newValue.matches("\\d*")) {
        expeditionDistance.setText(oldValue);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:42:55