在您阅读之前,这里有一些关于问题的澄清:
new JDialog(someWindow)
。只需将 更改<{>> {<1}} ,就可以在SSCCE 中修复重影。为什么不让顶级窗口出现重影?
预期行为:[...]new JDialog()
(见SSCCE)
如您所见,右侧窗口具有半透明背景(如预期的那样)。
实际行为:final JDialog d = new JDialog()
(见SSCCE)
在这种情况下,右侧窗口具有不透明背景。事实上,由于任何原因(最容易重现,翻转时重绘)需要3-4次重绘,以使背景变得完全不透明。
SSCCE:
final JDialog d = new JDialog(f)
这些是我的问题......
答案 0 :(得分:1)
由于任何原因需要3-4次重绘(最容易重现的是翻转重绘),背景变得完全不透明。
查看Backgrounds With Transparency,可以让您对问题有所了解。
我从未玩过Synth,所以我不知道相同的解决方案是否有效。
答案 1 :(得分:0)
为什么顶级窗口没有出现重影?
根据Oracle(Java Tutorials):
每个顶级容器都有一个内容窗格,一般来说, 包含(直接或间接)可见组件 顶级容器的GUI。
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
玻璃窗格通常用于拦截顶层容器上发生的输入事件,也可用于绘制多个组件。它不允许透明度。
因此你如何使用
final Graphics g2 = g.create();
如果您在与自己创建图形对象相反的方法中覆盖 javax.swing.JComponent.paintComponent ,则应通过super.g();
来降低透明度。通过创建上面列出的图形
的单独方法来解决此问题