【发布时间】:2012-09-25 18:52:38
【问题描述】:
Java 7 中的window translucency functionality 似乎存在错误(我相信 Java 6 中也存在该问题)。如果我打开一个半透明窗口然后最小化它的父窗口,两者都会像你期望的那样消失。但是,当您恢复父窗口时,半透明窗口永远不会重新出现。但是,它仍然存在并且会消耗输入,就好像没有任何问题一样。
这是我的 SSCCE:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BrokenTranslucentWindow extends JApplet //same problem exists using a JFrame
{
public BrokenTranslucentWindow()
{
JButton b = new JButton("Hello");
b.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
JDialog d = new JDialog(Window.getWindows()[0])
{
@Override
public void paint(Graphics g)
{
g.fillOval(0, 0, getWidth(), getHeight());
}
};
d.setUndecorated(true);
d.setBackground(new Color(0, 0, 0, 0));
d.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
d.setSize(300, 300);
d.setLocationRelativeTo(null);
// d.setModal(true);
d.setVisible(true);
}
});
this.add(b);
}
}
您会注意到,在您恢复父窗口后,半透明的椭圆形窗口将不可见,但当您在窗口应位于的区域上方时,您的光标仍会变为手形光标。
我已经提交了bug to Oracle,但在它修复之前我真的可以使用更好的解决方法。
我的问题:
是否有人对防止这种情况发生的解决方法有任何想法?
趣闻:
- 如果半透明窗口恰好是模态的,这会导致很大的问题。
- 我关注的是每像素半透明度,但同样适用于均匀半透明度。
- JFrame、浏览器中的 Applet 以及 Applet 查看器中的 Applet 都会出现此问题。
【问题讨论】:
标签: java swing java-7 windowlistener translucency