У меня есть пользовательский интерфейс vaadin, который должен быть динамическим (видимость полей должна меняться в зависимости от выбора пользователя). Я пробовал разные способы изменения состояния компонентов, такие как setEnabled (), setLabel (), ...
У меня есть ComboBox, в котором пользователь выбирает значения из en Enum. Я добавил ValueChangeListener в ComboBox, в котором я пытаюсь изменить Labels и другие свойства некоторых TextFields (setLabel (), setEnabled (), ...).
Мой ComboBox имеет ValueChangeListener как это:
myComboBox.addValueChangeListener(event -> refreshLabels(event.getValue()));
Сначала я написал такой метод:
private void refreshLabels(MyEnum e){
switch(e){
case OPTION1: textField1.setLabel("some Text");
textField2.setLabel("some Text");
case OPTION2: textField1.setLabel("some other Text");
textField2.setLabel("some other Text");
}
}
Но при этом методе ярлыки не будут обновляться.
Затем я написал еще одну процедуру обновления Ярлыков:
private String getNewLabel(MyEnum e){
switch(e){
case OPTION1: return "some Text";
case OPTION2: return "some other Text";
default: return "";
}
}
Я также изменил ValueChangeListener моего ComboBox:
myComboBox.addValueChangeListener(event -> textField1.setLabel(getNewLabel(event.getValue())));
С этим кодом мои ярлыки обновляются.
Как видите, у меня есть обходной путь, но с этим обходным путем я должен написать метод getNeLabel для каждого поля, потому что все поля будут нуждаться в разных метках при обновлении ComboBox. Я не понимаю, почему мой первый подход не работает, а второй работает. В обоих случаях компоненты уже добавляются в макет и отображаются в пользовательском интерфейсе при изменении метки. Может кто-нибудь объяснить мне это?