prosta animacja matrix rain

Odpowiedz Nowy wątek
2015-01-10 00:14
Pijany Orzeł
0

Dopiero co zacząłem temat wątków w swingu. Do zrobienia mam animację podobną do matrix rain z wykorzystaniem metody paintcomponent i wątków. Napisałem coś takiego:

import java.awt.*;
import java.util.Random;
import javax.swing.*;

class Rain extends JPanel {

    Random r = new Random();
    int move;
    private int xpos;
    private static String TEXT = "ズサザジズゼゾシスセソキクケコイウエオジャな";
    private static final char[] test = {'優', '劣', 'や', '善', '悪', 'に', 'よ',
        +'っ', 'て', '選', '出', 'さ', 'れ', 'て', 'い', 'ケ', 'コ', 'イ', 'ウ',
        +'エ', 'オ', 'ジ', 'ャ', 'な', 'な', '記', '事', 'に', '選', 'ば', 'れ', 'て', 'い'
        + 'る', 'み', 'ん', 'な', 'の', '感', '想', 'を', '見', 'る', 'こ', 'と', 'が', 'で', 'き'};

    public Rain(int xpos)
    {
        this.xpos = xpos;
    }
    @Override
    public void paintComponent(final Graphics g) {

        super.paintComponent(g);
        g.setColor(Color.GREEN);

        final FontMetrics fm = g.getFontMetrics();
        int ypos = fm.getHeight() - fm.getHeight() * TEXT.length();

        for (int i = 0; i < TEXT.length(); i++) {
            g.drawString(Character.toString(TEXT.charAt(i)), xpos, ypos + move);
            ypos += fm.getHeight();
        }
        setBackground(Color.black);
        int x = 41;
        int y = 90;
        int a = r.nextInt(y - x + 1) + x;
        final char sign = (char) a;

        new Thread(new Runnable() {
            public void run() {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        move = move + 10;
                        if (move > 800 + fm.getHeight() * TEXT.length()) {
                            move = 0;
                            xpos = r.nextInt(800) + 1;
                            TEXT = str(test);
                        }
                        repaint();
                    }
                });
            }
        }
        ).start();

    }

    public String str(char[] array) {
        String slong = "";
        char sign;
        for (int i = 0; i < 25; i++) {
            sign = test[r.nextInt(test.length)];
            slong += Character.toString(sign);
        }
        return slong;
    }
}

public class MatrixRain extends JPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Random rd = new Random();
                JFrame okno = new JFrame("GUI");
                okno.setSize(800, 800);
                okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                okno.setVisible(true);
                okno.add(new Rain(rd.nextInt(800) + 1));

            }
        });
    }
}

Nie mam pomysłu jak zabrać się za tworzenie osobnych stringów pojawiających się po jakimś odstępie czasu.
Byłby mi ktoś w stanie z tym pomóc?
Z góry dzięki.

edytowany 1x, ostatnio: bogdans, 2016-12-13 18:26
!Wstawiaj kod w znaczniki &lt;code=java&gt;&lt;/code&gt; - bogdans 2015-01-10 07:46

Pozostało 580 znaków

2015-01-10 00:20
Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0