簡體   English   中英

如何從控制器類打開JavaFX FileChooser?

[英]How do I open the JavaFX FileChooser from a controller class?

我的問題是使用FileChooser所有示例都要求您傳入一個階段。 唯一的問題是我的UI是在fxml文件中定義的,該文件使用與主階段分開的控制器類。

@FXML protected void locateFile(ActionEvent event) {
    FileChooser chooser = new FileChooser();
    chooser.setTitle("Open File");
    chooser.showOpenDialog(???);
}

我該怎么辦??? 使它工作? 就像我說的那樣,我對控制器類中的任何階段都沒有任何引用,所以我該怎么辦?

對於場景中的任何節點(例如,根節點;但是使用@FXML注入的任何節點都可以),

chooser.showOpenDialog(node.getScene().getWindow());

您不必堅持在應用程序中創建的舞台,您可以:

@FXML protected void locateFile(ActionEvent event) {
    FileChooser chooser = new FileChooser();
    chooser.setTitle("Open File");
    File file = chooser.showOpenDialog(new Stage());
}

或者如果你想繼續使用同一個舞台,那么你必須先將舞台傳遞給控制器​​:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("yourFXMLDocument.fxml"));
    Parent root = (Parent)loader.load();
    MyController myController = loader.getController();
    myController.setStage(stage);

並且您將有應用程序的主要階段隨時使用。

從菜單項

public class SerialDecoderController implements Initializable {

  @FXML
  private MenuItem fileOpen;

  @Override
  public void initialize(URL url, ResourceBundle rb) {
    // TODO
 }    


public void fileOpen (ActionEvent event) {

    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open Resource File"); 
    fileChooser.showOpenDialog(fileOpen.getParentPopup().getScene().getWindow());

}

或者,什么對我有用:簡單地把null

@FXML
private void onClick(ActionEvent event) {
    File file = fileChooser.showOpenDialog(null);
    if (file != null) {
       //TODO
    }
}

暫無
暫無

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

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