Снова. Снова этот repaint() - Java
Формулировка задачи:
Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я понимаю, ошибка появляется в методе redraw класса draw. Ниже приведу укороченный код программы.
Надеюсь кто-нибудь поможет мне. Заранее спасибо.
Самый главный файл:
Window:
Tick:
Draw:
Сейчас в консоль выводит:
Если бы работал repaint выводило бы что-то наподобие этого:
public class main {
private static int star[][] = new int[50][2];
private static int colstar = 0;
public static void main(String[] args) {
new window().window();
new tick(star, colstar);
}
}public class window extends JFrame{
public void window(){
setTitle("Mega Stars");
setBounds(100,100,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setBackground(new Color(50,50,50));
JPanel panel = new draw();
add( panel );
setVisible(true);
}
}public class tick{
private int[][] star;
private int colstar;
private Timer t;
public tick(int[][] starIn, int colstarIn){
star = starIn;
colstar = colstarIn;
t = new Timer(1000, new timer());
t.start();
}
void draw(){
new draw().redraw(star, colstar);
}
class timer implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
draw();
}
}
}public class draw extends JPanel{
private int[][] draw;
private int coldraw;
private Thread call;
private int i = 0;
public void redraw(int star[][], int colstar){
draw = star;
coldraw = colstar;
repaint();
System.out.println("redraw");
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.clearRect(0, 0, 500, 500);
g.setColor(new Color(255,255,255,200));
g.fillRect(i, 15, 3, 3);
System.out.println("Paint");
}
}
Paint Paint Paint redraw redraw redraw ...
Paint Paint Paint redraw Paint redraw Paint redraw Paint ...
Решение задачи: «Снова. Снова этот repaint()»
textual
Листинг программы
public class Trololo {
private static int star[][] = new int[50][2];
private static int colstar = 0;
public static void main(String[] args) {
Window w = new Window(star, colstar);
new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("timer tick");
w.repaint();
}
}).start();
}
}
class Window extends JFrame {
Window(int[][] starIn, int colstarIn) {
setTitle("Mega Stars");
setBounds(100, 100, 500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setBackground(new Color(50, 50, 50));
add(new MyCoolPanel(starIn, colstarIn));
setVisible(true);
}
}
class MyCoolPanel extends JPanel {
private int[][] starIn;
private int colstarIn;
private int i = 0;
private final Color myColor = new Color(255, 255, 255, 200);
MyCoolPanel(int[][] starIn, int colstarIn) {
this.starIn = starIn;
this.colstarIn = colstarIn;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, 500, 500);
g.setColor(myColor);
g.fillRect(i, 15, 3, 3);
System.out.println("Paint");
}
}