我目前正在开发一个信息亭风格的 Java 程序来显示天气、时间、天气预报等。这是该程序的截图should看起来像(时间更新之前的截图)
各个部分均创建为 JPanel,其中包含paintComponent()
方法被重写。他们绘制渐变标题和半透明背景。但是,当我更改其中一个面板的内容时,以前的内容会被保留,而不是被删除。一个例子如下所示:
可以看到,当时间从 11:51 变为 11:52 时,数字重叠,背景变亮(因为在其上重新绘制了半透明背景)
图形错误
我应该做什么来防止这种重叠?最终,我希望当单个面板更新其内容时不必重新绘制整个屏幕。我宁愿只重画该特定部分。重新绘制背景以及其中的所有组件将很容易。
Update
几个答案涉及清理要绘制的区域。无论我使用g.clear()
or AlphaComposite.CLEAR
它会删除背景图像。这可以在下图中看到。也许如果我可以在清除该区域之前复制背景,我可以重新绘制背景的该部分,然后适当地对其他图像进行分层。想法?
Update 2
提交的答案显示了放置在透明面板和背景上的计时器的完整工作示例。这非常有用,但是,我不会手动绘制我的子组件。时间、天气图标和温度都是 JLabels 布局在半透明面板上。我不想手动绘制各个组件。
类似的问题
已解决here https://stackoverflow.com/questions/2163544/re-paint-on-translucent-frame-panel-component/2166500#2166500
另请注意,“Swing 程序应该覆盖paintComponent()
而不是覆盖paint()
."—在 AWT 和 Swing 中绘制:绘制方法 https://www.oracle.com/technetwork/java/index.html#callbacks.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)