如何使用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);
}
}

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

最新更新