Как уменьшить или увеличить квадраты при сохранении их абсолютного позиционирования? - PullRequest
0 голосов
/ 24 декабря 2018

illustrative example №1 illustrative example №2

В окне пользователь видит поле, состоящее из набора квадратов.Поле генерируется случайным образом.(Но это не имеет значения, просто хвастался своей работой: DDDD) Когда пользователь прокручивает колесо мыши, в зависимости от направления прокрутки, квадраты должны увеличиваться или уменьшаться.Таким образом, когда это происходит, квадраты не меняют свои координаты, в результате чего эффект появляется, как на втором рисунке.Между ними образуется разрыв!Как сделать так, чтобы они располагались по размеру?

При необходимости вот мой код.Не принимайте близко к сердцу .:DDD

scene.setOnScroll(e -> 
    {
        if(e.getDeltaY() > 0)
            {
        camera.cameraControlScale(camera.cameraControlGetScaleX()+0.25, 
        camera.cameraControlGetScaleY()+0.25);
            }
        else
            {

        camera.cameraControlScale(camera.cameraControlGetScaleX()-0.25, 
        camera.cameraControlGetScaleY()-0.25);
            }
     });



protected void objectControlScale(double x, double y)
    {
        imageview.setScaleX(x);
        imageview.setScaleY(y);
    }
protected double objectControlGetScaleY()
    {
        return imageview.getScaleY();
    }
protected double objectControlGetScaleX()
    {
        return imageview.getScaleX();
    }

Здесь я размещаю свои функции в слушателе. ^ Содержание функций простое и как оно должно быть нерабочим!: DDD Да, я знаю,У меня есть работа с изображением в функциях, но какая разница?На поле есть картинки, но для ясности я их убрал.У них точно такая же проблема.Вам не нужно беспокоиться о написании кода, я буду признателен, если вы покажете, где об этом прочитать, решите такие проблемы и т. Д.

Rectangle s / ImageView s добавлены непосредственно в сценукорень:

Pane root = new Pane(... children ...);

1 Ответ

0 голосов
/ 25 декабря 2018

Преобразования точки поворота шкалы, применяемые с использованием scaleX и scaleY, являются центром узла.Кроме того, положение узлов не меняется автоматически.

Если вы хотите масштабировать все дочерние элементы панели root, проще всего применить преобразование к самому Pane:

Pane realRoot = new Pane(root);
root.setScaleX(x);
root.setScaleY(y);

Другие альтернативы включают создание GridPane и упаковку каждого из Rectangle s / ImageView s в Group.

Если вы хотите определитьПозиционирование дочерних элементов, хотя И если они хотят использовать независимые масштабные коэффициенты для каждого отдельного дочернего элемента, все становится немного сложнее: после всех обновлений вам необходимо настроить позиции всех узлов на основе свойств boundsInParent ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...