Я не могу переместить объект прямоугольника в JavaFX. Я поместил прямоугольник внутри стека, но всякий раз, когда я меняю координаты прямоугольника, он не будет двигаться (даже если я изменил координаты инициализации). Так,
Rectangle rect = new Rectangle(150,150,75,75);
будет находиться в центре стека, а также
Rectangle rect = new Rectangle(2043,136,75,75);
Всякий раз, когда я использую
rect.setX();
Прямоугольник вообще не перемещается. Я знаю, что мне не хватает чего-то очень простого, я просто не могу понять. Я не хочу использовать переход, потому что моя цель - просто переместить прямоугольник на несколько пикселей в направлении нажатия клавиши со стрелкой. Так что же я делаю неправильно?
Решение
Используйте другой тип контейнера (например, панель), если вы хотите вручную указать координаты компоновки (например, координаты x, y прямоугольника).
Задний план
StackPane - это панель управляемых макетов - она управляет расположением элементов, которые вы размещаете в ней (по умолчанию центрируете элементы в стеке). Поэтому не имеет значения, какие координаты вы дадите Rectangle, когда вы поместите его в StackPane, менеджер макета переместит ваш прямоугольник так, чтобы он находился в центре стека.
JavaFX имеет две концепции для позиционирования, одна - координаты компоновки, другая - дельта переводов, которые добавляются в координаты компоновки. TranslateTransitions работает, изменяя переводные дельта. Перевод предназначен для анимации и временного перемещения. Перевод не зависит и не влияет на значения макета, поэтому вы можете поместить что-то в StackPane и применить к нему TranslateTransition, и он все равно будет перемещаться, но он будет перемещаться из центра стека, поскольку это исходная позиция макета.