我有一个窗口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);
}
答案 0 :(得分:1)
浏览器不传递在页面外发生的事件,窗口调整大小计为页面外部。也就是说,您仍然可以获得整个浏览器窗口调整大小操作的挂钩:
Window.addResizeHandler(new ResizeHandler() {
public void onResize(ResizeEvent event) {
//get, process window resize behavior
}
});
对于某些浏览器和一些调整大小,当鼠标移动时,您将获得大量事件,而对于其他浏览器,您将只获得完整的事件。例如,在firefox中,角落中的调整大小句柄会发送所做的每一个更改,而侧面处理每个更改仅在用户释放鼠标时发送。最小化和最大化窗口也会导致单个事件。
答案 1 :(得分: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);
}
});
就是这样