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 中,角落的调整大小手柄会发送所做的所有更改,而侧面的手柄只会在用户释放鼠标时发送。最小化和最大化窗口也会导致单个事件。

于 2013-01-17T19:07:02.687 回答
0

科林是对的。

此外,如果您在“调整大小”(例如 forceLayout)上进行大量计算,最好添加一个 Timer。这样计算将每……10秒触发一次?

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 回答