**15.30 (播放幻灯片)
25张幻灯片都以图像文件(slide0.jpg, slide1.jpg, slide24.jpg)的形式存储在图像目录中,可以在本书的源代码中下载。每个图像的大小都是800 x 600像素。编写一个Java应用程序,自动重复显示这些幻灯片。每两秒显示一张幻灯片。幻灯片按顺序显示。当显示完最后一张幻灯片时,第一张幻灯片重复显示,依此类推。当动画正在播放的时候可以单击按钮暂停,如果动画当前是暂停的,单击恢复
- 习题思路
- 新建一个Border、和一个HBox布局,创建一个ImageView,设置固定的长与高,为更方便的设置,可以创建一个boolean参数
- 新建一个Button,注册鼠标点击事件,将布尔参数设置为自身的相反值
- 将ImageView设置在Border中心,button设为底部
- 创建一个Timeline对象,每隔两秒调用一次更新幻灯片方法
- 新建一个更新幻灯片方法,在方法内创建Image,把新的图像设置在ImageView上,用一个int类型的参数计数
代码示例:编程练习题15_30PlaySlides.java
package chapter_15;
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Duration;
public class 编程练习题15_30PlaySlides extends Application{
private String FilePath = "src/Image/Poker/";
private double WIDTH = 376;
private double HEIGHT = 550;
private boolean isPause = false;
private int count = 1;
private ImageView image;
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane borderPane = new BorderPane();
HBox hBox = new HBox();
image = new ImageView();
image.setFitWidth(WIDTH);
image.setFitHeight(HEIGHT);
Button pause = new Button("Pause/Resume");
pause.setOnMouseClicked(e -> isPause = !isPause);
hBox.getChildren().add(pause);
hBox.setAlignment(Pos.CENTER);
borderPane.setCenter(image);
borderPane.setBottom(hBox);
Scene scene = new Scene(borderPane);
primaryStage.setTitle("编程练习题15_30PlaySlides");
primaryStage.setScene(scene);
primaryStage.show();
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2),e ->{
if(!isPause) {
showNextSlides();
}
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
}
public static void main(String[] args) {
Application.launch(args);
}
public void showNextSlides() {
Image i = new Image(FilePath+count+".png");
image.setImage(i);
count++;
if(count > 54)
count = 1;
}
}
- 结果展示