Gwt 在DockLayoutPanel中居中小部件

Gwt 在DockLayoutPanel中居中小部件,gwt,Gwt,我试图在DockLayoutPanel中放置一个小部件(复合),我希望它位于 居中(垂直和水平)。不使用uibinder。如何做到这一点?请注意,在布置DockLayoutPanel时,UIBinder的“中心”符号并不是指面板中物理居中的小部件,而是指占据包含面板中所有空间的中心小部件,而不是添加到侧面的小部件。也就是说,在下面的布局中,小部件C是“中心”面板,即使它一直流向其容器的右侧 <g:DockLayoutPanel> <g:north><g:Labe

我试图在DockLayoutPanel中放置一个小部件(复合),我希望它位于
居中(垂直和水平)。不使用uibinder。如何做到这一点?

请注意,在布置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       |
----------------

问题在于,除非假设窗口不会调整大小,否则在没有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);

使用基于绝对定位的LayoutPanels时,处理窗口大小调整的首选方法是使用RequiresResize和ProvidesResize接口。同意,这也是一个很好的解决方案,但它要求您以编程方式执行,而不是让DOM布局管理器为您执行。我还没有做过任何基准测试来确定哪种方法更有效,但我认为您可能会认为它可以忽略不计。我不想使用uiBinder。。我将尝试使用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);