Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定可用的Vaadin屏幕空间和网格布局_Java_Awt_Vaadin_Layout Manager_Grid Layout - Fatal编程技术网

Java 确定可用的Vaadin屏幕空间和网格布局

Java 确定可用的Vaadin屏幕空间和网格布局,java,awt,vaadin,layout-manager,grid-layout,Java,Awt,Vaadin,Layout Manager,Grid Layout,我正在尝试创建一个Vaadin应用程序,它在占据大部分屏幕的垂直布局中有一个网格(小页眉、大网格、小页脚)。很容易做到 但是我想计算我可用的浏览器区域的大小,并将其划分为80x60像素块,这样不同的显示器将具有不同数量的GridLayout单元格。i、 e.显示器越大,网格中的单元格就越多 我遇到的问题是,在init()时间,我可以从中获取宽度和高度的WebBrowser信息对我来说是不可用的(API中也这样说)。我已经尝试了示例代码,但是仍然从init有效地调用了“attach” 我可以使用某

我正在尝试创建一个Vaadin应用程序,它在占据大部分屏幕的垂直布局中有一个网格(小页眉、大网格、小页脚)。很容易做到

但是我想计算我可用的浏览器区域的大小,并将其划分为80x60像素块,这样不同的显示器将具有不同数量的
GridLayout
单元格。i、 e.显示器越大,网格中的单元格就越多

我遇到的问题是,在
init()
时间,我可以从中获取宽度和高度的
WebBrowser
信息对我来说是不可用的(API中也这样说)。我已经尝试了示例代码,但是仍然从
init
有效地调用了“attach”

我可以使用某种监听器(不确定是哪种)来进行网格设置和添加控件,但对我来说,这听起来非常混乱和麻烦

因此,问题是:

  • 什么样的听众才是合适的
  • 难道没有一种简单的方法可以计算出可用的屏幕空间吗

  • 备选方案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()));
        }
    });
    

    让您的
    应用程序
    实现
    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);
    

    谢谢,但它是否总是保证在应用程序启动时(无论浏览器窗口是否调整大小)会发生调整大小事件?还是取决于您使用的浏览器?这是一个好问题。可能您必须在代码的不同部分使用这两个选项。顺便说一句,当(宽度%80!=0 | |高度%60!=0)时,您将如何处理此问题?如果我正确理解您的问题。。。将网格的大小设置为可以容纳的单元格数量的倍数,并将其置于显示器的中心(毫无疑问,网格边缘会有一点“剩余”)。这样你就得到了一个标准的网格空间——不管怎么说,这是理论,我对Vaadin没有太多的运气。实际上,这只适用于在我点击浏览器上的“刷新”后设置组件的大小。现在只需要弄清楚如何刷新客户端。