Java 确定可用的Vaadin屏幕空间和网格布局
我正在尝试创建一个Vaadin应用程序,它在占据大部分屏幕的垂直布局中有一个网格(小页眉、大网格、小页脚)。很容易做到 但是我想计算我可用的浏览器区域的大小,并将其划分为80x60像素块,这样不同的显示器将具有不同数量的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” 我可以使用某
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没有太多的运气。实际上,这只适用于在我点击浏览器上的“刷新”后设置组件的大小。现在只需要弄清楚如何刷新客户端。