複数のサブコンポーネントを持つスイングコンポーネントがあります。マウスがそれらのコンポーネントのいずれかにある場合はラベルを変更し、マウスがすべてのコンポーネントから離れた場合は別のラベルに変更します。これを行うためのより効率的な方法を見つけようとしています。
現在、次のようなすべての子コンポーネントにマウス リスナーがあります。
class AMouseListener extends MouseAdapter {
private boolean mouseOver;
mouseEntered(MouseEvent e) { mouseOver = true; updateLabel(); }
mouseExited(MouseEvent e) { mouseOver = false; updateLabel(); }
void updateLabel() {
String text = "not-over-any-components";
// listeners are each of the listeners added to the child components
for ( AMouseListener listener :listeners ) {
if ( listener.mouseOver ) {
text = "over-a-component";
break;
}
}
}
}
これは機能しますが、親コンテナーで mouseEntered および mouseExited イベントのみを処理することでこれを処理するより良い方法があるはずだと思いますが、子コンポーネントがこれらのイベントをインターセプトするため、これを行う方法がわかりません (私は必ずしも子コンポーネントを制御できるとは限らないため、必要に応じてマウスイベントを親イベントに転送できません)。