import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.StackPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.atomic.AtomicReference;
import static java.nio.file.Files.readAllBytes;
public class FilePreview extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage) throws IOException {
TextArea area=new TextArea();
Button button=new Button("打开文件队列");
Button _button=new Button("预览文件");
FlowPane fp=new FlowPane(button,_button);
StackPane sp=new StackPane(area);
BorderPane pane=new BorderPane();
pane.setPrefWidth(1000);
pane.setPrefHeight(800);
pane.setCenter(sp);
pane.setTop(fp);
stage.setScene(new Scene(pane));
stage.show();
AtomicReference<Queue<String>> reference=new AtomicReference();
button.setOnAction(event -> {
List<File> files = new FileChooser().showOpenMultipleDialog(stage);
if(files==null)return;
Queue<String> queue=new ArrayBlockingQueue<>(files.size());
for (File file : files) {
try {
queue.add(new String(readAllBytes(Path.of(file.getPath()))));
} catch (IOException e) {
e.printStackTrace();
}
}
reference.set(queue);
});
_button.setOnAction(event -> {
Queue<String> queue=reference.get();
Queue<String> _queue=queue;
if(!queue.isEmpty()){
area.setText(queue.peek());
_queue.add(queue.poll());
}
else{
if(!_queue.isEmpty()){
area.setText(_queue.peek());
queue.add(_queue.poll());
}
}
});
}
}
代码可运行。