С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 37

Массив: Реализовать анимацию для заданного объекта...

26.05.2017, 21:36. Показов 1041. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Прошу немного мне помочь, сам с проблемой справиться не могу.

Учусь в универе и дано не совсем обычное задание. Есть char массив, в нем отрисована картинка. Как это выглядит видно на первом скрине. Задача: реализовать анимацию для отдельного объекта. Для шляпы, к примеру. С поставленной задачей я справился, но беда в том, что в Java нет очистки экрана, как я понял. И вместо нормальной анимации я получаю просто 30 выведенных на экран массивов, с разными положениями шляпы.

Вопрос: знающие люди, подскажите, пожалуйста, как и куда можно выгружать этот массив, чтобы он корректно отрисовывался и была возможность очистки экрана? Пробовал JTeaxtArea, но что-то пошло не так. С GUI ранее в Java не работал, так что не пинайте сильно.
Миниатюры
Массив: Реализовать анимацию для заданного объекта...  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2017, 21:36
Ответы с готовыми решениями:

Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные
Здравствуйте.Чёткого ответа на просторах интернета не нашёл , поэтому пишу сюда. Есть класс, нужен...

Как реализовать эффекты и анимацию для контролов
всем привет! я хочу сделать всякие эффекты, анимации для контролов. есть какой-нибудь хороший...

Написать форму ввода для заданного объекта.
Написать форму ввода для заданного объекта. Форма должна содержать не менее пяти полей для...

3
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
27.05.2017, 09:07
Лучший ответ Сообщение было отмечено Sonad как решение

Решение

Кликните здесь для просмотра всего текста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
 
public class ShapeFrame extends JFrame {
    private JButton jButton = new JButton("Text");
    private int count = 0;
    Timer timer = new Timer(50, new ActionListener() {
        private boolean direction = false;
 
        @Override
        public void actionPerformed(ActionEvent e) {
            if (!direction) {
                if (count++ > 20) {
                    direction = true;
                }
            } else {
                if (count-- < 1) {
                    direction = false;
                }
            }
            fillTextArea();
            repaint();
        }
 
 
 
    });
 
    private JTextArea jTextArea = new JTextArea();
    private List<String> list = new ArrayList<>();
 
    public void fillTextArea() {
        jTextArea.setText("");
        String offset = "";
        for (int i = 0; i < count ; i++) {
            offset += " ";
        }
 
        for (String s : list) {
            jTextArea.append(offset + s + "\n");
        }
 
    }
 
 
    public ShapeFrame() throws HeadlessException {
        jButton.addActionListener(new ActionListener() {
            private boolean flag = false;
            String c = "*";
 
            @Override
            public void actionPerformed(ActionEvent e) {
                String cOld;
 
                if (c.equals("*")) {
                    c = String.valueOf('+');
                    cOld = "\\*";
                } else {
                    c = String.valueOf('*');
                    cOld = "\\+";
                }
                //  System.out.println(list);
                Iterator<String> it = list.iterator();
                for (int i = 0; i < list.size(); i++) {
                    list.set(i, list.get(i).replaceAll(cOld, c));
                }
             }
        });
 
        add(jButton, BorderLayout.NORTH);
 
        count = 0;
        String offset = String.format("%-20s", " ");
        list.add(offset);
        list.add(offset);
        list.add(offset + "    *    ");
        list.add(offset + "   ***   ");
        list.add(offset + " ******* ");
        list.add(offset + "*********");
        list.add(offset + " ******* ");
        list.add(offset + "  *****  ");
        list.add(offset + "**  *  **");
        list.add(offset + "  *****  ");
 
        jTextArea.setFont(new Font("Courier New", Font.PLAIN, 12));
        for (String s : list) {
            jTextArea.append(s + "\n");
        }
        add(jTextArea);
        timer.start();
    }
 
    public static void main(String[] args) {
 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                ShapeFrame shapeFrame = new ShapeFrame();
                shapeFrame.setSize(500, 400);
                shapeFrame.setVisible(true);
            }
        });
    }
}

Сюрприз.. Смотрите анимацию.
1
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 37
27.05.2017, 09:14  [ТС]
Вроде то, что нужно. Идеально плавно. Просто идеально. Спасибо огромное.
Самый важный вопрос: будет ли оно так же идеально плавно перемещаться, если вместо такого небольшого кол-ва символов будет массив 200 на 50, который полностью заполнен?

Я извиняюсь, если вопрос глупый, просто в вашем коде еще не начал разбираться. Спросил для справки.
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
27.05.2017, 09:23
Лучший ответ Сообщение было отмечено Sonad как решение

Решение

Плавность достигается таймером и шагом движения чем меньше задержка, тем плавнее двигается фигура.
Но в тексте нельзя сделать шаг движения меньше размера пробела. Так что компромисс между скоростью и плавностью.
200x50 небольшой массив, компьютер должен справиться.
Да кнопочка сверху с надписью Text не зря, нажмите, и фигура сменит образ.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2017, 09:23
Помогаю со студенческими работами здесь

Как реализовать для каждого объекта свой поток
Господа помогите плиииЗ ... как сделать для каждого объекта свой поток??? тут я сделал так...

Составить программу имитации радиолокационных измерений для заданного положения объекта
Добрый день, нужно сделать РГР на тему &quot;Сложить программу имитации радиолокационных измерений для...

Разработать класс, набор методов для программной модели заданного объекта
Разработать класс, набор методов (конструктор, деструктор и указаны методы) для программной модели...

Реализовать функцию для вычисления заданного выражения
Основное задание: Написать функцию для вычисления выражения Дополнительные задания ...

Можно ли реализовать анимацию
Возможно ли?И как?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru