2016-01-05 1 views
0

У меня есть HorizontalLayout (назовем его parent). Внутри этого у меня есть два VerticalLayout s (их зовут слева и справа).Ширина детской вертикальной компоновки

Влево содержит только текст, содержит много элементов.

Родитель имеет ширину 100%, так что она занимает всю ширину браузера:

parent.setWidth("100%");

Левый должен взять столько же места, как это необходимо, право должны принимать все другие пространство.

Как это сделать? Я пробовал все варианты, описанные here и there без успеха. Я попытался:

  • left.setWidthUndefined();
  • right.setWidth("100%");
  • left.setWidth("150px");
  • left.setWidth("30%"); вместе с right.setWidth("70%");

Ничего подействовал.

Обновленный исходный код:

HorizontalLayout parent = new HorizontalLayout(); 
parent.setCaption("Parent"); 

VerticalLayout left = new VerticalLayout(); 
left.setCaption("Left"); 

VerticalLayout right = new VerticalLayout(); 
right.setCaption("Right"); 

parent.addComponent(left); 
parent.addComponent(right); 
parent.setWidth("100%"); 
right.setWidth("100%"); 
parent.setExpandRatio(right, 1.0f); 

setCompositionRoot(parent); 
+0

2 панели видны в вашем браузере, если вы проверите их с инспектором? попробуйте добавить высоту также – AntJavaDev

+0

Это не панели, а макеты. Какой инспектор? Какую высоту я должен добавить? Высота довольно переменная. – mosquito87

ответ

0

Я просто сделал быстрый тест, и следующий, кажется, работает:

... 
left.setSizeUndefined(); 
parent.setWidth("100%"); 
parent.setExpandRatio(right, 1); 
... 

screenshot

Это полный код тестового приложения (без импорта):

@Theme("reindeer") 
public class ForumUI extends UI { 

    @WebServlet(value = "/*", asyncSupported = true) 
    @VaadinServletConfiguration(productionMode = false, ui = ForumUI.class) 
    public static class Servlet extends VaadinServlet { 
    } 

    public static class SomeComponent extends CustomComponent { 
     public SomeComponent() { 
      HorizontalLayout parent = new HorizontalLayout(); 
      parent.setCaption("Parent"); 
      parent.addStyleName("v-ddwrapper-over"); 

      VerticalLayout left = new VerticalLayout(); 
      left.setCaption("Left"); 
      left.addStyleName("v-ddwrapper-over"); 

      VerticalLayout right = new VerticalLayout(); 
      right.setCaption("Right"); 
      right.addStyleName("v-ddwrapper-over"); 

      parent.addComponent(left); 
      parent.addComponent(right); 

      left.setSizeUndefined(); 
      parent.setWidth("100%"); 
      parent.setExpandRatio(right, 1); 

      setCompositionRoot(parent); 
     } 
    } 

    @Override 
    protected void init(VaadinRequest request) { 
     setContent(new SomeComponent()); 
    } 

} 
+0

Это сделало. Благодаря! – mosquito87

0

Here is the documentation для пространства "распределения" в HorizontalLayout компонента.

Ключом, чтобы решить вашу проблему, является рассказать компоненту HorizontalLayout, как развернуть его по методу layout.setExpandRatio(leftComponent, 1.0f);.

+0

Я пробовал это раньше, но не в том месте. Используя ваше предложение, правильный 'VerticalLayout' по-прежнему не расширен до полного размера. Должен ли я устанавливать ширину родительского элемента на 100%? – mosquito87

+0

Да, ваши дочерние компоненты должны принимать все допустимые размеры, ваши дети должны иметь ширину 100% –

+0

У меня теперь есть: 'parent.setExpandRatio (left, 1.0f);' и 'right.setWidth (" 100%); '. Все еще нет успеха. – mosquito87