Cómo mostrar una imagen tras otra a intervalos regulares utilizando JavaFX

code_runner:

Estoy aprendiendo JavaFX. Quiero mostrar algunos iconos, uno por uno después de unos segundos. Mi código no está funcionando. He escrito algo de código. y los iconos se almacenan en una carpeta separada llamada imágenes .

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

No pude encontrar respuestas adecuadas en la web. Quiero saber la lógica de cómo se hace, qué más necesito saber. Debido a que una sola imagen que puedo mostrar fácilmente. Pero no sé cómo mostrar varias imágenes de una en una.

Tanzeel:

Muy bien, he intentado algo para ti. No sé qué es exactamente lo que está buscando, pero este código le dará una idea al menos. He hecho algunas suposiciones. Tienes una carpeta bajo el mismo directorio con el nombre de imágenes que tiene todos los iconos (indicación) como 1.png, 2.png, 3.png, y así sucesivamente. Estoy usando Netbeans 8.2, que importará automáticamente las clases necesarias por parte de los respectivos paquetes.

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

Espero que esto funcionará Puede personalizar el código de acuerdo a sus necesidades.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=282105&siteId=1
Recomendado
Clasificación