

JFrameを透明にした状態でJTextAreaに日本語入力するとフレームが白くなります。  
１度白くなると再表示しない限り白いままです。どなたかこの現象の回避方法知りませんか？

[code]

    public static void main (String[] args) {
        JFrame frame =new JFrame();
        frame.setSize(670,500);
        frame.setLocation(600,420);
        frame.setUndecorated(true);                             
        frame.setBackground(new Color(0x00000000, true));       
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    
        JTextArea text=new JTextArea();
        text.setBackground(Color.RED);
        text.setBounds(85, 120, 265, 240);
    
        JPanel panel = new JPanel();
        panel.setOpaque(false);
        panel.setLayout(null);
        panel.add(text);
        Container content = frame.getContentPane();
        content.add(panel);
        frame.setVisible(true);
    }
    
[/code]

環境：windows7 java8


CC BY-SA 3.0
2018-03-16T09:57:58.030
42439
2019-02-13T02:02:30.503
2018-03-16T10:11:56.283
27772
27772
question
java
透明なJFrameに日本語入力すると背景が白くなります。


本家SOに類似質問と[回答](https://stackoverflow.com/a/15866690/8248751)がありました。

その回答によるとSwingにおけるDirectDrawパイプラインのバグに起因する現象のようです。  
DirectDrawレンダリングを無効化することで、質問の現象を回避できました。

[code]

    public static void main (String[] args) {
        System.setProperty("sun.java2d.noddraw", "true"); //この行を追加
        JFrame frame = new JFrame(); //以下同じ
        //省略
    }
    
[/code]

上記は手っ取り早い解決方法です。  
個別の`JTextArea`に対してDirectDrawを無効化したい場合は、`JTextArea`を継承して`paintComponent`をオーバーライドするコードが本家SOの回答を参照してください。


CC BY-SA 3.0
2018-04-21T00:00:28.137
43444
2018-04-21T00:00:28.137
9820
42439
answer