2011-03-08 8 views
1

JWindowの背景を完全に透明に設定しました。次に、paint-Methodに丸みのある四角形(RGB:0,0,0,100)を塗り、JLabelをJWindows ContentPaneに追加しました。しかし、JLindowを更新するためにJWindowを再描画しようとすると、古いRectangleとJLabelの古い値は削除されません。その結果、私のカスタムツールチップボックス(必要なもの)は透明性が低くなり、JLabelsの内容を読み取ることができなくなります。なぜなら、古いコンティニューをオーバーレイするからです。JLabel over transparent painted Rectangle?

この問題を解決する方法はありますか?

私は再ペイントしないと、あまり透明ではありませんが、私のJLabelの新しい内容は、再ペイントしたときのように、古い内容をオーバーレイします。

答えて

1

最初にpaintの代わりにpaintComponentを上書きし、super.paintComponent(g)に電話する必要があります。最後のレイヤーのコンポーネントは古い内容を消去するため、JWindowを不透明にしておく必要があります。すべてのレイヤーが透明な場合は、画面のゴミで終了します。

painting with Swingを参照してください。おそらくtranslucent windowsを作成したかったでしょうか?

+0

はい、半透明のウィンドウを作成したいのですが、Mac OS 10.6.6では動作しません。 – esanits

+0

JWindowには 'paintComponent(Graphics g)'はありませんが、 'paintComponents(Graphics g)'があります。しかし、私はそれを上書きすると何も塗りつぶされませんか? – esanits

+0

私はコンテンツペインが 'JPanel'だと思うので、独自のカスタムJPanelにコンテンツペイントを設定し、' paintComponent() 'をオーバーライドすることができます。 「Mac OSで半透明のウィンドウを作成するにはどうしたらいいですか?間違いなくIMOに質問する価値があります。 –