3

私は自分が書いているゲームにJava2Dを使用していますが、他のスイングコンポーネントとの統合を開始するまで、Java2Dの使用に問題はありませんでした。私の問題は、JFrameに追加する最初のコンポーネントが描画先のキャンバスではない場合、テキストペインのスクロールバーにマウスを合わせると奇妙なアーティファクトが表示されることです。アプリケーションを実行するたびに発生します。私が最初にキャンバスを持っているとき、問題はありません。

何らかの理由で、これはデフォルトのJava2Dパイプラインが使用されている場合(sun.java2d.d3d = true)にWindowsでのみ発生するように見え、アーティファクトが発生します。sun.java2d.opengl=trueまたはsun.java2d.noddraw=falseおよびsun.java2d.d3d=falseを設定すると、発生しません。

これはDirect3DJava2Dパイプラインのある種のバグだと思いますか?私はそれを簡単に回避できますが、他の誰かがそのような問題に遭遇したかどうか知りたいですか?最新のJDK7u7を実行していますが、以前のバージョンでも発生します。ウィンドウを最小化して復元すると、アーティファクトは消えて、アプリケーションを再起動するまで戻らないことに注意してください。

アーティファクトあり: 悪い

アーティファクトなし(JLabelイメージの代わりに最初にキャンバスを追加した後): 良い

誰かがこれについてさらに情報を持っているなら、私はそれをいただければ幸いです。ありがとう!

4

1 に答える 1

5

これは、不透明度プロパティを尊重しないことによるよく知られたアーティファクトです。「Swingプログラムはオーバーライド paintComponent()するのではなくオーバーライドする必要がある」ため、実装ではpaint()必ず最初に呼び出すようにしてください。ここここsuper.paintComponent()に関連する例があります。

補遺:「重量成分と軽量成分の混合」も参照してください。

于 2012-10-12T01:57:46.750 に答える