我一直在研究这几个小时,但没有找到任何指导我的方法。我有一个Windows Swing GUI程序,它在SwingWorker中执行一些后台处理。这也使用进度对话框让用户知道后台处理需要多长时间。
该系统的原始设计者决定禁用用户界面的鼠标和键盘输入,但进度对话框中的“取消”按钮除外。他们通过使用忽略所有鼠标和键盘事件的玻璃板来做到这一点。
实际问题是,如果用户使用alt-tabs或屏幕保护程序,则glasspane后面的用户界面永远不会重新绘制。进度对话框重新绘制,但这是由于SwingWorker定期调用重新绘制以更新进度。
我想建议下一步去哪看。在Java中,我无法在alt-tab重绘上找到任何东西。也许进度对话框是模态定义的,阻止了EDT的重新绘制?或者玻璃窗可能会阻止“隐藏”组件的重新涂抹?
谢谢, 莱恩
答案 0 :(得分:2)
文章How to Write Window Listeners涵盖了此主题。使用此example,您应该在每个alt-tab事件上看到一对窗口事件,类似于:
java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] on One java.awt.event.WindowEvent[WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0] on One java.awt.event.WindowEvent[WINDOW_ACTIVATED,opposite=null,oldState=0,newState=0] on One java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on One
答案 1 :(得分:1)
如果玻璃窗格的opaque为true,则重绘管理器不会重绘下面的面板。这是性能优化。