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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1209閲覧

スライドショーの書き方

nakagen

総合スコア24

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2021/01/05 17:22

編集2021/01/06 09:26

前提・実現したいこと

現在、5秒ごとに画像が変わるギャラリーを作成しているのですが、秒数のDuration.seconds(5)でエラーが起きてしまいます

これを解決する方法はありますでしょうか?

宜しくお願い致します。

発生している問題・エラーメッセージ

Exception in thread "JavaFX Application Thread" java.lang.Error: Unresolved compilation problem: メソッド seconds(int) は型 Duration で未定義です

該当のソースコード

javafx

1 class gaEventHandler implements EventHandler<ActionEvent>{ 2 public void handle(ActionEvent e4) { 3 Image[] im = new Image[3]; 4 ImageView img; 5 stage5 = new Stage(); 6 BorderPane bp =new BorderPane(); 7 rb1 = new RadioButton("再生"); 8 tg = new ToggleGroup(); 9 rb1.setToggleGroup(tg); 10 rb1.setSelected(false); 11 rb1.setOnAction(new saiEventHandler()); 12 Scene sc = new Scene(bp, 400, 400); 13 bp.setBottom(rb1); 14 stage5.setScene(sc); 15 stage5.show(); 16 //写真を繋げて再生できるように配列と繰り返しの型が必要となる 17 //写真を複数保存できる仕組み 18 19 } 20 } 21 class saiEventHandler implements EventHandler<ActionEvent>{ 22 public void handle(ActionEvent e) { 23 String[] photos = { "top.jpeg,eins.jpeg,zwei.jpeg" }; 24 Pagination p = new Pagination(photos.length); 25 26 Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(5), event -> { 27 int pos = (p.getCurrentPageIndex()+1) % p.getPageCount(); 28 p.setCurrentPageIndex(pos); 29 })); 30 fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE); 31 fiveSecondsWonder.play(); 32 33 stage5.setScene(new Scene(p)); 34 stage5.show(); 35 36 } 37 }

試したこと

こちらを参考にしました
https://ja.ojit.com/so/java/2287085

補足情報(FW/ツールのバージョンなど)

jdk14

TN8001👍を押しています

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

回答の前にまず、teratailはマルチポストの推奨はしていません。
推奨しないだけで禁止ではないので、下記対応をお願いします(Qiitaのポリシーは知りません)

[Q&A] 5秒ごとに画像が変わるスライドショーを作りたいです - Qiita

他のサービスにも質問投稿をしたい(してしまった)
teratailでは、マルチポスト※の推奨はしていません。
やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。

また、teratail上で誤って同じ質問を複数投稿してしまった場合は、質問の削除リクエストを送ってください。

※「マルチポスト」とは、同じ内容の文章を複数のQ&Aサイトや掲示板などへ投稿することです。

ヘルプ|teratail(テラテイル)

参考サイトはリンクになるようにしましょう。その際は原典にあたるようにしましょう。

java - Auto Slideshow in JavaFX Pagination - Stack Overflow

あとこちらの質問も、結局やりたいことは同じですよね?
Eclipse - スライドショーを作りたい|teratail
Eclipse - 時間制のスライドショーを作成したい|teratail

回答のついていないこの2つは削除申請し、この質問のタイトルは「スライドショー」を入れたわかりやすい名前に変えてください。


さて回答ですがこんな感じでしょうか?

じわじわメモリ使用量が増えてリークしていそうな気がしますが、ImageImageViewをキャッシュしても変わりませんでした。。。
ちょっとよくわかりません^^;

Java

1import java.io.File; 2import java.util.ArrayList; 3import java.util.Arrays; 4import java.util.List; 5 6import javafx.animation.KeyFrame; 7import javafx.animation.Timeline; 8import javafx.application.Application; 9import javafx.event.ActionEvent; 10import javafx.event.EventHandler; 11import javafx.scene.Scene; 12import javafx.scene.control.Button; 13import javafx.scene.control.Pagination; 14import javafx.scene.image.Image; 15import javafx.scene.image.ImageView; 16import javafx.scene.layout.BorderPane; 17import javafx.scene.layout.VBox; 18import javafx.stage.Stage; 19import javafx.util.Duration; 20 21 22public class Main extends Application { 23 public static void main(String[] args) { launch(args); } 24 25 @Override public void start(Stage primaryStage) { 26 BorderPane root = new BorderPane(); 27 Button button = new Button("スライドショー"); 28 button.setOnAction(new saiEventHandler()); 29 30 root.setCenter(button); 31 primaryStage.setScene(new Scene(root, 500, 400)); 32 primaryStage.show(); 33 } 34} 35 36class saiEventHandler implements EventHandler<ActionEvent> { 37 public void handle(ActionEvent e) { 38 List<String> exts = Arrays.asList(".bmp", ".gif", ".jpg", ".jpeg", ".png"); // 画像拡張子 39 40 File dir = new File("image"); // 該当フォルダ 41 File[] files = dir.listFiles(); // 該当フォルダのフォルダ・ファイルを列挙 42 43 List<File> images = new ArrayList<>(); // 画像ファイル 44 for (File file : files) { 45 if (file.isDirectory()) continue; // フォルダは無視 46 47 String fileName = file.getName(); // 名前 48 int index = fileName.lastIndexOf("."); 49 if (index == -1) continue; // 拡張子がなければ無視 50 51 String ext = fileName.substring(index); // 拡張子(.込み) 52 if (exts.contains(ext)) images.add(file); // 拡張子が画像だったら追加 53 } 54 55 56 Pagination pagination = new Pagination(images.size()); 57 pagination.setPageFactory(pageIndex -> new ImageView(new Image(images.get(pageIndex).toURI().toString()))); 58 59 Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(5), event -> { 60 int pos = (pagination.getCurrentPageIndex() + 1) % pagination.getPageCount(); 61 pagination.setCurrentPageIndex(pos); 62 })); 63 fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE); 64 fiveSecondsWonder.play(); 65 66 Stage stage5 = new Stage(); 67 // Paginationのコントローラ部分を隠す(セコいw ちゃんとやるならcssをあてる .pagination .pagination-control { visibility: hidden; }) 68 stage5.setScene(new Scene(new VBox(pagination), 200, 100)); 69 stage5.show(); 70 } 71}

投稿2021/01/06 09:08

編集2021/01/06 11:10
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2021/01/06 09:36

ご回答ありがとうございます!!!マルチポストは、あまり推奨はされていないのですね… このコードを一度試しましたところ、作動しました! 最終的には、フォルダの名前をstr型として読み込みこんで、 File dir = new File("image")として入れたいのですが フォルダの名前を読み込めるフォルダパスの仕組みを検索したほうがいいでしょうか…?
TN8001

2021/01/06 09:43

> 最終的には、フォルダの名前をstr型として読み込みこんで、 > File dir = new File("image")として入れたいのですが > フォルダの名前を読み込めるフォルダパスの仕組みを検索したほうがいいでしょうか…? ちょっとよくわかりません。 File dir = new File(str); とすれば変数でもいいですが、それをどこから読むのでしょうか? テキストファイルに読み込むフォルダの情報を入れて、そこから読むということでしょうか。
nakagen

2021/01/06 10:19

スライドショーに必要な写真が保存されているフォルダを、FileChooserのように自由に読み込めるシステムを作って、指定したフォルダを読み込む機能(例えば、夏休みの写真が入っている「夏休みの思い出」のフォルダの名前を引き出したり、冬休みの写真が入っている「冬休みの思い出」のフォルダの名前を引き出したり)、つまり、どのフォルダでもスライドショーが発生できるようにしたいということです… 説明不足で済みません…
nakagen

2021/01/06 10:27

了解です!サイトを参考にやってみます!
guest

0

そもそも、
Duration
というのはどこで定義されてるんでしょうか

投稿2021/01/05 23:31

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2021/01/06 09:01

すみませんでした、Durationはサイトで見たデータを参考にして載せてみたのですが… private で定義したほうがいいのでしょうか…?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問