0

我正在尝试创建一个 Vaadin 应用程序,该应用程序在 a 内有一个网格,VerticalLayout它占据了大部分屏幕(因此,小页眉、大网格、小页脚)。很容易做到。

但我想计算可供我使用的浏览器区域的大小并将其划分为 80x60 像素块,因此不同的显示器会有不同数量的GridLayout单元格。即显示越大,网格中的单元格就越多。

我遇到的问题是,init()当时WebBrowser我无法获得宽度和高度的信息(API 中这样说)。我已经尝试了示例代码,但仍然init有效地从 'attach' 调用。

我可以使用某种监听器(不确定是哪个)来进行网格设置并为所有这些添加控件,但这对我来说听起来真的很混乱和麻烦。

所以,问题:

  1. 什么 Listener 合适?
  2. 难道没有一种简单的方法可以计算出可用的屏幕空间吗?
4

2 回答 2

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()));
    }
});
于 2012-05-31T09:41:52.033 回答
0

制作您的Applicationimplement 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);
于 2012-06-02T09:53:48.293 回答