Как работает приведение к классу, вы добавляете то, к чему хотите привести его, в скобках перед ним.
Возвращаемый результат приводится к тому, что заключено в скобки
// Simple casting, otherThing gets cast to Foo
var something = (Foo)otherThing;
// Whatever is returned by getThing() gets cast to Foo
var something = (Foo)otherThing.getThing();
// Whatever is returned by makeThing() gets cast to Foo
var something = (Foo)otherThing.getThing().makeThing();
Короче говоря, все, что вы захотите присвоить переменной в этом примере, будет приведено к тому, к чему вы хотите привести.
Итак, если мы разберем ваш код с помощью этой логики c:
(Stage)((Node)event.getScene().getWindow());
// assigning to individual variables.
Node window = (Node)event.getScene().getWindow();
Stage stage = (Stage)window;
То, что получает getWindow()
, возвращается на сцену. Это не логика c, которую вы хотите. Кроме того, вы упускаете важный шаг в вашем коде. Сначала вам нужно вызвать getSource()
для вашего объекта события.
event.getSource()
возвращает объект Node
(надеемся, что для пуленепробиваемости выполните проверку экземпляра перед приведением).
Объект Node
предоставляет вам доступ к необходимым методам.
final Node source = (Node)event.getSource();
final Stage stage = (Stage)source.getScene().getWindow();
Старайтесь назначать переменные своим типам при наведении на слои, чтобы помочь вам определить лог c и найти ошибки. Когда вы вкладываете в гнездо, это может стать беспорядком. Взгляните на работающую одну строку вашего кода при правильной реализации по сравнению с двумя выше. Какой из них яснее?:
(Stage)(((Node)event.getSource()).getScene().getWindow());