1

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、ブラウザ内のアプレット、およびアプレットビューア内のアプレットで発生します。
4

1 に答える 1

2

望ましくない回避策が1つ見つかりました。私はそれがいくつかの創造的なジュースを動かすことを期待してそれを投稿します。回避策は、ウィンドウが非アクティブ化されたときに半透明をオフにし、アクティブ化されたときに再びオンにすることです。

d.addWindowListener(new WindowAdapter()
{
    public void windowActivated(WindowEvent e)
    {
        d.setBackground(new Color(0, 0, 0, 0));
    }

    public void windowDeactivated(WindowEvent e)
    {
        d.setBackground(Color.white);
    }
});

ウィンドウをクリックすると不透明になるため、これは理想的ではありません。ただし、ウィンドウ永久に消えるのを防ぎます。

于 2012-09-25T18:52:38.007 に答える