使用Spring Boot @Configuraion和@Value初始化javafx的TextField的默认值

李·阿隆(Lee Aron):

最初,我有一个简单的spring boot项目,其中包含一个名为DemoConfig.java的配置文件,如下所示:

@Configuration
@PropertySource("classpath:application.properties")
public class DemoConfig
{
    @Value("${deviceName}")
    private String deviceName;

    @Value("${platformName}")
    private String platformName;

    @Value("${platformVersion}")
    private String platformVersion;

    @Value("${appPackage}")
    private String appPackage;

    @Value("${appActivity}")
    private String appActivity;

现在,我想将javafx应用于我的项目,以某种方式启动一个配置页面,供用户配置这些值。因此,我有这个DemoController.java作为fx:controller。

@Component
public class DemoController
{
    @Resource
    private DemoConfig demoConfig;

    public TextField platformName = new TextField(demoConfig.getPlatformName());

    public TextField platformVersion = new TextField(demoConfig.getPlatformVersion());

    public TextField deviceName = new TextField(demoConfig.getDeviceName());

    public TextField appActivity = new TextField(demoConfig.getAppActivity());

    public TextField appPackage = new TextField(demoConfig.getAppPackage());

}

现在我得出以下结论:因为尚未将DemoConfig作为bean注入,所以DemoController的初始化将失败,对于如何将Controller与我的Configuration类结合起来,我有点困惑。我的目标很简单,只需使用bean DemoConfig的值初始化Controller的文本字段即可。任何想法都会有所帮助!谢谢!

汤姆·库尔斯(Tom Cools):

编辑:我没有考虑FXML为我的答案。答案已被接受后,所有学分将归因于James_D的有效评论。

使用FXML时(首选)

从评论:

如果这是FXML文件的控制器,则完全不应实例化文本字段。如果在FXML文件中声明了它们,则FXMLLoader将实例化它们并将它们注入到控制器中。只需在控制器的initialize()方法中设置文本即可;您的依赖项将在调用时注入。– James_D

不考虑FXML

使用@PostConstruct:https : //www.baeldung.com/spring-postconstruct-predestroy这应该确保您的bean被注入(如果没有其他问题)。

将所有文本字段初始化都放在postconstruct中:

@Component
public class DemoController
{
    @Autowire
    private DemoConfig demoConfig;

    public TextField platformName;

    public TextField platformVersion;

    public TextField deviceName;

    public TextField appActivity;

    public TextField appPackage;


    @PostConstruct
    private void postConstruct() {
        platformName = new TextField(demoConfig.getPlatformName());

        platformVersion = new TextField(demoConfig.getPlatformVersion());

        deviceName = new TextField(demoConfig.getDeviceName());

        appActivity = new TextField(demoConfig.getAppActivity());

        appPackage = new TextField(demoConfig.getAppPackage());
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章