【问题标题】:Help needed in diagnosing a painting issue on alt-tab in Swing在 Swing 的 alt-tab 上诊断绘画问题所需的帮助
【发布时间】:2011-01-11 02:58:28
【问题描述】:

我已经研究了几个小时,但没有找到任何可以指导我的方法。我有一个在 SwingWorker 中执行一些后台处理的 Windows Swing GUI 程序。这还使用进度对话框让用户知道后台处理需要多长时间。

该系统的最初设计者决定禁用用户界面的鼠标和键盘输入,进度对话框上的“取消”按钮除外。他们通过使用忽略所有鼠标和键盘事件的玻璃窗格来做到这一点。

实际的问题是,如果发生用户 alt-tab 或屏幕保护程序,则玻璃窗格后面的用户界面永远不会重新绘制。进度对话框重绘,但这是由于 SwingWorker 定期调用重绘以更新进度。

我想知道下一步该去哪里找任何建议。我无法在 Java 中找到有关 alt-tab 重绘的任何内容。也许进度对话框根据定义是模态的,防止 EDT 重新绘制?或者玻璃板可能会阻止“隐藏”组件的重绘?

谢谢, 瑞恩

【问题讨论】:

  • 只需对您认为有帮助的答案进行投票;如果没有“最适合我的需求”,则无需接受。

标签: java windows swing windowlistener


【解决方案1】:

文章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

【讨论】:

    【解决方案2】:

    如果玻璃面板的 opaque 为真,重绘管理器将不会重绘下面的面板。这是一种性能优化。

    【讨论】:

    • 谢谢你,排除这个很有用。我现在发现我当前的问题是由于进度条是一个窃取 alt-tab 焦点的对话框。换句话说,这是由于 Swing UI 实际上没有比它替换的窗口更高的 Windows z-order。不过,不透明性检查涵盖了屏幕保护程序选项。
    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多