0
在很多示例中,展示瞭如何擴展Application
方法以使JavaFX應用程序組合並運行。如何動態初始化JavaFX應用程序,而不是硬編碼?
但是如果我不想要?如果我想從我的代碼動態配置應用程序,該怎麼辦?示例如下:
import javafx.application.Application;
import javafx.stage.Stage;
public class HollowTry {
public static class HollowApplication extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
}
}
public static void main(String[] args) {
Application.launch(HollowApplication.class, args);
// now I want to set title, scene etc... how?
}
}
請不要爭論我爲什麼需要它。
UPDATE
好吧,launch()
永遠不會結束,我沒有檢查這一點。無論如何,我需要以一種編程方式構建應用程序,而無需任何硬編碼。
更新2
我是從春天希望CON構建應用程序,我發現了以下解決方案現在。
JavaFX的包裝類
它包裝上下文初始化到FX線程並捕獲配置類是訪問從start()
:
public class SpringJavaFX extends Application {
private static Class<?>[] annotatedClasses;
@Override
public void start(Stage primaryStage) throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(annotatedClasses);
String title = (String) context.getBean("primaryStageTitle");
primaryStage.setTitle(title);
Scene scene = (Scene) context.getBean("primaryStageScene");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void launch(Class<?>... annotatedClasses) {
SpringJavaFX.annotatedClasses = annotatedClasses;
Application.launch();
}
}
春路建設
這裏是一個春季建築的例子。每個組件是一個bean,並在適當位置創建:
public class Attempt01_HelloWorld {
@Configuration
public static class Config {
@Bean
String primaryStageTitle() {
return "Attempt01_HelloWorld";
}
@Bean
Scene primaryStageScene() {
Scene ans = new Scene(root(), 800, 600);
return ans;
}
@Bean
Button button() {
Button ans = new Button();
ans.setText("Say 'Hello World'");
ans.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
root().getChildren().add(ans);
return ans;
}
@Bean
StackPane root() {
StackPane root = new StackPane();
return root;
}
}
public static void main(String[] args) {
SpringJavaFX.launch(Config.class);
}
}
正確的方法是在啓動方法中配置應用程序。在應用程序終止之前,Launch()不會返回。 –
添加到@AndreasFester評論:*啓動方法不會返回,直到應用程序退出,要麼通過調用Platform.exit,要麼所有的應用程序窗口已關閉。* - 因此,任何在Application.launch(HollowApplication。類,參數);''直到應用程序退出後才運行。 –
'init'方法也是一種可能性。當調用init(或稍後)時,可以使用與main方法完全相同的信息('getParameters()'方法)。 – fabian