簡體   English   中英

Controller 類中的 FileChooser - SceneBuilder JavaFX

[英]FileChooser in Controller class - SceneBuilder JavaFX

我正在嘗試編寫使用 SceneBuilder 創建的按鈕的功能。 我在場景構建器中找到了“代碼”部分,並設置了單擊按鈕時將啟動的方法的名稱(例如 fileSelector)。 在該方法中,我應該使用 FileChooser 變量(我需要從 PC 中獲取圖像並將其保存到“文件”變量中)。

我復制了示例控制器骨架並將其粘貼到我的 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);
    }
}

我的控制器類

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM