编写JavaFX程序,实现一个图片浏览器,要求: 图片文件放在某个目录下,布置如下界面,实现单张观看(“下一幅”、 “上一幅”按钮)和循环观看(每隔固定时间出现一张,如此反复)功能。最后,设计合适的舞台和场景,进行测试。
时间: 2024-02-12 15:06:36 浏览: 72
以下是一个简单的JavaFX图片浏览器示例,实现了单张观看和循环观看的功能:
```java
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
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;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ImageViewer extends Application {
private List<File> imageFiles;
private int currentIndex = 0;
private ImageView imageView;
private Timeline timeline;
@Override
public void start(Stage primaryStage) {
// Load image files from a directory
File imageDir = new File("path/to/image/directory");
imageFiles = new ArrayList<>();
for (File file : imageDir.listFiles()) {
if (file.isFile() && file.getName().endsWith(".jpg")) {
imageFiles.add(file);
}
}
// Create image view
imageView = new ImageView();
imageView.setFitWidth(600);
imageView.setFitHeight(400);
imageView.setPreserveRatio(true);
// Create buttons
Button prevButton = new Button("上一幅");
prevButton.setOnAction(event -> showPreviousImage());
Button nextButton = new Button("下一幅");
nextButton.setOnAction(event -> showNextImage());
Button playButton = new Button("循环观看");
playButton.setOnAction(event -> startSlideshow());
Button stopButton = new Button("停止");
stopButton.setOnAction(event -> stopSlideshow());
// Create button panel
HBox buttonPanel = new HBox(10, prevButton, nextButton, playButton, stopButton);
// Create border pane
BorderPane root = new BorderPane();
root.setCenter(imageView);
root.setBottom(buttonPanel);
// Create scene
Scene scene = new Scene(root);
// Set stage properties
primaryStage.setTitle("图片浏览器");
primaryStage.setScene(scene);
primaryStage.show();
}
private void showPreviousImage() {
if (currentIndex == 0) {
currentIndex = imageFiles.size() - 1;
} else {
currentIndex--;
}
showImage();
}
private void showNextImage() {
if (currentIndex == imageFiles.size() - 1) {
currentIndex = 0;
} else {
currentIndex++;
}
showImage();
}
private void showImage() {
File file = imageFiles.get(currentIndex);
Image image = new Image(file.toURI().toString());
imageView.setImage(image);
}
private void startSlideshow() {
timeline = new Timeline(new KeyFrame(Duration.seconds(5), event -> showNextImage()));
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();
}
private void stopSlideshow() {
if (timeline != null) {
timeline.stop();
}
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个示例中,我们首先从一个目录中加载所有的JPEG图像文件。然后,我们使用一个ImageView控件来显示选定的图像。我们还创建了四个按钮,分别用于显示上一张、下一张、启动循环播放和停止播放。当用户单击“上一张”或“下一张”按钮时,我们将当前索引递增或递减,然后显示新的图像。当用户单击“循环播放”按钮时,我们创建一个时间轴,每隔5秒钟自动显示下一张图像,并将时间轴设置为无限循环。当用户单击“停止”按钮时,我们停止时间轴。
最后,我们将ImageView和按钮面板添加到一个BorderPane布局中,并创建一个场景和一个舞台来显示整个应用程序。你可以根据需要修改这些控件和布局,以创建自己的图片浏览器。
阅读全文