Похоже, отключение Node
означает, что мышь больше не считается находящейся в ее пределах. Это может быть немного натянуто, но я считаю, что это задокументировано свойством Node#disabled
:
Указывает, отключен этот Node
или нет. Node
станет отключенным, если для disable
установлено значение true
либо на самом себе, либо на одном из его предков в графе сцены.
Отключенный Node
должен отображать себя по-другому, указывая на его отключенное состояние. пользователю. Такой отключенный рендеринг зависит от реализации Node
. Классы фигур, содержащиеся в javafx.scene.shape
, не реализуют такую визуализацию по умолчанию, поэтому приложения, использующие фигуры для обработки ввода, должны сами реализовать соответствующую отключенную визуализацию. Однако элементы управления пользовательского интерфейса, определенные в javafx.scene.control
, будут реализовывать отображение, чувствительное к отключению.
Отключенный Node
не получает события мыши или клавиши. [выделение добавлено]
Я считаю, что при отключении Node
мышь «выходит» из-за того, что Node
больше не может получать события мыши. Это происходит независимо от того, двигаете ли вы мышью или нет. Затем ваш код реагирует на «выход» мыши, и вы включаете Node
. Однако, поскольку теперь включенный Node
снова имеет право получать события мыши, а также тот факт, что вы держали мышь в том же месте, мышь снова «входит» в Node
. Затем ваш код реагирует на то, что мышь «входит» в Node
, и снова его отключает, вызывая бесконечный цикл.
Я подозреваю, что нет способа обойти это поведение 1 .
При этом я нахожу желаемую цель странной. Что вы пытаетесь сказать пользователю, отключив Button
только при наведении на него курсора мыши? Кажется, это будет означать: « Давай, нажми эту кнопку… шучу! ». Это не похоже на приятный пользовательский опыт.
1. Поскольку отключенный узел не получает события мыши, можно утверждать, что это поведение является ошибкой. Однако остановка этого цикла не поможет вашему делу;перемещение мыши из вашей кнопки не вызовет событие выхода из мыши, независимо от того, было ли запущено событие «отключено при зависании» или нет. Я также склонен полагать, что это не ошибка.