【问题标题】:How show or hide images in condition with javafx如何使用 javafx 在条件下显示或隐藏图像
【发布时间】:2021-11-06 00:17:34
【问题描述】:

我需要帮助来使用 JavaFX 编写基于 Windows 的应用程序。 我只是想显示或隐藏一些带有 if/else 条件的图像。 我真正想要的是这样的: 如果 x=1 则显示 image1 如果 x=2 他们显示 image2

我尝试了 setvisible() 和 setDisable() 方法来做到这一点,但它不起作用。

public class BoardSelection implements Initializable {
    @FXML
    public ImageView image1= new ImageView();
    @FXML
    public ImageView image2 = new ImageView();

    public int batteryVariation(int x){

        if(x=1){
            image1.setVisible(true);
            image2.setVisible(false);
        }
        if(x=2){
            image2.setVisible(false);
            image2.setVisible(true);
        }
        return x;
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }

我的 .fxml 文件代码是:

<ImageView fx:id="image1" fitHeight="60.0" fitWidth="30.0" layoutX="118.0" layoutY="227.0">
      <image>
        <Image url="@../img/image1.png" />
      </image>
    </ImageView>
    <ImageView fx:id="image2" fitHeight="60.0" fitWidth="30.0" layoutX="191.0" layoutY="227.0" pickOnBounds="true" preserveRatio="true">
      <image>
        <Image url="@../img/image2.png" />
      </image>
    </ImageView>

【问题讨论】:

  • 1.请发帖minimal reproducible example。 2. 在尝试隐藏图像之前,您需要将其显示出来。我怀疑是不是。 image1 由 FXML 构造,但随后被 image1= new ImageView(); 覆盖。这同样适用于image2
  • 使用您运行的实际代码发布minimal reproducible example。这甚至不编译。 (例如if (x=1))。
  • ",但它不起作用。"有什么不好的?图片不显示吗?程序不能编译吗?你怎么打电话给batteryVariation
  • 永远不要@FXML 变量设置为新值,这些值由加载程序注入,您的应用程序代码永远不应更改或重新初始化。跨度>
  • 一旦你开始工作,你可能会遇到:setVisible hides the element but doesn't rearrange adjacent nodes

标签: java javafx fxml


【解决方案1】:

在 if 语句中,您使用了赋值运算符 (=) 而不是比较运算符 ==。

public int batteryVariation(int x) {
    if (x == 1) {
        image1.setVisible(true);
        image2.setVisible(false);
    }
    if (x == 2) {
        image1.setVisible(false);
        image2.setVisible(true);
    }
    return x;
}

工作代码示例:

public class PicturesTestController implements Initializable {

    @FXML
    private TextField tf_testInput;

    @FXML
    private ImageView image1;

    @FXML
    private ImageView image2;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        image2.setVisible(false);
        tf_testInput.setOnAction(actionEvent -> batteryVariation(Integer.parseInt(tf_testInput.getText())));
    }

    public int batteryVariation(int x) {
        if (x == 1) {
            image1.setVisible(true);
            image2.setVisible(false);
        }
        if (x == 2) {
            image1.setVisible(false);
            image2.setVisible(true);
        }
        return x;
    }
}

无论如何,最好使用setImage() 方法来设置/更改ImageView 中的图片。

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/ImageView.html

【讨论】:

  • 完成此操作后,您可以编译和运行程序了吗?
  • 是的,我用一个工作代码示例编辑了我的答案
  • 请遵守 java 命名约定
猜你喜欢
  • 2015-06-10
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多