在我的应用程序中,如果调整了组件的大小,我将获取数据。我想延迟取回,直到用户完成调整大小操作。每次窗口大小调整时,将触发事件componentResized
。如何找出组件大小调整完成时的实例
回答
我会说你正在编写某种地图应用程序? :-)
您可以使用swing Timer类等待,直到指定的时间量没有任何事件发生。这里的代码:
/** Time to wait */
private final int DELAY = 1000;
/** Waiting timer */
private javax.swing.Timer waitingTimer;
/**
* Handle resize event.
*/
public void componentResized(ComponentEvent e)
{
if (this.waitingTimer==null)
{
/* Start waiting for DELAY to elapse. */
this.waitingTimer = new Timer(DELAY,this);
this.waitingTimer.start();
}
else
{
/* Event came too soon, swallow it by resetting the timer.. */
this.waitingTimer.restart();
}
}
/**
* Actual resize method
*/
public void applyResize()
{
//...
}
/**
* Handle waitingTimer event
*/
public void actionPerformed(ActionEvent ae)
{
/* Timer finished? */
if (ae.getSource()==this.waitingTimer)
{
/* Stop timer */
this.waitingTimer.stop();
this.waitingTimer = null;
/* Resize */
this.applyResize();
}
}
这是不可能的。但是您可以使用SingleWorkerThread来最小化处理事件的数量。
恐怕这不可能通过常规手段。每调用一次中型尺寸变化都会调用componentResized()
,并且无法确定当前调用是否是最后一次调用。
严格地说,你正在尝试的不是一件传统的事情。数据加载可能是昂贵的IO操作,并且当用户在更直接的UI操作(例如按下按钮)之后期望它们时通常是最佳的,当适当的反馈可以作为其行为的结果显示时。组件可以为无辜原因诸如帧改变的尺寸被最大化或布置为操作的结果别处,例如在Windows新的Aero操作7.
一些应用做执行IO作为结果的尺寸。例如,Google阅读器可以通过在浏览器窗口上移动滚动条来加载来自RSS提要的旧帖子。这是一个很好的功能,并且不需要显式加载按钮,但它是由用户寻找旧帖子直接驱动的;有意识的行动,而不是无意识的行动。
我想我的观点是,你需要非常小心你的工作方式。惩罚一个IO操作较慢的用户,使他们等待,因为他们敢于调整窗口大小,这不是一种用户友好的方法!
在你的问题中,你给出了关于你的用户界面是什么样子,或者什么是组件或者它如何调整大小的宝贵信息 - 甚至是你从哪里加载数据,因此很难回答。这里有几点建议:我希望他们帮助。
1.将数据装入内存事前,只是显示它
如果数据模型是不是太大了,你可以只是把它加载到内存中,并与每一个调整事件快速重绘。 Event-Dispatch-Thread会将调整大小的事件组合在一起,这样您的监听器就不会被请求所淹没。这对你来说可能不是首发,但值得一提。
2.渴望比你需要的第一个调整大小事件加载
加载更多的数据,然后拒绝或缓存你不使用的数据。如果你正在填充表或列表的行,这可能是更好的方法;表格数据通常是直接加载和解析的。
3.允许在合理的时间通过调整大小以停止
第一个resize事件开始以1秒的倒计时计时器。任何后续调整大小事件会重置1秒倒计时。在某一时刻,会有一个最终的调整大小事件,之后没有后续的调整大小事件重置倒计时,因此它可以过期。在这一点上,定时器会为你做好准备。
在我看来,三是最安全,最准确的方法。您可以通过可视化地指示数据在第一个调整大小事件中加载并调整计时器的倒数计时器来让应用程序感受到响应,从而获得应用程序的正确感受。
- 1. wpf调整大小完成
- 2. Cloudbees实例大小调整
- 3. 如何在调整JFrame大小时调整JFrame中的组件大小?
- 4. 调整窗口大小时调整组件大小
- 5. Flex组件 - 当调整大小时,调整所有内部组件的大小
- 6. 如何在调整JFrame大小时调整组件大小?使用空布局
- 7. 可调整大小的自动完成
- 8. 调整WebView实例的大小
- 9. 当调整大小事件完成时检测
- 10. AsyncImageView未完成调整大小
- 11. ExtJS 4 - 调整大小后调整大小后调整大小的内部组件不会调整大小resizeHandles
- 12. 如何在调整列大小时调整dxDataGrid的大小
- 13. 是否有任何实时元素大小调整的例子?
- 14. 调整组件大小
- 15. 窗口大小调整后重新调整大小的组件
- 16. 如何调整弹出组件的大小
- 17. Openstack实例磁盘大小调整
- 18. MFC如何知道视图的大小调整已完成
- 19. 如何在调整大小时调整画布大小?
- 20. 如何在调整窗口大小时调整图像大小?
- 21. Wordpress调整图像大小时如何缩小文件大小?
- 22. 插入JavaScript的jQuery的时候调整大小完成
- 23. 如何从AngularJS指令中调整ckEditor实例的大小?
- 24. 如何调整数组的大小C++
- 25. 实时调整图像的大小
- 26. 队列数组实现调整大小
- 27. 如何调整一个div的大小,当其邻近的div完成调整大小?
- 28. 在调整jQuery对话框大小时调整控件大小
- 29. 如何调整实际大小::图片
- 30. 如何找出JFrame的实际大小?
感谢您花时间写出详细的例子;这个解决方案似乎符合我的要求。 – 2009-10-07 06:34:55