gpt4 book ai didi

java - Controller 类中的 FileChooser - SceneBuilder JavaFX

转载 作者:行者123 更新时间:2023-12-02 01:00:09 26 4
gpt4 key购买 nike

我正在尝试对使用 SceneBuilder 创建的按钮的功能进行编码。我在场景构建器中找到了“代码”部分,并设置了单击按钮时将启动的方法的名称(例如 fileSelector)。在该方法中,我应该使用 FileChooser 变量(我需要从 PC 获取图像并将其保存到"file"变量中)。

我复制了示例 Controller 骨架并将其粘贴到我的 Controller 类中。现在我不知道如何实现该方法,因为我需要一个 Stage 变量与 FileChooser 变量一起使用,但 stage 变量是为 public 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);
}
}

我的 Controller 类

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);
}
}

按钮中的 FXML

<?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>

最佳答案

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

@FXML
void fileSelector(ActionEvent event) {
Window window = ((Node) (event.getSource())).getScene().getWindow();
FileChooser fileChooser = new FileChooser();
File file = fileChooser.showOpenDialog(window);
event.consume();
}

关于java - Controller 类中的 FileChooser - SceneBuilder JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com