在GWT 2.3.0上使用GXT 2.2.5开发。
我正在处理的应用程序显示带有自动滚动条的可调整大小的窗口。我想确保窗口大小不超过它显示的浏览器窗口的大小。为此,我添加了以下代码:
addWindowListener(new WindowListener()
{
public void windowActivate(WindowEvent we)
{
super.windowActivate();
Window window = we.getWindow();
window.layout(true);
int width = window.getWidth();
int height = window.getHeight();
int maxWidth = XDOM.getViewportWidth();
int maxHeight = XDOM.getViewportHeight();
window.setSize(Math.min(width, maxWidth), Math.min(height, maxHeight));
window.center();
}
};
这可以管理窗口的大小,以便在打开窗口时非常适合浏览器。
我的问题是,如果用户随后调整浏览器窗口的大小,则打开的窗口不会调整并最终被裁剪。
有没有办法让我强制Window停留在浏览器的边界内,或者捕获resize事件以便我可以告诉Window相应地调整大小?
感谢。
答案 0 :(得分:0)
您需要将侦听器(实际处理程序 - 已弃用的侦听器)添加到浏览器窗口。
因此,如果您在不同时间显示几个不同的窗口,所有窗口都需要使用窗口调整大小,则需要为每个窗口设置一个监听器,并在显示窗口时将其添加到浏览器窗口。
要将监听器添加到浏览器窗口,请使用:
com.google.gwt.user.client.Window.addResizeHandler(handler);
例如,调整ContentPanel cp:
的大小com.google.gwt.event.logical.shared.ResizeHandler handler = new ResizeHandler() {
@Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {
cp.setWidth(event.getWidth());
cp.setHeight(event.getHeight());
}
};
那么如果您切换到新视图或ContentPanel,则需要注册...
com.google.gwt.user.client.Window.addResizeHandler(handler2);
com.google.gwt.event.logical.shared.ResizeHandler handler2 = new ResizeHandler() {
@Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {
cp2.setWidth(event.getWidth());
cp2.setHeight(event.getHeight());
}
};
注意: 你不能为你需要处理另一种方式的ResizeEvent做event.getWindow()。
实际上我倾向于在类似的构造函数中执行此操作:
com.google.gwt.event.logical.shared.ResizeHandler handler2;
public MyDialog(){
handler2 = new ResizeHandler() {
@Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {
setWidth(event.getWidth());
setHeight(event.getHeight());
}
};