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

Анимация графических примитивов

01.05.2013, 01:23. Показов 2834. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Передо мной стоит задача сделать простейшую анимацию 3-х овалов, но увы я никак не могу разобраться как сделать в Java то что мне нужно
Каждый овал должен быть отдельным объектом, собственно вот сам класс Ellipse
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
public class Ellipse
{
    public Ellipse(double X, double Y, double RX, double RY, Graphics2D g)
    {
        this.X = X;
        this.Y = Y;
        this.RX = RX;
        this.RY = RY;
        this.g = g;
    }
    
    public double GetRY()
    {   return RY;  }
    
    public void PutX(double X)
    {   this.X = X; }
    
    public void PutY(double Y)
    {   this.Y = Y; }
    
    public void PutRX(double RX)
    {   this.RX = RX;   }
    
    public void PutRY(double RY)
    {   this.RY = RY;   }
    
    public void Show()
    {
        g.setColor(Color.BLACK);
        Ellipse2D e = new Ellipse2D.Double(X, Y, RX, RY);
        g.draw(e);
        
    }
    
    public void Hide()
    {
        g.setColor(Color.WHITE);
        Ellipse2D e = new Ellipse2D.Double(X, Y, RX, RY);
        g.draw(e);
    }
    
    public void Resize(double DRX, double DRY)
    {
        Hide();
        PutRX(RX + DRX);
        PutRY(RY + DRY);
        Show();
    }
    
    public void Slide(double DX, double DY)
    {
        Hide();
        PutX(X + DX);
        PutY(Y + DY);
        Show();
    }
    
    public void Perspective(double DRX, double DRY)
    {
        Resize(0.1 * DRX, 0.1 * DRY);
        double DX = 0.2 * DRX;
        double DY = 0.2 * DRY;
        Slide(DX, DY);
    }
    private double X, Y;
    private double RX, RY;
    private Graphics2D g;
}
А вот основной класс в котором я пытался организовать анимацию
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
public class MainClass extends JPanel implements ActionListener
{   
    public MainClass() {
        timer = new Timer(100, this);
        timer.start();
      }
    public static void main(String[] args)
    {
        final DrawFrame frame = new DrawFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(new MainClass());
    }
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g;
        E1 = new Ellipse(320.0, 100.0, 50.0, 20.0, g2);
        E2 = new Ellipse(320.0, 200.0, 50.0, 20.0, g2);
        E3 = new Ellipse(320.0, 300.0, 50.0, 20.0, g2);
        E1.Show();
        E2.Show();
        E3.Show();      
    }
    public void actionPerformed(ActionEvent arg0) 
    {
        E1.Resize(a * 0.1 * 50, a * 0.1 * 30);
        E2.Slide(a * 5, a * 3);
        E3.Perspective(a * 50, a * 30);
        repaint();
        System.out.println("in run()");
        if((E1.GetRY() >= 50)||(E1.GetRY() <= 5))
            a = -a;
    }
    Timer timer;
    protected static Ellipse E1, E2, E3;
    private static int a = 1;   
}
 
class DrawFrame extends JFrame
{
    public DrawFrame()
    {
        setSize(640, 480);
        MainClass panel = new MainClass();
        panel.setBackground(Color.WHITE);
        add(panel);
    }
}
Увы все это чудо не работает
PS: Все нужно делать именно с классом Ellipse, и анимация должна осуществляться именно с помощью вызова методов Slide Resize Perspective.
Сам класс Эллипс рабочий, не работает только собственно сама анимация.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.05.2013, 01:23
Ответы с готовыми решениями:

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

Взаимодействие графических примитивов
Возможно ли на VB6 создать программу в которой было бы реализовано в полной мере взаимодействие графических примитивов с привязанными к ним...

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

3
2 / 2 / 0
Регистрация: 30.04.2012
Сообщений: 13
03.05.2013, 13:18  [ТС]
Если кому интересно, я решил проблему.
Вот код
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
public class Ellipse
{
    public Ellipse(double X, double Y, double RX, double RY)
    {
        this.X = X;
        this.Y = Y;
        this.RX = RX;
        this.RY = RY;
    }
    
    public double GetRY()
    {   return RY;  }
    
    public void PutX(double X)
    {   this.X = X; }
    
    public void PutY(double Y)
    {   this.Y = Y; }
    
    public void PutRX(double RX)
    {   this.RX = RX;   }
    
    public void PutRY(double RY)
    {   this.RY = RY;   }
    
    public void Show(Graphics2D g)
    {
        g.setColor(Color.BLACK);
        Ellipse2D e = new Ellipse2D.Double(X, Y, RX, RY);
        g.draw(e);
        
    }
    
    public void Hide(Graphics2D g)
    {
        g.setColor(Color.WHITE);
        Ellipse2D e = new Ellipse2D.Double(X, Y, RX, RY);
        g.draw(e);
    }
    
    public void Resize(double DRX, double DRY, Graphics2D g)
    {
        Hide(g);
        PutRX(RX + DRX);
        PutRY(RY + DRY);
        Show(g);
    }
    
    public void Slide(double DX, double DY, Graphics2D g)
    {
        Hide(g);
        PutX(X + DX);
        PutY(Y + DY);
        Show(g);
    }
    
    public void Perspective(double DRX, double DRY, Graphics2D g)
    {
        Resize(0.1 * DRX, 0.1 * DRY, g);
        double DX = 0.2 * DRX;
        double DY = 0.2 * DRY;
        Slide(DX, DY, g);
    }
    private double X, Y;
    private double RX, RY;
}
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
public class MainClass extends JPanel implements ActionListener
{   
    public MainClass() {
        timer = new Timer(150, this);
        timer.start();
      }
    public static void main(String[] args)
    {
        E1 = new Ellipse(320.0, 100.0, 50.0, 20.0);
        E2 = new Ellipse(320.0, 200.0, 50.0, 20.0);
        E3 = new Ellipse(320.0, 300.0, 50.0, 20.0);
        final DrawFrame frame = new DrawFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.add(new MainClass());
    }
    
    public void actionPerformed(ActionEvent arg0) 
    {
        Graphics2D g = (Graphics2D)this.getGraphics();
        E1.Resize(a * 0.1 * 50, a * 0.1 * 30, g);
        E2.Slide(a * 5, a * 3, g);
        E3.Perspective(a * 50, a * 30, g);
        System.out.println("in run()");
        if((E1.GetRY() >= 50)||(E1.GetRY() <= 5))
            a = -a;
    }
    Timer timer;
    protected static Ellipse E1, E2, E3;
    private static int a = 1;   
}
 
class DrawFrame extends JFrame
{
    public DrawFrame()
    {
        setSize(640, 480);
        MainClass panel = new MainClass();
        panel.setBackground(Color.WHITE);
        add(panel);
    }
}
1
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 13
07.05.2013, 18:38
Цитата Сообщение от lexeyko Посмотреть сообщение
Java
1
2
3
4
public MainClass() {
timer = new Timer(150, this);
timer.start();
}
ругается на этот участок почему-то
0
 Аватар для exiqa
487 / 333 / 71
Регистрация: 24.12.2011
Сообщений: 591
08.05.2013, 13:02
Muzlover, потому что нужен javax.swing.Timer, а у вас java.util.Timer
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2013, 13:02
Помогаю со студенческими работами здесь

Движение графических примитивов
Не работает движение нижней части клюва , помогите понять почему и помогите исправить . using System; using...

Создание графических примитивов
Здравствуйте ,помогите пожалуйста С помощью средства Visual C++ создать на экране чертеж.

Создание графических примитивов
Поздравляю всех с новым годом. Ситуация такая. Пытаюсь создать графические примитивы для дальнейшего их использования т.есть Создаю классы...

Использование графических примитивов
Используя графические примитивы,задав параметры пера и кисти нарисовать щенка! Скажите как это можно сделать?

Использование графических примитивов
Добрый вечер уважаемые форумчане! Необходима ваша помощь в решении следующей задачи. Требуется построить в Delphi рисунок (файл...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru