我正在尝试创建一个Vaadin应用程序,其中VerticalLayout
内部的网格占据了大部分屏幕(因此,小标题,大网格,小页脚)。很容易做到。
但是我想计算可用的浏览器区域的大小并将其划分为80x60像素块,因此不同的显示器将具有不同数量的GridLayout
单元格。即你的显示器越大,网格中的单元格越多。
我遇到的问题是,在init()
时间,我可以获得宽度和高度的WebBrowser
信息,我无法使用(并且在API)。我已经尝试了示例代码,但仍然有效地从init
调用'attach'。
我可以使用某种类型的监听器(不确定是哪种)来进行网格设置并为所有这些设置添加控件,但这对我来说听起来非常麻烦和麻烦。
所以,问题:
答案 0 :(得分:1)
备选方案1 :
WebBrowser browser = ((WebApplicationContext) getApplication().getContext()).getBrowser();
int width = browser.getScreenWidth();
int height = browser.getScreenHeight();
最佳方式:
getApplication().getMainWindow().addListener(new ResizeListener() {
@Override
public void windowResized(ResizeEvent e) {
System.out.printf("window info : %sx%s\n",
e.getWindow().getWidth(),
e.getWindow().getHeight()));
}
});
答案 1 :(得分:0)
制作Application
工具HttpServletRequestListener
,并按如下方式实施回调:
public void onRequestEnd(HttpServletRequest request,
HttpServletResponse response) {
WebBrowser browser = ((WebApplicationContext) getContext()).getBrowser();
int width = browser.getScreenWidth();
int height = browser.getScreenHeight();
if(width==0 || width==-1) return;
if(height==0 || height==-1) return;
System.out.println("Your browser window is "+width+" by "+height);