当前位置: 首页 > 知识库问答 >
问题:

如何使用JavaFX[duplicate]定期显示一幅又一幅图像

曹高阳
2023-03-14

我正在学习JavaFX。我想在几秒钟后一个接一个地显示一些图标。我的代码不起作用。我写了一些代码。和图标存储在一个单独的文件夹称为图像。

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);
  }
}

我在网上找不到合适的答案。我想知道它是如何完成的逻辑,我还需要知道什么。因为单个图像I可以容易地显示。但是我不知道如何一个接一个地显示多个图像。

共有1个答案

殷承恩
2023-03-14

好吧,我帮你做了点什么。我不知道你到底在寻找什么,但这段代码至少会给你一些想法。我做了一些假设。在同一个目录下有一个名为images的文件夹,其中所有图标(要显示)都是1。巴布亚新几内亚,2。巴布亚新几内亚,3。巴布亚新几内亚等等。我使用的是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);
    }
}

希望这将工作,你可以自定义代码根据你的要求。

 类似资料:
  • SuperMap iServer 发布的地图 在准备章节,已经新建了一个 HTML 页面,在页面中继续添加如下代码以创建一幅地图: <script type="text/javascript" src="http://iclient.supermap.io/dist/openlayers/iclient9-openlayers.js"></script> 在页面中加入 SuperMap iSer

  • 我正在使用GridLayoutManager的回收器视图。我还使用以下代码使第一个项目变大 除了一个以外,其他一切都正常:位置1处的物品(即大图中的下一个物品)被垂直拉长,以匹配大件物品的高度。从第3行开始,所有图像如图所示。 我怎么才能摆脱这个? 编辑:经过一些分析 所以问题似乎是,大图像是水平的两个跨度,但垂直的单个跨度,因为我已经强制我的ImageView是方形的,它看起来像是也取了两行,而

  • 用 subplot 命令可以在同一窗口中作多幅图或把它们打印到同一纸上。输入 subplot(m,n,p) 把figure窗口分成m*n个子区域及选择第p个区域为当前图。所作图是从figure窗口的顶行开始标号,然后第2行,依次类推。例如,以下语句在figure窗口的4个不同子区域分别作图。 t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subp

  • 我刚刚开始学习Jetpack Compose,它真的很好,UI是如此简化。我正在学习如何使用Jetpack组合实现所有XML视图,如(Lazycolumn)等。 我想知道如何在Jetpack Compose中显示AdMob横幅广告。我知道我们可以使用互操作性API使用经典的XML视图。 有没有一种组合方式来实现Admob?或者我只能使用 AndroidView 以编程方式创建横幅广告视图。

  • 我想生成两个柱状图进入2个不同的情节。为什么不是像http://www.java2s.com/code/java/chart/jfreeChartMultiplePieChartDemo1.htm这样的图,而是条形图,而不是饼形图。 我正在使用servletUtilities.saveChartaspng(),它将JFreeChart对象作为(第一个)参数,但我不知道如何创建我的JFreeChar

  • 我从实施了AdMobhttps://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start?hl=en_US其在测试期间运行良好。 我以为从Play商店下载时,此横幅添加将被实际广告替换,但这并没有发生! 如何让它发生? 我错过了什么吗? 我该怎么办?