2015-06-11 4 views
0

Например, если у меня есть три элемента, и я хочу изменить макет на основе элемента, выбранного в поле со списком ... как мне это достичь? Вот мой пример кода:Как изменить макет Vaadin 7 на основе выбора элементов Combobox?

ComboBox combo = new ComboBox("My combo box"); 
combo.addItems("item 1", "item 2", "item 3"); 
combo.setTextInputAllowed(false); 
combo.setNullSelectionAllowed(false); 
combo.select("item 1"); 
combo.setImmediate(true); 
combo.addValueChangeListener(new Property.ValueChangeListener() { 
/** 
*/ 
private static final long serialVersionUID = 1L; 
@Override 
public void valueChange(ValueChangeEvent event) { 
Notification.show("Selected item: " + event.getProperty().getValue(), Type.HUMANIZED_MESSAGE); 
} 
}); 
ExampleGrid grid = new ExampleGrid(); 
grid.setWidth(100, Unit.PERCENTAGE); 
Panel panel = new Panel(grid); 
panel.setSizeFull(); 
addComponent(panel); 

Таким образом, есть три панели, созданные для трех элементов в поле со списком. Но, я не знаю, как изменить макет на основе элемента, выбранного внутри поля со списком?

Конечно, я могу легко получить первую панель. Но я хочу видеть все три панели на основе выбора со списком.

ответ

0

Держите ваши панели там и сопоставьте их с предметами. Например. используйте Enum и сохраните корреляцию на карте. Добавьте слушателя изменения значения в поле со списком и setVisisble (false/true) на панели в соответствии с выбором.

+0

Спасибо за ваше предложение. Используя перечисление и сохранение корреляции на карте, я сделал. Но проблема с этим подходом заключается в том, что компоновка combobox как-то плавает ниже (она висит как плод в дереве). Вот фрагмент кода, который я использую: 'LinkedHashMap карта = новый LinkedHashMap ();' ' map.put (EnumType.ENUM1, "enum1 Надпись");' ' ComboBox box = new ComboBox («Box», ContainerUtils.createContainerFromMap (map)); '' box.setItemCaptionMode (ComboBox.ITEM_CAPTION_MODE_PROPERTY); ' – AppKeto

+0

Я уверен, что проблемы с макетом не являются результатом использования перечисления или нет. если это поможет сделать ваш код, пожалуйста, примите ответ. если у вас есть дополнительные вопросы, которые не касаются непосредственно первоначального вопроса, пожалуйста, запустите новый (SO - это сайт QA и без форума) или добавьте соответствующий код/​​скриншоты в качестве редактирования исходного вопроса, если вы считаете, что проблемы идти рука об руку. – cfrick

+0

Извините, у меня недостаточно очков, чтобы отметить «Этот ответ полезен» здесь. Но я благодарю вас за ваше предложение. Во всяком случае, ваши предложения полезны. ;) – AppKeto

Смежные вопросы