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
相关产品推荐
相关产品推荐

