java - 如何使用 JavaFX 定期显示一幅图像

标签 java javafx

我正在学习 JavaFX。我想在几秒钟后一一显示一些图标。我的代码不起作用。我写了一些代码。图标存储在名为images的单独文件夹中。

public class Main extends Application {
  ImageView imv;   
  Scene scene;

  @Override
  public void start(Stage primarystage) {
      gp=new GridPane();
      gp.setPadding(new Insets(0, 10, 10, 10));
      ...
      gp.setVgap(0);
      gp.setHgap(5);

      imv=new ImageView();

      // logic for displaying images

      scene=new Scene(gp, 450, 300, Color.TRANSPARENT);

      primarystage.setScene(scene);
      primarystage.setTitle("WINDOW");
      primarystage.show();
  }
  public static void main(String[] args) {
        launch(args);
  }
}

我在网上找不到正确的答案。我想知道它是如何完成的逻辑,我还需要知道什么。因为我可以轻松地显示单个图像。但我不知道如何一张一张地显示多个图像。

最佳答案

好吧,我已经为你尝试过了。我不知道你到底在寻找什么,但这段代码至少会给你一些想法。我做了一些假设。您在同一目录下有一个名为 images 的文件夹,其中包含(要显示的)所有图标,如 1.png、2.png、3.png 等。我使用的是 Netbeans 8.2,它将自动从相应的包中导入必要的类。

import javafx.application.Application;
import javafx.concurrent.Task;
...
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
...

public class Main extends Application {

  ImageView imv;
  Label label;
  String file="";

  GridPane gridPane;
  Scene scene;
  Task<Void> slideShow;

  @Override
  public void start(Stage primarystage) {
    gridPane=new GridPane();
    gridPane.setPadding(new Insets(0, 10, 10, 10));

    // business logic for slide show 
    startSlideShow();

    imv=new ImageView();

    label = new Label();
    label.setGraphic(imv);   

    gridPane.add(label, 5, 0, 1, 1);      

    scene=new Scene(gridPane, 450, 300, Color.TRANSPARENT);

    primarystage.setScene(scene);
    primarystage.show();

    // spawning a new thread for this task
    new Thread(slideShow).start();
  }

  public void startSlideShow() {
    slideShow= new Task<Void>() {
      @Override
      protected Void call() {
        int i = 1;
        while (true) {
          try {
            Thread.sleep(1000);
            updateMessage(i + ".png");
          } catch (Exception e) {
          }
          i++;
        }
      }
     };
     task1.messageProperty().addListener((observable, oldValue, newValue) -> {
       Image image = new Image(getClass().getResourceAsStream("images/" + newValue));
       imv.setImage(image);
      });
    }

    public static void main(String[] args) {
      launch(args);
    }
}

希望这能起作用,您可以根据您的要求自定义代码。

关于java - 如何使用 JavaFX 定期显示一幅图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60681024/

相关文章:

java - 将现有的 Eclipse 项目转换为 Maven 项目

java - org.hibernate.StaleStateException : Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

java - mongodb scala 驱动程序 casbah 是否自动管理连接池

java - 如何以编程方式更改背景形状的颜色

java - 使用 Saxon-HE 在 JavaFX 中对 xml 文件进行 XSLT 转换

java - 如何在 JavaFX 中使用字符串从组合框中选择数据并将对象作为值?

java - 替换 Zip 文件而不用 Java 解压缩

java - 如何在 JavaFX 中继续循环之前等待媒体结束?

JavaFX Web View : how to block resources from a specific website?

java - 在 JavaFX 中的图像上使用 ColorPicker