質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.57%

1秒ごとにThreadを使って、3つのimageviewの画像を切り替えていきたい( java)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,409
退会済みユーザー

退会済みユーザー

3つのimageviewを並べて、1秒間隔で4つの画像を順番にずらして表示したいと思っています。
つまり、3つのimageviewに入っている画像を、入れ替えようと思っています。

3つのimageviewに入っているimageをどのように入れ替えればいいでしょうか?

Thread内では、画像を変えるための picNo0, picNo1, picNo2 を替えています。

Threadのsleepで1秒間隔は実現できると考えています。

よろしくお願い致します。

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.paint.*;
import javafx.scene.image.*;
import javafx.scene.effect.*;
import javafx.stage.*;
import javafx.geometry.*;
import javafx.collections.*;

public class Assignment5_3 extends Application
{
    public static int picNo0 = 0;
    public static int picNo1 = 1;
    public static int picNo2 = 2;

    public void start(Stage stage) throws Exception
    {
        Image[] images = new Image[4];
        images[0] = new Image("Food.jpg");
        images[1] = new Image("Cafe.jpg");
        images[2] = new Image("Beach.jpg");
        images[3] = new Image("Sunset.jpg");

        ImageView[] ivs = new ImageView[3];
        ivs[0] = new ImageView(images[picNo0]);
        ivs[1] = new ImageView(images[picNo1]);
        ivs[2] = new ImageView(images[picNo2]);

        ivs[0].setImage();
        ivs[1].setImage();
        ivs[2].setImage();

        // エフェクトを生成し、画像に適用します
        PerspectiveTransform pt0 = new PerspectiveTransform();
        pt0.setUlx(160.0);
        pt0.setUly(60.0);
        pt0.setUrx(320.0);
        pt0.setUry(0.0);
        pt0.setLrx(320.0);
        pt0.setLry(240.0);
        pt0.setLlx(160.0);
        pt0.setLly(180.0);
        ivs[0].setEffect(pt0);

        PerspectiveTransform pt1 = new PerspectiveTransform();
        pt1.setUlx(0.0);
        pt1.setUly(0.0);
        pt1.setUrx(160.0);
        pt1.setUry(60.0);
        pt1.setLrx(160.0);
        pt1.setLry(180.0);
        pt1.setLlx(0.0);
        pt1.setLly(240.0);
        ivs[2].setEffect(pt1);

        // レイアウト HBox を生成/設定します
        HBox hb = new HBox();
        ObservableList<Node> lst = hb.getChildren();
        lst.addAll(ivs);

        // シーンを生成/設定します
        Scene scene = new Scene(hb);

        // ステージを設定します
        stage.setScene(scene);
        stage.setTitle("画像");

        // ステージを表示します
        stage.show();

        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }

    public class MyRunnable implements Runnable
    {
    @Override
    public void run()
        {
            while(true)
            {
                picNo0++;
                picNo1++;
                picNo2++;

                if (picNo0 > 3)
                {
                    picNo0 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else if (picNo1 > 3)
                {
                    picNo1 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else if (picNo2 > 3)
                {
                    picNo2 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else
                {
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }
            }
    }
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

以下のコードで実現できました。

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.paint.*;
import javafx.scene.image.*;
import javafx.scene.effect.*;
import javafx.stage.*;
import javafx.geometry.*;
import javafx.collections.*;

public class Assignment5_3 extends Application
{
    public static int picNo0 = 0;
    public static int picNo1 = 1;
    public static int picNo2 = 2;

    public ImageView[] ivs;
    public Image[] images;

    public void start(Stage stage) throws Exception
    {
        images = new Image[4];
        images[0] = new Image("Food.jpg");
        images[1] = new Image("Cafe.jpg");
        images[2] = new Image("Beach.jpg");
        images[3] = new Image("Sunset.jpg");

        ivs = new ImageView[3];
        ivs[0] = new ImageView();
        ivs[1] = new ImageView();
        ivs[2] = new ImageView();

        // エフェクトを生成し、画像に適用します
        PerspectiveTransform pt0 = new PerspectiveTransform();
        pt0.setUlx(160.0);
        pt0.setUly(60.0);
        pt0.setUrx(320.0);
        pt0.setUry(0.0);
        pt0.setLrx(320.0);
        pt0.setLry(240.0);
        pt0.setLlx(160.0);
        pt0.setLly(180.0);
        ivs[0].setEffect(pt0);

        PerspectiveTransform pt1 = new PerspectiveTransform();
        pt1.setUlx(0.0);
        pt1.setUly(0.0);
        pt1.setUrx(160.0);
        pt1.setUry(60.0);
        pt1.setLrx(160.0);
        pt1.setLry(180.0);
        pt1.setLlx(0.0);
        pt1.setLly(240.0);
        ivs[2].setEffect(pt1);

        // レイアウト HBox を生成/設定します
        HBox hb = new HBox();
        ObservableList<Node> lst = hb.getChildren();
        lst.addAll(ivs);

        // シーンを生成/設定します
        Scene scene = new Scene(hb);

        // ステージを設定します
        stage.setScene(scene);
        stage.setTitle("画像");

        // ステージを表示します
        stage.show();

        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }

    public class MyRunnable implements Runnable
    {
    @Override
    public void run()
        {
            while(true)
            {
                ivs[0].setImage(images[picNo0]);
                ivs[1].setImage(images[picNo1]);
                ivs[2].setImage(images[picNo2]);

                picNo0++;
                picNo1++;
                picNo2++;

                if (picNo0 > 3)
                {
                    picNo0 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else if (picNo1 > 3)
                {
                    picNo1 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else if (picNo2 > 3)
                {
                    picNo2 = 0;
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }else
                {
                    // 1000ミリ秒待機する
                    try{
                    Thread.sleep(1000);
                    }catch(InterruptedException e)
                    {
                    System.out.println(e);
                    }
                }
            }
    }
    }

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.57%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る