当前位置: 首页 > 面试题库 >

从JavaFX中的FileChooser打开图像

司寇高峯
2023-03-14
问题内容

我的程序应该从文件上传图像,然后将其显示为背景。我的问题是,当我Image在参数中创建对象时,它会询问您要放入的文件。我试图将我的File对象放入其参数内,但无法正常工作。请帮我。我被卡住了

public class FileOpener extends Application{

    public void start(final Stage stage) {
        stage.setTitle("File Chooser Sample");

        final FileChooser fileChooser = new FileChooser();

        final Button openButton = new Button("Choose Background Image");
        openButton.setOnAction((final ActionEvent e) -> {
            File file = fileChooser.showOpenDialog(stage);
            if (file != null) {
               // openFile(file);

               // where my problem is 
                Image image1 = new Image("file");
                // what I tried to do
                    // Image image1 = new Image(file);
                ImageView ip = new ImageView(image1);
                BackgroundSize backgroundSize = new BackgroundSize(100, 100, true, true, true, false);
                BackgroundImage backgroundImage = new BackgroundImage(image1, BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, backgroundSize);
            }
        }); 
        final StackPane stac = new StackPane();       
        stac.getChildren().add(openButton);
        stage.setScene(new Scene(stac, 500, 500));
        stage.show();
    }

     public static void main(String[] args) {
        Application.launch(args);
    }        
}

问题答案:

问题在于,的构造函数Image期望a String url,而您将其传递给a
File。任何优秀的IDE都会告诉您给定方法的参数期望值。找到该键盘快捷方式并使用它(IntelliJ中的Ctrl +
P)。从那里开始,您所要做的就是找到一种将a转换FileString代表其url的方法。在这种情况下:

Image image1 = new Image(file.toURI().toString());

请注意,您实际上从未设置过背景图片,需要在lambda中添加以下行:

stac.setBackground(new Background(backgroundImage));

但是,为此,您将必须将动作的声明移到stac动作侦听器的上方。



 类似资料:
  • 问题内容: 我的问题是所有使用示例都需要您通过一个阶段。唯一的问题是,我的UI是在文件中定义的,该文件使用与主阶段分离的控制器类。 我该怎么做才能使其正常工作?就像我说的那样,我在控制器类中没有任何阶段的引用,那我该怎么办? 问题答案: 对于场景中的任何节点(例如,根节点;但是注入的任何节点都可以),请执行

  • 我正在尝试编写使用SceneBuilder创建的按钮的功能。我在Scene builder中找到了“Code”部分,并设置了当我单击按钮时将启动的方法的名称(例如fileSelector)。在该方法中,我应该使用FileChooser变量(我需要从PC上获取一个图像并将其保存到一个“file”变量中)。 我复制了示例控制器骨架并将其粘贴到我的controller类中。现在我不知道如何实现该方法,因

  • 我正在尝试将第三方JavaFX应用程序嵌入到更大的Swing应用程序中。要求是它的行为就像是一个非模态子窗口。在JavaFX?中如何从JFXPanel打开模态对话框,对我的工作有所帮助?。 但是窗口排序没有正确设置。可以将子舞台放在父JFrame后面。我不会期望这与子窗口。 使用xprop在Ubuntu 16.04中揭示了X11原子WM_TRANSIENT_FOR仅为子JDialog设置,而不是子

  • 主要内容:打开文件,扩展过滤器,保存文件,示例允许用户导航文件系统并选择一个文件或文件夹。 类位于包中。 打开文件 文件选择器可用作打开文件对话框,用于选择单个文件或多个文件,或作为文件保存对话框。以下代码创建一个对象并设置其标题,然后显示给用户。 可以通过设置和属性来配置文件选择器对话框窗口。 扩展过滤器 可以设置扩展过滤器来确定在文件选择器中打开哪些文件。 保存文件 FileChooser API允许用户为由应用程序保存的文件指定文件名及

  • 我正在开发一个Java应用程序,使用JavaFX作为它的用户界面。 在OSX Mavericks中,当我使用FileChooser类从计算机硬盘加载CSV文件时,该对话框会显示所有文件和文件夹,甚至是隐藏的文件和文件夹,它们会产生大量噪音,很难找到所需的文件。 此屏幕截图说明了我所说的内容: 我认为这可能是一个OS X问题,但我不知道如何修复,至少我不知道如何使用JavaFX FileChoose

  • 我有一个JavaFX按钮,当用户按Enter时触发。这会导致FileChooser打开。有些人(像我一样)可能会在FileChooser中点击Enter来保存文件。但是,这会导致保存按钮再次触发自身并再次打开FileChooser以保存新文件。用鼠标单击按钮(在FileChooser中)没有这个问题。 我以为从按钮中使用事件会解决这个问题,但它只使用GUI事件上的按钮,而不是FileChooser