我目前正在开发一个kiosk风格的Java程序来显示天气、时间、天气预报等。下面是这个程序应该是什么样子的截图(截图是在更新之前拍摄的)。

各个部分被创建为JPanels,paintComponent()方法被重写。他们画一个渐变头和半透明的背景。但是,当我更改其中一个面板的内容时,先前的内容将被抛在后面,而不是被删除。下面是一个例子:
如你所见,当时间从11:51改为11:52时,数字重叠,背景变浅(因为半透明的背景被重画在上面)。
图形误差

我应该做些什么来防止这种重叠?最终,当单个面板更新其内容时,我希望不必重新绘制整个屏幕。我宁愿只重画那一节。很容易重新绘制背景,然后重新绘制内部的所有组件。
更新
有几个答案涉及清理要绘制的区域。无论我使用g.clear()还是AlphaComposite.CLEAR,它都会擦除背景图像。在下面的图片中可以看到这一点。也许,如果我能在清除区域之前复制背景,我可以重新绘制该区域的背景,然后适当地对其他图像进行分层。有什么想法?

更新2
提交了一个答复,其中显示了在透明面板和背景上放置计时器的完整工作示例。这是非常有用的,但是,我不是手动绘制我的子组件。时间、天气图标和温度都是在半透明面板上布置的JLabels。我希望不必手动绘制各个组件。
发布于 2012-07-27 17:27:55
类似的问题

地址为这里

还要注意,"Swing程序应该覆盖paintComponent()而不是覆盖paint().“-https://www.oracle.com/technetwork/java/index.html#callbacks。
https://stackoverflow.com/questions/11691496
复制相似问题