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

Формулировка задачи:

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

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

textual
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);
            }
        });
    }
}

13   голосов, оценка 4.462 из 5


СОХРАНИТЬ ССЫЛКУ