2010-12-22 6 views

답변

1

DockLayoutPanel을 배치 할 때 "중심"이라는 UIBinder 표기법은 패널에 물리적으로 배치 된 위젯이 아니라 위젯이 사용하지 않는 포함 된 패널의 모든 공간을 차지하는 가운데 위젯을 참조한다는 점에 유의하십시오 양쪽. 나는. 다음 레이아웃에서 위젯 C는 컨테이너의 오른쪽으로 끝까지 흘러가도 "중앙"패널입니다.

<g:DockLayoutPanel> 
    <g:north><g:Label>A</g:Label></g:north> 
    <g:west><g:Label>B</g:Label></g:north> 
    <g:center><g:Label>C</g:Label></g:center> 
    <g:south><g:Label>D</g:Label></g:south> 
</g:DockLayoutPanel> 

---------------- 
|  A  | 
---------------- 
|B| C  | 
---------------- 
|  D  | 
---------------- 

당신이 패널의 모든 수직 및 수평 공간을 사용하는 것 DockLayoutPanel에 하나의 아이 "센터"위젯을 추가한다면 -이 중심되지 않습니다.

당신은 LayoutPanel를 사용하여 내가 제안 절대 위치 레이아웃 패널 중 하나를 사용하여 물리적 중심을 달성하고자하는 경우

당신이 가정을하지 않는 한 문제는 창 크기를 조정할 수 없습니다되는 것을
LayoutPanel panel = new LayoutPanel(); 
MyWidget myWidget = new MyWidget(); 
panel.add(myWidget); 

// Note that this assumes that both widgets are attached and have meaningful 
// sizes - use the RequiresResize interface to get notification of when the 
// positioning of myWidget needs change. Note also that if panel or myWidget 
// have any decoration that modifies its offsetWidth (margin, border, padding) 
// that will need to be taken into account to correctly center myWidget. 
int top = panel.getOffsetHeight() - (myWidget.getOffsetHeight()/2); 
int left = panel.getOffsetWidth() - (myWidget.getOffsetWidth()/2); 
panel.setWidgetTopHeight(myWidget, top, Unit.PX, myWidget.getOffsetHeight(), Unit.PX); 
panel.setWidgetLeftWidth(myWidget, left, Unit.PX, myWidget.getOffsetWidth(), Unit.px); 
+0

저는 uiBinder를 사용하고 싶지 않습니다. LayoutPanel을 사용해 보겠습니다. – Sunil

0

이 아니다 WindowResizeHandler가없는 LayoutPanel에서이 문제를 해결할 수는 있지만 테이블로 쉽게 해결할 수 있습니다.

DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Unit.EM); 
// some code here 
Button button = new Button("center"); 
FlexTable wrapper = new FlexTable(); 
wrapper.setSize("100%", "100%"); 
wrapper.setWidget(0, 0, button); 
wrapper.getFlexCellFormatter().setVerticalAlignment(0, 0, HasVerticalAlignment.ALIGN_MIDDLE); 
wrapper.getFlexCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER); 
dockLayoutPanel.add(wrapper); 
+0

절대 위치 기반 LayoutPanels를 사용할 때 RequiresResize 및 ProvidesResize 인터페이스를 사용하는 경우 창 크기 조정을 처리하는 기본 방법이 좋습니다. –

+0

동의했다. 이것은 또한 좋은 해결책이지만, DOM 레이아웃 관리자가 대신 프로그래밍 할 필요가 없다. 어느 방법이 더 효율적인지 알아보기 위해 벤치마킹을 해본 적이 없지만 무시할 만하다고 가정 할 수 있다고 생각합니다. – LINEMAN78

관련 문제