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

Java报错:String类无法解析setVisible方法(JavaFX场景)

解决JavaFX中discountCode.setVisible()报错的问题

你遇到的问题是:调用discountCode.setVisible(true);时提示无法在String类型上找到setVisible方法,但discountAmount.setVisible(true);能正常执行。

问题根源

你的applyDiscount方法参数名discountCode,和FXML注入的Text控件变量名完全重复。在方法内部,局部变量(方法参数)的优先级高于类成员变量,所以代码里的discountCode被识别为传入的String类型参数,而非你要操作的Text控件,自然调用不了控件的setVisible方法。

两种解决办法

方法1:修改方法参数名

把方法的参数名改成和控件变量不重复的名字,比如userDiscountCode,这样方法内就能正确引用到FXML注入的Text控件:

public void applyDiscount(String userDiscountCode){
    if("SALE10".equals(userDiscountCode)){
        BigDecimal preDiscount = new BigDecimal(subtotalSum.getText().substring(1));
        BigDecimal discountAmountValue = preDiscount.multiply(new BigDecimal("0.10"));
        BigDecimal newSubtotal = preDiscount.subtract(discountAmountValue);
        subtotalSum.setText("$" + newSubtotal.setScale(2, RoundingMode.HALF_UP));

        BigDecimal taxRate = new BigDecimal("0.12");
        BigDecimal newTotalPrice = newSubtotal.multiply(BigDecimal.ONE.add(taxRate));
        totalPrice.setText("$" + newTotalPrice.setScale(2, RoundingMode.HALF_UP));

        discountAmount.setText("-$" + discountAmountValue.setScale(2, RoundingMode.HALF_UP));

        discountCode.setVisible(true);
        discountAmount.setVisible(true);
    } else {
        discountCode.setVisible(false);
        discountAmount.setVisible(false);
        // 无效码保持隐藏
    }
}

方法2:使用this关键字明确引用类成员变量

如果不想修改参数名,就在调用控件方法时加上this.,明确指定要操作的是类成员变量(FXML注入的控件),而非方法参数:

public void applyDiscount(String discountCode){
    if("SALE10".equals(discountCode)){
        BigDecimal preDiscount = new BigDecimal(subtotalSum.getText().substring(1));
        BigDecimal discountAmountValue = preDiscount.multiply(new BigDecimal("0.10"));
        BigDecimal newSubtotal = preDiscount.subtract(discountAmountValue);
        subtotalSum.setText("$" + newSubtotal.setScale(2, RoundingMode.HALF_UP));

        BigDecimal taxRate = new BigDecimal("0.12");
        BigDecimal newTotalPrice = newSubtotal.multiply(BigDecimal.ONE.add(taxRate));
        totalPrice.setText("$" + newTotalPrice.setScale(2, RoundingMode.HALF_UP));

        discountAmount.setText("-$" + discountAmountValue.setScale(2, RoundingMode.HALF_UP));

        this.discountCode.setVisible(true); // 用this.指向控件变量
        discountAmount.setVisible(true);
    } else {
        this.discountCode.setVisible(false);
        discountAmount.setVisible(false);
        // 无效码保持隐藏
    }
}

额外注意

确保你的控制器类中已经正确注入了FXML控件,声明如下:

@FXML
private Text discountCode;
@FXML
private Text discountAmount;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:32:35