2016-04-23 16 views
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); 
    } 

} 
+0

正確的方法是在啓動方法中配置應用程序。在應用程序終止之前,Launch()不會返回。 –

+1

添加到@AndreasFester評論:*啓動方法不會返回,直到應用程序退出,要麼通過調用Platform.exit,要麼所有的應用程序窗口已關閉。* - 因此,任何在Application.launch(HollowApplication。類,參數);''直到應用程序退出後才運行。 –

+0

'init'方法也是一種可能性。當調用init(或稍後)時,可以使用與main方法完全相同的信息('getParameters()'方法)。 – fabian

回答

0

我不知道它的工作,但你可以嘗試,並添加setter方法內部類中的應用程序的參數,並嘗試從外部給他們打電話(例如從你的主)。再次,我不知道這是否會起作用,但我會試試你的位置。

相關問題