当前位置: 首页 > 知识库问答 >
问题:

Controller类中的FileChooser-SceneBuilder JavaFX

孔硕
2023-03-14

我正在尝试编写使用SceneBuilder创建的按钮的功能。我在Scene builder中找到了“Code”部分,并设置了当我单击按钮时将启动的方法的名称(例如fileSelector)。在该方法中,我应该使用FileChooser变量(我需要从PC上获取一个图像并将其保存到一个“file”变量中)。

我复制了示例控制器骨架并将其粘贴到我的controller类中。现在我不知道如何实现该方法,因为我需要一个Stage变量与FileChooser变量一起使用,但是Stage变量是为公共void start(Stage primaryStage)方法给定的。

package application;

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;    

public class MainExample extends Application  {
    @Override
    public void start(Stage primaryStage) throws IOException {
        Pane firstPane = FXMLLoader.load(MainExample.class.getClassLoader().getResource("buttonExample.fxml"));
        Scene firstScene = new Scene(firstPane);
        primaryStage.setScene(firstScene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
package application;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class MyController {

    @FXML
    private Button selectFile;

    @FXML
    void fileSelector(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        File file = fileChooser.showOpenDialog(stage);
    }
}
xml prettyprint-override"><?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="135.0" prefWidth="280.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MyController">
    <children>
        <Button fx:id="selectFile" layoutX="102.0" layoutY="55.0" mnemonicParsing="false" onAction="#fileSelector" text="SelectFile" />
    </children>
</Pane>

共有1个答案

孟跃
2023-03-14

您需要一个窗口实例来显示FileChooser对话框,您可以从事件中获得它,如下所示:

java prettyprint-override">@FXML
void fileSelector(ActionEvent event) {
    Window window = ((Node) (event.getSource())).getScene().getWindow();
    FileChooser fileChooser = new FileChooser();
    File file = fileChooser.showOpenDialog(window);
    event.consume();
}
 类似资料:
  • 问题内容: 我的程序应该从文件上传图像,然后将其显示为背景。我的问题是,当我在参数中创建对象时,它会询问您要放入的文件。我试图将我的File对象放入其参数内,但无法正常工作。请帮我。我被卡住了 问题答案: 问题在于,的构造函数期望a ,而您将其传递给a 。任何优秀的IDE都会告诉您给定方法的参数期望值。找到该键盘快捷方式并使用它(IntelliJ中的Ctrl + P)。从那里开始,您所要做的就是找

  • 问题内容: 我对大概要文件节具有通用逻辑,因此我尝试使用对概要文件节的通用逻辑进行创建,并且与该节相关的所有类都应按照我的理解正确扩展此Profile类,但是当我尝试创建时会收到错误消息: CodeIgniter尝试找到我正在其中运行的此类。 我的错误在哪里?或者,也许还有另一种更好的方法来标记出通用逻辑? 问题答案: 我认为您已经将MY_Controller放在/ application / c

  • 我有控制器方法,为此我正在创建Junit,但在调用服务方法时出现Null指针错误。我使用了电源模拟,但仍然得到Null指针。 方法: 测试方法: @InjectMocks私有DataSourceReportController dataSourceReportController; 在“dataSourceReportService.listDataSourceReportByCurrentRun

  • StackPane容器=fxmlLoader.load(getClass().getResource(“fxmlDocument.fxml”)等。 我如何在控制器传递中获得我的根节点或stackpane?

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

  • 现在,我们已经有了游戏中的所有图像和类,接下来的工作是构建游戏引擎。Canvas Hero游戏使用标准的MVC架构进行构建,MVC架构使数据、表示和控制分离。本节,我们将创建Controller类,它负责实例化模型和视图,初始化游戏,控制游戏状态,并管理键盘事件。 操作步骤 按照以下步骤,创建Canvas Hero游戏的控制器: 1.   定义Controller类的构造函数: /* 游戏控制器