如何将 LayoutPanel 放置在父 LayoutPanel 的中间中心(RootLayoutPanel、屏幕、浏览器页面)?假设内面板是固定大小的,外面板是灵活的并且会调整大小(使用浏览器窗口)。
在 Vaadin 中,它是一行命令:
(VerticalLayout)outerPane).setComponentAlignment(innerPane,
Alignment.MIDDLE_CENTER);
什么是 GWT 等价物?
GWT Layout.Alignment 枚举仅提供 BEGIN END STRETCH。
不足。屏幕居中放置对于显示较小的表单、对话框、警告消息、登录屏幕等至关重要。
我在 GWT 论坛上的帖子的详细信息
谢谢
--- 更新 (27.2.2012) ---------------
要使用建议的技术 - 使用 setWidgetLeftRight() 和 setWidgetTopBottom() - 我实际上需要计算内部组件相对于外部组件的 NW 位置 (x,y),并在每次调整外部容器或内部容器的大小后执行此操作(内容高度) .
因此,如果 GWT 不支持居中,并且似乎即使在最新版本中也不支持,则涉及更多编码:
outerComponent.setWidgetLeftRight(innerComponent, x, PX, x, PX);
outerComponent.setWidgetTopBottom(innerComponent, y, PX, y, PX);
x,y 要计算为:
x = (w1 – w2) / 2
y = (h1 – h2) / 2
其中:
w1 - 外部组件宽度(可变,容易获得?)
h1 - 外部组件高度(可变,容易获得?)
w2 - 内部居中组件宽度(固定)
h2 - 内部居中组件高度(可变,取决于内容,可能难以获得)
所有最好以像素(PX?)或EM为单位。当与 % 混合时,必须进行更多的转化。
随着每个调整大小事件的发生,必须重新计算坐标(w1,h1 更改)。
随着内部内容的每次更改,都必须重新计算坐标(h2 更改)。
它几乎是变相的绝对布局(AbsolutePanel)。
CSS解决方案?我在此服务器上找到了几个示例,但没有一个标记为已解决。没有垂直和水平居中以及灵活的内部组件高度。
为什么我不喜欢基于 CSS 的布局解决方案:
- 容易跨浏览器问题。GWT 在这里帮不了你。
- 我认为在代码和 CSS 中混合布局是一个糟糕的设计决定。CSS 最好留给“装饰性”声明(字体大小和颜色、边距、填充)。
- 我自己对 CSS 布局的糟糕体验;容易破解,难以调试,在你把所有东西放在一起之前有很多麻烦。最好避免。我对 GWT 寄予厚望。
我正在考虑这个基于代码的解决方案:
- Widget 的新子类?控制板?布局?零件?(内部组件)
- 实现 RequiresResize 期望,实现 onResize() 回调方法
- 获得可变尺寸(w1,h1,h2)的实际值。如何?
- 为内部组件设置新坐标。如何?
指向基于这些前提提供解决方案的任何人:)