Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 902
1

Почему не отображается динамическое изменение размеров объекта?

20.01.2021, 10:29. Просмотров 1680. Ответов 4
Метки нет (Все метки)

Предполагается анимирование масштабирования графического объекта.
Для теста сделал метод, в который передаю обычный прямоугольник. Внутри метода цикл:
- изменяю масштаб объекта,
- делаю паузу.

И так несколько раз в цикле.
Объект меняет в цифрах размеры(в свойствах объекта проверяю в консоли) заданное в цикле количество раз, пауза тоже работает, но на экране(само графическое отображение) я вижу не каждое изменение размеров объекта, а после прохода всего цикла сразу конечное. Т.е. цикл работает так: на экране есть объект с начальными размерами, проходит заданное количеством итераций цикла пауз и на экране отображается объект с самыми конечными размерами.

Почему промежуточные изменения размеров не отображаются на экране?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2021, 10:29
Ответы с готовыми решениями:

Динамическое изменение размеров формы
Всем доброго времени суток. Имеется форма, на которой может быть до 10 графиков ZedGraph. Перед...

Динамическое изменение размеров TStringGrid
как сделать чтобы вводить в Edit1, Edit2 количество строк и столбцов в StringGrid2????

Динамическое изменение размеров прямоугольника
Есть форма с PictureBox, VscrollBar и HscrollBar. Нужно нарисовать Прямоугольник. ПРямоугольник...

Динамическое изменение размеров панели
Здравствуйте! У меня на форме есть две панели. Первая (Canvas): Anchor all.Вторая (Settings):...

4
21 / 15 / 7
Регистрация: 09.06.2018
Сообщений: 106
20.01.2021, 10:53 2
Может проблема в том, что ты ставишь паузы в методе отрисовки. Возможно что отрисовка изображения происходит после прохождения по методу, а когда выполняется то, что в методе, на сцене висит старое изображение. Попробуй менять состояния с помощью клавиши, либо по таймеру.
0
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 902
20.01.2021, 11:09  [ТС] 3
Цитата Сообщение от 3C_273 Посмотреть сообщение
Может проблема в том, что ты ставишь паузы в методе отрисовки.
В отдельном методе нарисовал прямоугольник.Только отрисовка прямоугольника. По клику мышкой на него вызываю метод анимации. В методе анимации цикл который описан выше. Может кроме изменения масштаба нужно как-то перерисовывать объект? Но в самом конце метода анимации то изменяются размеры прямоугольника, без всяких перерисовок. Просто промежуточных изменений не видно.

Цитата Сообщение от 3C_273 Посмотреть сообщение
Попробуй менять состояния с помощью клавиши, либо по таймеру.
Имеется в виду - попробовать эту анимацию в ручном режиме?
0
21 / 15 / 7
Регистрация: 09.06.2018
Сообщений: 106
20.01.2021, 11:12 4
Ну перерисовка нужна, какой-нибудь метод repaint или типа того. Ты какой библиотекой пользуешься для графики?
0
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 902
20.01.2021, 12:30  [ТС] 5
Цитата Сообщение от 3C_273 Посмотреть сообщение
Ты какой библиотекой пользуешься для графики?
Это "учебная" библиотека acm
Я пробовал прямо в методе run() нарисовать прямоугольник и там же, в том же методе в цикле изменять его размеры. Так работает. А если делать все в отдельных методах, то не работает.

Делал так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private static final int ITEM_SIZE = 50;
public static final int APP_WIDTH = 400;
public static final int APP_HEIGHT = 400;
 
public void run() {        
        drawRect();
        addMouseListeners();
    }
 
 
    public void drawRect() {
        GRect rect = new GRect(150, 150, ITEM_SIZE, ITEM_SIZE);
        rect.setFilled(true);
        rect.setFillColor(Color.BLACK);
        add(rect);
    }
 
    public void mouseClicked(MouseEvent me) {
        GRect rect = (GRect) getElementAt(me.getX(), me.getY());
        if (rect != null) {
            if (rect.getFillColor() == Color.BLACK) {
                ranAnimation(rect);
            }
        }
    }
 
    private void ranAnimation(GRect rect) {
        while (true) {
            rect.scale(0.95);
            pause(1000);
        }
    }
Не работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2021, 12:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Возможно ли динамическое изменение размеров массива?
Не могу понять - в яве возможно динамическое изменение размеров массива? То есть чтобы не...

Динамическое изменение размеров элементов управления
На форме по вертикали горизонтально размещены DataGridView, а под ним ListView. Как сделать между...

Изменение размеров объекта
можно ли изменить размер объекта ? object A = new object ; хочу изменить количество строк

Изменение размеров объекта
Есть код который рисует домик, окна и дверь и позунок. Требуется добавлять этажи(ряд окон) в...

Динамическое изменение размеров элементов управления вместе с формой
Подскажите как привязать элементы управления к форме, чтобы при растягивании (изменении размера)...

Изменение размеров объекта динамически
Есть ли какое нибудь событие, что бы можно было менять размеры окна в работающей программе, т.е...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.