Wednesday, 4 January 2017

Chapter 16 Exercise 28, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

16.28 (Slide show)
Programming Exercise 15.30 developed a slide show using images.
Rewrite that program to develop a slide show using text files.
Suppose ten text files named slide0.txt, slide1.txt, . . . ,
and slide9.txt are stored in the text directory.
Each slide displays the text from one file. Each slide is
shown for one sec- ond, and the slides are displayed in order.
When the last slide finishes, the first slide is redisplayed,
and so on. Use a text area to display the slide.


import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Exercise_28 extends Application {

    StackPane slideShow = new StackPane();
    TextArea[] slides;

    int numberOfSlides;
    int currentSlide;

    @Override
    public void start(Stage primaryStage) throws Exception {


        slides = getPictureFiles();
        numberOfSlides = slides.length;

        Timeline timeline = new Timeline(
                new KeyFrame(Duration.seconds(2), e-> nextSlide()));

        timeline.setCycleCount(Timeline.INDEFINITE);
        timeline.play();

        slideShow.setOnMouseClicked(e-> {
            if (timeline.getStatus() == Animation.Status.RUNNING) {
                timeline.pause();
            } else {
                timeline.play();
            }
        });

        slideShow.getChildren().add(slides[currentSlide++]);
        Scene scene = new Scene(slideShow);
        primaryStage.setTitle("Slide Show");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public TextArea[] getPictureFiles() {
        TextArea[] tfStrings = new TextArea[10];

        for (int i = 0; i < tfStrings.length; i++) {
            Scanner input = null;
            String s = "";
            try {
                input = new Scanner(new File("src/Text Files/slide" + i + ".txt"));
                while (input.hasNext()) {
                    s += input.nextLine() + "\n";
                }
                tfStrings[i] = new TextArea(s);
                tfStrings[i].setWrapText(true);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
        return tfStrings;
    }

    private void nextSlide() {
        slideShow.getChildren().clear();
        slideShow.getChildren().add(slides[(currentSlide++) % slides.length]);
    }
    public static void main(String[] args) {
        Application.launch(args);
    }
}

No comments :

Post a Comment