2014-04-09 3 views
13

사람들은 Vaadin 레이아웃에서 스크롤 막대를 숨기는 방법을 묻는 질문을 많이 발견했지만 Vaadin이 스크롤바를 표시하지 않는다는 것이 문제입니다. 예를 들어이 코드 가질 수 있습니다Vaadin 레이아웃에 스크롤바를 추가하는 방법

HorizontalLayout layout = new HorizontalLayout(); 
layout.setSizeUndefined(); // I also tried setSizeFull() 
for(Integer i = 1; i <= 15; i++) { 
    layout.addComponent(new Button("Test button #" + i.toString()); 
} 

을하지만이 코드를 실행하면 브라우저 창을 모두 보여 너무 작은 경우, 페이지에있는 버튼은 단순히립니다. 스크롤바가 표시되지 않습니다.

나는 또한 패널을 만든 다음이 패널에 내 레이아웃을 추가하려고 시도했습니다. 나는 모두 panel.addComponent(foo)panel.setContent(foo)을 테스트했으며 panel.setScrollable(true)도 설정하려고했습니다. 어떤 성공도없이.

어떤 종류의 Vaadin 레이아웃에 스크롤바를 추가 할 수있는 방법이 있습니까? 나는 Vaadin 6.8.7을 사용합니다. 미리 감사드립니다.


내 전체 코드가있다 :

private ComponentContainer openZoomifyLayout() { 
    Panel panel = new Panel(); 
    Panel panel2 = new Panel(); 

    middlePanel = new MiddlePanel(); 

    VerticalLayout mw = new VerticalLayout(); 
    mw.setSizeFull(); 

    HorizontalLayout sp = new HorizontalLayout(); 
    Panel photos = new Panel(); 
    photos.setSizeUndefined(); 

    mw.addComponent(panel); 
    mw.addComponent(panel2); 
    mw.addComponent(sp); 

    mw.setExpandRatio(sp, 99); 
    mw.setExpandRatio(panel, 0); 
    mw.setExpandRatio(panel2, 0); 

    panel2.addComponent(middlePanel); 

    mw.setComponentAlignment(panel, Alignment.TOP_CENTER); 
    mw.setComponentAlignment(panel2, Alignment.TOP_CENTER); 

    photos.setContent(table); 
    photos.setScrollable(true); 
    sp.addComponent(photos); 
    sp.addComponent(createMainDetail()); 

    return mw; 
} 

가이 방법은 윈도우를 확장 클래스에 사용되는, 그래서 초기화 시간이있다 : setContent(openZoomifyLayout());

+0

기본 레이아웃을 표시 할 수 있습니까?아마 레이아웃 체인 위로 어딘가에 고정 높이가있는 구성 요소가 있습니다. –

+0

기본 레이아웃의 코드를 추가했습니다. :-) – Firzen

답변

17

spHorizontalLayoutphotosPanel은 전체 크기 여야합니다. 패널은 한 방향으로 크기를 정의되지 않은 경우는 수직으로 기본적으로이 같은

당신은 angel이라는 책 장 6.6.1

일반적으로 읽을 수 있듯이, 그것은 내용의 크기에 맞게 성장한다 과 같이 콘텐츠가 커집니다. 그러나 고정 또는 퍼센트 크기가 있고 내용이 너무 커서 콘텐츠 영역에 맞지 않을 경우 특정 방향에 스크롤 막대 이 표시됩니다. 패널의 스크롤 막대는 CSS의 overflow : auto 속성을 사용하여 브라우저에서 기본적으로 처리 한 입니다.

+0

이것은 절대적으로 완벽합니다! 넌 나를 구했다! 잘 작동한다. 고맙습니다. – Firzen

5

당신은 패널이 필요합니다가. 또한 패널의 크기가 고정되어 있고 "자연스러운"것이 아닌지 확인해야합니다. 크기가 "자연 스럽다"면 패널의 내용이 완전히 표시 될 때까지 패널이 확대됩니다. 패널의 기본 크기는 자연스럽지 않으므로 스크롤바가 표시되지 않습니다.

3

다음 단계에 따라 적절한 방향

  • 외측 레이아웃 요구 고정 또는 percentual 크기
  • 내부 레이아웃이 그 방향
  • 에 정의되지 않은 크기가 필요 (예 VerticalLayout 고정 또는 percentual 높이가 필요)
  • 외부 레이아웃 요구

v-scrollable을 styleName의 예

public class SomeView extends CustomComponent implements View 
{ 
     this.addStyleName("v-scrollable"); 
     this.setHeight("100%"); 
     VerticalLayout content = new VerticalLayout(); 
     // content has undefined height by default - just don't set one 
     setCompositionRoot(content); 
... 
} 

이 필요에 따라 content가 증가하면서 CustomComponent가 스크롤 막대를 표시 할 것입니다.

관련 문제