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

JavaFX桌面应用中通过条件语句控制图片显示与隐藏的问题求助

解决JavaFX中通过条件控制ImageView显示隐藏的问题

我看了你的代码,发现几个关键问题导致setVisible()方法没生效,咱们一步步来修正:

1. 条件判断用了赋值运算符而非比较运算符

你代码里的if(x=1)是赋值操作(把1赋值给x),不是判断x是否等于1,正确的相等比较应该用==。

2. 第二个条件分支的逻辑错误

第二个if块里重复写了两次image2.setVisible(),完全搞错了目标控件,应该是隐藏image1、显示image2。

3. @FXML注入的ImageView不要手动实例化

用@FXML标注的控件是由FXMLLoader从FXML文件中加载并自动注入的,你手动new ImageView()会让代码里的image1、image2和界面上实际的控件不是同一个对象,调用setVisible()自然不会影响界面显示。


修正后的Java代码

public class BoardSelection implements Initializable {
    @FXML
    public ImageView image1; // 移除手动new的代码
    @FXML
    public ImageView image2; // 移除手动new的代码
    
    // 这里返回x没有实际意义,改成void更合理
    public void batteryVariation(int x){
        if(x == 1){ // 用==做相等比较
            image1.setVisible(true);
            image2.setVisible(false);
        } else if(x == 2){ // 用else if优化逻辑,避免重复判断
            image1.setVisible(false);
            image2.setVisible(true);
        }
        // 可选:添加else分支处理x不是1/2的情况,比如默认都隐藏
        // else {
        //     image1.setVisible(false);
        //     image2.setVisible(false);
        // }
    }
    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // 可以在这里初始化默认显示状态,比如默认都隐藏
        image1.setVisible(false);
        image2.setVisible(false);
    }
}

补充说明

你的FXML代码本身没有问题,但要确保FXML根节点的fx:controller属性正确指向这个BoardSelection类(替换成你实际的包名),比如:

<AnchorPane fx:controller="com.yourpackage.BoardSelection" ...>
    <!-- 你的ImageView代码 -->
</AnchorPane>

修正完成后,当你调用batteryVariation(1)时,image1会显示、image2隐藏;调用batteryVariation(2)则会切换显示状态。注意要在控件初始化完成后调用这个方法(比如在按钮点击事件中,或者initialize方法执行之后)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:19:08