Java 7のウィンドウの半透明機能にバグがあるようです(問題は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);
}
}
親ウィンドウを復元した後、半透明の卵円窓は表示されませんが、ウィンドウがあるべき領域にカーソルを合わせると、カーソルがハンドカーソルに変わります。
バグをOracleに送信しましたが、修正されるまでは、より適切な回避策を使用できます。
私の質問:
これを防ぐための回避策について誰かがアイデアを持っていますか?
おもしろ情報:
- 半透明のウィンドウがたまたまモーダルである場合、これは大きな問題を引き起こします。
- 私はピクセルごとの半透明性に焦点を当てていますが、同じことが均一な半透明性にも当てはまります。
- この問題は、JFrame、ブラウザ内のアプレット、およびアプレットビューア内のアプレットで発生します。