2017-11-29 6 views
0

Swingコンポーネントが完全に表示され、一部

--> rootFrame 
    --> panelA 
    --> panelA1 
    --> panelB 
    --> panelB1 
    --> panelB2 

panelB1外部要因に応じていくつかの点で見えるようになる可能性があり、次のツリーを検討して、より高いzオーダーで別のコンポーネントによってクリップされていないかどうかを決定する方法。その場合、panelB1(または実際に他のパネル)がpanelA1の一部または全部をオーバーラップしているかどうかをpanelA1で知りたい。

私はそうする方法を見つけることができません。 panelA1のペイントでは、グラフィックスオブジェクトのクリップ境界を取得できましたが、コンポーネントが重なったときにペイントは呼び出されません。

A)Swingのコンポーネントがユーザーに完全に表示されているかどうかを判断し、B)これが変更された場合に通知を受け取る方法はありますか?

+0

'paintComponents'?追加/削除のための階層リスナーもあります。複雑な音。 –

+1

どのような外的要因がありますか?これがあなたのプログラムです。コンポーネントが表示されるかどうかは、ユーザーが制御できます。または、コンポーネントがドラッグされていると制御できます。つまり、コンポーネントが表示されたりドラッグされたりすると、そのコンポーネントが他のコンポーネントをカバーしているかどうかを確認するロジックを追加します。 – camickr

+0

@camickrこのアプリケーションは、大きな(組み込みの)システムの一部であり、数千行のコードと、組み込み機器の人間のやり取りに応じてある時点で表示される何百ものコンポーネントからなるアプリケーションです。私は、新しいコンポーネントを作成する将来の開発者に、可視性について知りたいコンポーネントが1つあることを知るよう強制したくありません。私はその論理を一般的な方法で特定のコンポーネントにプッシュすることが望ましいです。 –

答えて

0

コンポーネントがその上に塗りつぶされているかどうかをコンポーネントが知る方法はわかりません。

私が考えることができると思うのは、AWTEventListenerです。イベントを聴いて、コンポーネントが表示または移動されたかどうかを判断できます。

これらのイベントのいずれかが生成されるときは、このコンポーネントの境界が気になるコンポーネントの境界と交差するかどうかをチェックします。

詳細についてはGlobal Event Listenersをご覧ください。

関連する問題