Массив: Реализовать анимацию для заданного объекта... - Java
Формулировка задачи:
Доброго времени суток! Прошу немного мне помочь, сам с проблемой справиться не могу.
Учусь в универе и дано не совсем обычное задание. Есть char массив, в нем отрисована картинка. Как это выглядит видно на первом скрине. Задача: реализовать анимацию для отдельного объекта. Для шляпы, к примеру. С поставленной задачей я справился, но беда в том, что в Java нет очистки экрана, как я понял. И вместо нормальной анимации я получаю просто 30 выведенных на экран массивов, с разными положениями шляпы.
Вопрос: знающие люди, подскажите, пожалуйста, как и куда можно выгружать этот массив, чтобы он корректно отрисовывался и была возможность очистки экрана? Пробовал JTeaxtArea, но что-то пошло не так. С GUI ранее в 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);
}
});
}
}