GWT:在SplitLayoutPanel中执行onResize()时如何获得新大小?
我有一个SplitLayoutPanel,其中一个子组件是FlowPanel。我已经扩展了FlowPanel来创建一个可调整大小的FlowPanel,它实现了ProvidesResize和RequiresResize,因为FlowPanel有子组件也需要调整大小 拖动SplitLayoutPanel的拆分器时,如何获得子组件的新大小?我尝试在FlowPanel中使用GWT:在SplitLayoutPanel中执行onResize()时如何获得新大小?,gwt,Gwt,我有一个SplitLayoutPanel,其中一个子组件是FlowPanel。我已经扩展了FlowPanel来创建一个可调整大小的FlowPanel,它实现了ProvidesResize和RequiresResize,因为FlowPanel有子组件也需要调整大小 拖动SplitLayoutPanel的拆分器时,如何获得子组件的新大小?我尝试在FlowPanel中使用getOffsetWidth()和getElement()。getOffsetWidth,两者都返回原始大小,而不是新大小 我做错了
getOffsetWidth()
和getElement()。getOffsetWidth
,两者都返回原始大小,而不是新大小
我做错了什么
下面是我正在尝试的FlowPanel子类:
class ResizableFlowPanel extends FlowPanel implements ProvidesResize, RequiresResize {
ResizableFlowPanel() {
super();
}
public void onResize() {
int li_width = this.getOffsetWidth();
int li_height = this.getOffsetHeight();
System.out.println("ResizableFlowPanel:: width : " + li_width + "; height: " + li_height);
for (Widget child : getChildren()) {
if (child instanceof RequiresResize) {
((RequiresResize) child).onResize();
}
}
}
}
我只是添加了System.out,以便在移动拆分器时观察日志中的值,而不是使用断点。这就是我如何验证GetOffsetSight()继续返回原始大小的方法
这还验证是否正在为FlowPanel以及子面板调用onResize()。我还尝试在FlowPanel中添加边框,以查看在拖动SplitLayoutPanel的拆分器时边框是否发生了变化,而边框没有发生变化
因此,这可以重新表述为,为什么实现RequiresResize的SplitLayoutPanel的子级实际上没有被调整大小?或者为什么onResize()不传入新的宽度和高度?我注意到获取小部件的实际宽度可能需要一些时间。(浏览器可能尚未完成所有布局工作。) 因此,您可能需要在onResize()方法中设置计时器: 或使用延迟计划程序:
public void onResize() {
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
int width = ResizeContainer.this.getOffsetWidth();
}
});
}
但是我在没有定时器或调度程序的情况下尝试了你的代码,它工作正常,因此可能是浏览器或gwt版本相关的问题。。。我使用GWT 2.1.1和Firefox 3.6.12。我通常在小部件附加到文档后覆盖小部件#onLoad()来执行大小计算:
public void onResize() {
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
@Override
public void execute() {
int width = ResizeContainer.this.getOffsetWidth();
}
});
}