gpt4 book ai didi

java - 如何动态初始化 JavaFX 应用程序,而不是硬编码?

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:16 24 4
gpt4 key购买 nike

在许多示例中,都展示了如何扩展 Application 方法以组成和运行 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?

}

}

请不要争论我为什么需要它。

更新

好吧,launch() 永远不会终止,我没有检查这一点。不管怎样,我需要一种以编程方式构建应用程序的方法,而不需要任何硬编码。

更新2

我希望从 Spring 构建应用程序,现在我找到了以下解决方案。

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

}
}

春道大厦

这是一个 Spring 路建筑的例子。每个组件都是一个 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);
}

}

最佳答案

我不确定它是否有效,但您可以尝试在内部类中为应用程序的参数添加setter方法,并尝试从外部调用它们(例如从您的主类)。再说一遍,我不知道这是否有效,但我会代替你尝试一下。

关于java - 如何动态初始化 JavaFX 应用程序,而不是硬编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com