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