我在 Javafx 图像显示方面遇到问题

问题描述 投票:0回答:1

我正在为学校开发一个程序,用户可以选择一个单选按钮来显示总统的图像。但是,单击按钮时我无法显示图像。我不知道哪里出了问题,我需要一些帮助。其他一切都很好。我需要进行任何编辑吗?

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);
    }
}
java javafx radio-button
1个回答
0
投票

您的代码存在一些问题。

  1. 您不使用过滤器。使用过滤器,以便仅选择带有图像扩展名的文件。
  2. 您永远不会将您的
    ImageViews
    添加到
    Scene
  3. 您需要多个
    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);
    }
}

图像信息:

© www.soinside.com 2019 - 2024. All rights reserved.