2017-08-04 3 views
0

私はそこにコンポーネントを配置するJPanelを持っています。サブコンポーネント(ネストされたものまで)が再描画されるたびに通知を受ける必要があります。 JPanelにコンポーネントが追加されたときに登録できるイベントはありますか?JPanelの子コンポーネントのペイントイベントを検出するにはどうすればよいですか?

私の目的は、JPanelの右下と下端にスクロールバーを描画することですが、サブコンポーネントを再描画するとスクロールバーと重なり、スクロールバーの一部が見えなくなります。コンポーネントがそのビューを更新してスクロールバーの後ろにとどまるときにスクロールバーを再描画したい。

もう少し明確にするために、この2つはUIのスクリーンショットです。

When components overlay the scroll bar When scroll bar overlays the components

最初の画像が正しくありませんが、これは私がマウスを使ってコンポーネントを置く場合にのみ発生します。そうでなければ、それは良い見ている。右側の画像は、コンテナがロードされたときの画像です。私は、コンポーネントが常にスクロールバーの後ろに表示されるようにしたいが、特定のコンポーネントが再描画されたときは検出できない。私はSwingの自身の絵画のメカニズムの中に答えを見つけた。このような同様の問題に遭遇した人のために

+0

あなたはhttp://docs.oracle.com/javase/7/docs/api/java/awt/event/ComponentListener.htmlを参照してください 'ComponentListener'を追加することができます - 隠された、コンポーネントがリサイズされているときに、このリスナーが通知されます/示されて移動した –

+0

@MartinFrank真のマーティン。しかし、再塗装はそれらの出来事のいずれにも当てはまらない。私はそれを使って試しました。 – OmerHalit

+0

コンポーネントがスクロールペインのビューポートの内部にないのはどうですか? –

答えて

0

。コンテナの子からコンポーネントペイントイベントを受け取る場合は、isPaintingOrigin()メソッドをオーバーライドします。

@Override 
protected boolean isPaintingOrigin() { 
    return true; 
} 

これだけで十分で、ペイントイベントは基になるコンテナによって呼び出されます。

関連する問題