0

VerticalLayout画面の大部分を占めるグリッド(つまり、小さなヘッダー、大きなグリッド、小さなフッター)を内部に持つVaadinアプリケーションを作成しようとしています。簡単にできます。

しかし、使用可能なブラウザー領域のサイズを計算し、それを80x60ピクセルのブロックに分割したいので、ディスプレイが異なればGridLayoutセルの数も異なります。つまり、ディスプレイが大きいほど、グリッド内のセルが多くなります。

私が抱えている問題は、そのinit()時点で、WebBrowser幅と高さを取得できる情報が利用できないことです(APIでそう言っています)。サンプルコードを試しましたが、'attach'はまだinit効果的に呼び出されています。

ある種のリスナー(どちらかわからない)を使用してグリッドのセットアップを行い、それらすべてにコントロールを追加することはできますが、それは私には本当に厄介で面倒に聞こえます。

だから、質問:

  1. どのリスナーが適切でしょうか?
  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

implementを作成し、次のようにコールバックを実装しますApplicationHttpServletRequestListener

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 に答える