Инициализация значения по умолчанию для TextField в javafx с использованием весенней загрузки @Configuraion и @Value - PullRequest
1 голос
/ 18 апреля 2020

Изначально у меня был простой проект с весенней загрузкой, с файлом конфигурации под названием 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:.

@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. Любые идеи помогут! Спасибо!

1 Ответ

1 голос
/ 18 апреля 2020

РЕДАКТИРОВАТЬ: я не учел F XML для моего ответа. Все кредиты go для James_D за действительный комментарий после того, как ответ уже был принят.

При использовании F XML (Предпочитается)

Из комментариев:

Если это контроллер для файла F XML, вам не следует создавать экземпляры текстовых полей вообще. Если они объявлены в файле FXML, FXMLLoader будет их создавать и вставлять в контроллер. Просто установите текст в методе initialize () контроллера; ваши зависимости будут введены, когда это называется. - James_D

Не принимая во внимание F XML

Использование @PostConstruct: https://www.baeldung.com/spring-postconstruct-predestroy Это должно гарантировать, что ваш бин вводится (если нет другие вопросы).

Поместите все ваши инициализации текстового поля в постконструкторе:

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...