我正在为学校开发一个程序,用户可以选择一个单选按钮来显示总统的图像。但是,单击按钮时我无法显示图像。我不知道哪里出了问题,我需要一些帮助。其他一切都很好。我需要进行任何编辑吗?
package com.example.imagedisplay;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import java.io.File;
public class PresidentImageDisplay extends Application {
@Override
public void start(Stage primaryStage) {
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle("Select Presidents Folder");
File selectedDirectory = directoryChooser.showDialog(primaryStage);
if (selectedDirectory != null) {
File[] imageFiles = selectedDirectory.listFiles();
if (imageFiles != null && imageFiles.length >= 5) {
ImageView[] presidentImageViews = new ImageView[5];
ToggleGroup toggleGroup = new ToggleGroup();
HBox radioBox = new HBox(10);
for (int i = 0; i < 5; i++) {
presidentImageViews[i] = new ImageView(new Image(imageFiles[i].toURI().toString()));
presidentImageViews[i].setVisible(false);
RadioButton radioButton = new RadioButton("President " + (i + 1));
radioButton.setToggleGroup(toggleGroup);
final int index = i;
radioButton.setOnAction(event -> {
for (ImageView imageView : presidentImageViews) {
imageView.setVisible(false);
}
presidentImageViews[index].setVisible(true);
});
radioBox.getChildren().add(radioButton);
}
VBox root = new VBox(10);
root.getChildren().addAll(radioBox);
Scene scene = new Scene(root, 600, 400);
primaryStage.setTitle("US Presidents");
primaryStage.setScene(scene);
primaryStage.show();
} else {
System.out.println("Folder must contain at least 5 image files.");
}
}
}
public static void main(String[] args) {
launch(args);
}
}
您的代码存在一些问题。
ImageViews
添加到 Scene
。ImageViews
还是只需要一个?这是一个示例应用程序,它使用一个
ImageView
显示多张图像。
import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage primaryStage) {
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle("Select Presidents Folder");
File selectedDirectory = directoryChooser.showDialog(primaryStage);
File[] imageFiles;
ImageView imageView = new ImageView();
if (selectedDirectory != null)
{
//Use a filter to get the image files.
imageFiles = selectedDirectory.listFiles((File dir, String name) -> name.toLowerCase().endsWith(".png") ||
name.toLowerCase().endsWith(".gif") ||
name.toLowerCase().endsWith(".jpeg") ||
name.toLowerCase().endsWith(".mpo") ||
name.toLowerCase().endsWith(".tiff"));
if (imageFiles != null && imageFiles.length >= 5)
{
ToggleGroup toggleGroup = new ToggleGroup();
VBox radioBox = new VBox(10);
for (int i = 0; i < imageFiles.length; i++) {
Image image = new Image(imageFiles[i].toURI().toString());
RadioButton radioButton = new RadioButton("President " + (i + 1));
radioButton.setToggleGroup(toggleGroup);
radioButton.setOnAction(event ->{
imageView.setImage(image);
});
radioBox.getChildren().add(radioButton);
}
HBox root = new HBox(10);
root.getChildren().addAll(radioBox, imageView);//Add the VBox and ImageView to the root node.
Scene scene = new Scene(root, 600, 400);
primaryStage.setTitle("US Presidents");
primaryStage.setScene(scene);
primaryStage.show();
} else {
System.out.println("Folder must contain at least 5 image files.");
}
}
}
public static void main(String[] args) {
launch(args);
}
}