Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.09.2020
Сообщений: 7
1

Нужно используя JButton, JTextField и JTextArea создать консоль и используя ее манипулировать изображением

08.06.2022, 05:42. Показов 377. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Также добавить отрисовку изображений с задаваемым поворотом переопределив методы paint(Grahics g) и используя класс AffineTransform. Главное это наличие поворота и анимации, контролируемых пользователем.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2022, 05:42
Ответы с готовыми решениями:

Нужно создать код задачи используя консоль
Дано целое число N (>0). Найти сумму n² + (n+1)² + ((n+2)² + … +(2*n)²...

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

Как создать многотомный архив со всеми файлами .xls, имеющимися на компьютере, используя консоль?
Препод задал создать многотомный архив со всеми файлами .xls, имеющимися на компьютере, используя...

JButton, JLabel и JTextField
Я создал окно, 3 кнопки, 1 лейбл и 1 поле ввода. Как сделать так, чтоб при нажатии на кнопку в...

1
28 / 18 / 10
Регистрация: 09.05.2019
Сообщений: 69
10.06.2022, 07:10 2
Супер косячный, но рабочий вариант проблемы: поворот работает не правильно, ошибки в функции word не обрабатываются
Из плюсов:
работает консоль и 4 команды.
при этом работает анимация(ты не сказал какая должна быть по этому я сделал движение по кругу)
из минусов:
нужно дорабатывать

Код:
Кликните здесь для просмотра всего текста
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.Timer;
public class Main {
    
    public static BufferedImage rotateImage(final BufferedImage bufferedimage,
              final int angle){
 
          int width = bufferedimage.getWidth();  
          int height = bufferedimage.getHeight();  
 
          BufferedImage dstImage = null;  
          AffineTransform affineTransform = new AffineTransform();  
 
          if (angle == 180) {  
              affineTransform.translate(width, height);  
              dstImage = new BufferedImage(width, height, bufferedimage.getType());  
          } else if (angle == 90) {  
              affineTransform.translate(height, 0);  
              dstImage = new BufferedImage(height, width, bufferedimage.getType());  
          } else if (angle == 270) {  
              affineTransform.translate(0, width);  
              dstImage = new BufferedImage(height, width, bufferedimage.getType());  
          }  
 
          affineTransform.rotate(java.lang.Math.toRadians(angle));  
          AffineTransformOp affineTransformOp = new AffineTransformOp(  
                  affineTransform,  
                  AffineTransformOp.TYPE_NEAREST_NEIGHBOR);  
 
          return affineTransformOp.filter(bufferedimage, dstImage);  
 
      }
    
    static String word(String s,int wordNum) {
        char[] sChars = s.toCharArray();
        ArrayList<Integer> spaces= new ArrayList<>();
        spaces.add(-1);
        for (int i = 0; i<sChars.length;i++)
            if(sChars[i]==' ')
                spaces.add(i);
        spaces.add(sChars.length);
        int 
            space1 = (int)spaces.toArray()[wordNum-1],
            space2 = (int)spaces.toArray()[wordNum];
        char[] outChars=new char[space2-space1-1];
        s.getChars(space1+1, space2, outChars,0);
        String outString="";
        for(char crnt:outChars)
            outString+=crnt;
        return outString;
    }
    public static void main(String[] args) {
        new JFrame() {
            void rep() {
                repaint();
            }
            BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB) {{
                for(int i=0;i<=100;i++)
                    getGraphics().fillOval(i, (int)(i*Math.sin(i*100)*10), i, i*2);
            }};
            
            int[] imagePos = new int[] {10,10};
            int[] animatedPos = new int[] {0,0};
            int animateProgress =0;
            int rotate =0;
            Image rotatedImage = rotateImage(image, rotate);
            {
                add(new JPanel() {public void paint(Graphics g){
                    super.paintComponent(g);
                    g.drawImage(rotatedImage, imagePos[0]+animatedPos[0],animatedPos[1]+animatedPos[1],this);
                }});
                add(new JPanel() {{
                    setLayout(new GridLayout(2,1));
                    add(new JTextArea("Комманды :1- повернуть на n; 2- двигать по x на n; 3- двигать по y на n; 4- анимировать;"));
                    add(new JPanel() {{
                        setLayout(new GridLayout(1,2));
                        add(new JTextArea("Введите команду"));
                        add(new JTextField() {{
                            String keyStrokeAndKey = "ENTER";
                            getInputMap().put(KeyStroke.getKeyStroke(keyStrokeAndKey), keyStrokeAndKey);
                            getActionMap().put(keyStrokeAndKey, (Action)new AbstractAction() {public void actionPerformed(ActionEvent e) {
                                String s = getText();
                                if(word(s,1).equals("анимировать"))
                                    new Timer(1000/60, new ActionListener() {public void actionPerformed(ActionEvent e) {
                                        
                                        animatedPos= new int[] {
                                            (int) (Math.sin(Math.toRadians(animateProgress))*30),
                                            (int) (Math.cos(Math.toRadians(animateProgress))*30),
                                        };
                                        animateProgress++;
                                        rep();
                                    }}) {{start();}};
                                else if((word(s,1)+" "+word(s,2)).equals("двигать по")) {
                                    if((word(s,3)+" "+word(s,4)).equals("x на"))
                                        imagePos[0]+=Integer.parseInt(word(s,5));
                                    else if((word(s,3)+" "+word(s,4)).equals("y на"))
                                        imagePos[1]+=Integer.parseInt(word(s,5));
                                }else if((word(s,1)+" "+word(s,2)).equals("повернуть на")) {
                                    rotate+=Integer.parseInt(word(s,3));
                                    rotatedImage=rotateImage(image, rotate);
                                }
                                
                                rep();
                            }});
                        }});
                    }});
                }},"South");
                setVisible(true);setDefaultCloseOperation(3);setSize(600,600);
            }
        };
    }
}



источники:
https://russianblogs.com/article/7697518907/
https://otus.ru/nest/post/1272/
0
10.06.2022, 07:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2022, 07:10
Помогаю со студенческими работами здесь

Размеры и расположение JTextArea и JTextField
Как их расположит там где надо и такого размеры как мне надо.. Разница между JTextArea и JTextField...

Создать объект класса Планета, используя класс Материк. Методы: вывести на консоль название материка, планеты,
Помогите с решением Создать объект класса Планета, используя класс Материк. Методы: вывести на...

Модифицировать класс JTextField или JTextArea
Всем привет! Подскажите пожалуйста, как модифицируя класс JTextField организовать горизонтальное...

Получить данные из JTextField с использованием JButton
Писал программку, не получается получить текст из JTextField. JButton check = new...

Вернуть текст из JTextField по нажатию на JButton
Есть главное окно программы JFrame, при определенном условии появляется еще одно окно JFrame, в...

Создать объект класса Государство, используя классы Область, Район, Город. Методы: вывести на консоль столицу, количеств
Я только учусь и много чего не понимаю за ранее извиняюсь за может быть тупые вопросы. Прошу помощи...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru