2015年2月15日日曜日

FXMLプロジェクトでリソースファイルをinitializeで読み取るには

FXMLプロジェクトをつくると、FXMLLoaderのスタティックなメソッドで初期化しているが、
インスタンスにして、リソースバンドルをセットしてやると、
FXMLDocumentControllerのinitializeメソッドで受け取れるようだ。

こんな感じかな?

    @Override
    public void start(Stage stage) throws Exception {
     
        // リソース取得
        ResourceBundle bundle = null;
        try (InputStream is = ExcelToCsv.class.getResourceAsStream("targetFile.properties");
                InputStreamReader isr = new InputStreamReader(is, "UTF-8");
                BufferedReader reader = new BufferedReader(isr)) {
            bundle = new PropertyResourceBundle(reader);
        }
     
        //Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        fxmlLoader.setResources(bundle);
        Parent root = fxmlLoader.load();
         
        Scene scene = new Scene(root);
     
        stage.setScene(scene);
        stage.show();
    }