1

私は窓を持っていますresizeHandler、それはうまく働いています。ウィンドウの最終的な寸法だけに関心があることを除いて、つまり、マウスボタンを離したときのウィンドウの寸法に関心があります。ウィンドウマウスイベントを聞く方法はありますか?

私は自分の目標を達成するコードを書きましたが、もっと明白なものが欲しいです。resizeRequestIdフィールドです:

private void processResize() {

    final Timer timer = new Timer() {
    final Size windowSize = getWindowDimention();

    final int requestId = ++resizeRequestId;

    @Override
        public void run() {
            final boolean isLatestRequest = requestId == resizeRequestId;
        if (isLatestRequest) {
                //DO SOMETHING WITH windowSize
            }
        }
    };
    timer.schedule(100);
}
4

2 に答える 2

1

ブラウザはページ外で発生したイベントを渡さず、ウィンドウのサイズ変更はページ外としてカウントされます。とはいえ、ブラウザ ウィンドウ全体のサイズ変更アクションのフックは引き続き取得できます。

Window.addResizeHandler(new ResizeHandler() {
  public void onResize(ResizeEvent event) {
    //get, process window resize behavior
  }
});

一部のブラウザーとサイズ変更では、マウスの移動に応じて多数のイベントが取得されますが、他のブラウザーでは完全なイベントのみが取得されます。たとえば、Firefox では、隅にあるサイズ変更ハンドルは、行われたすべての変更を送信しますが、側面は、ユーザーがマウスを離したときにのみ各送信を処理します。ウィンドウの最小化と最大化も 1 つのイベントになります。

于 2013-01-17T19:07:02.687 に答える
0

コリンは正しいです。

さらに、「サイズ変更時に」多くの計算を行う場合 (forceLayout など)、Timer を追加することをお勧めします。このようにして、計算は10秒ごとに1回実行されますか?

final Timer resizeTimer = new Timer() {
    @Override
    public void run() {
        mainPanel.forceLayout();
    }
};
Window.addResizeHandler(new ResizeHandler() {
    public void onResize(ResizeEvent event) {
        int height = event.getHeight();
        mainPanel.setHeight(height + "px");
        resizeTimer.cancel();
        resizeTimer.schedule(100);
    }
});

それでおしまい

于 2013-01-18T13:42:06.880 に答える