слушатели мыши колеблются, будучи перехваченными дочерними компонентами
У меня есть свинг-компонент, который имеет несколько подкомпонентов. Что я хочу сделать, изменить некоторую метку, если указатель мыши находится над каким-либо из этих компонентов, а затем изменить ее на что-то другое, если мышь переместится от всех компонентов. Я пытаюсь найти более эффективный способ сделать это.
В настоящее время у меня есть слушатели мыши над всеми дочерними компонентами, которые выглядят примерно так:
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 в родительском контейнере, но поскольку дочерние компоненты перехватывают эти события, я не уверен, как это сделать ( не обязательно иметь контроль над дочерними компонентами, поэтому я не могу переслать события мыши на родительское событие, если бы захотел).