2017-03-14 8 views
2

私は.getGraphics()。のdrawImage(..)JMenuには、画像が描かれたJPanelの上の灰色のボックスを残し

を使用してJPanelの上でいくつかの幾何学的なオブジェクトを描画する私のプログラムのためのメニューを作成しようとしています私が抱えている問題は、このメニューの項目を選択すると、テキストが消えますが、背景色は消えてしまうことです。セレクションは、上記のコマンドを使用してこのパネル上のイメージを再描画するメソッドを返しますが、明らかにそれを削除するのには役立ちません。

このメニュー項目をクリックすると、メニューの後ろにこの灰色のボックスが残っています。メニュー項目をクリックした後も基本的に同じ方法を呼び出すマウスを使用してシーンを移動すると消えます。これは、メニュー項目のメソッド呼び出しがボックスを削除しない理由について私を混乱させますが、このメソッドの次の呼び出しはボックスを削除しません。

これはなぜ起こっているのですか、それともどのように修正するのですか?

ありがとうございます。

画像(A、BがJMenuBarでJMenusであり、以下灰色のボックスはJRadioButtonMenuItem選択後に残っている): A, B are JMenus on JMenuBar and the gray box below is left after JRadioButtonMenuItem selection

+0

私の推測では、パネルが消滅したことを検出したときにパネルが再描画するのをブロックしています。しかし、私はコードを見ずにはわかりません。 –

+0

パネルで手動で設定するのはsetPreferredSize()だけです。 (違いがあれば、すべてのコンポーネントがJFrameにあります) – EyfI

答えて

2

.getGraphicsを用いてJPanelの上にいくつかの幾何学的なオブジェクトを描画()のdrawImage(。。 )

カスタムペイントを行うにはgetGraphics()を使用しないでください。

JPanelpaintComponent(...)メソッドをオーバーライドしてカスタムペインティングを行います。そして、最初の文としてsuper.paintComponent(...)を呼び出すことを忘れないでください。

詳細と動作例については、Custom PaintingのSwingチュートリアルのセクションをお読みください。

+0

グレーボックスの問題を解決しました。ありがとうございました。しかし、今度は画像を再描画すると、再描画ごとにちらつきが発生します。 – EyfI

+0

@ EyfI、さらに問題がある場合は、問題を示す適切な[mcve]を含む別の質問をしてください。 MCVEを作成しているときに問題が見つかる可能性があります。このチュートリアルのポイントは、チュートリアルを読んで実際のサンプルをダウンロードし、カスタムペイントをコーディングする適切な方法を学ぶことです。チュートリアルのコードに従ってください。また、「メニューの使い方」のチュートリアルもあります。 – camickr

関連する問題