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.