Снова. Снова этот repaint() - Java

Узнай цену своей работы

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

Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я понимаю, ошибка появляется в методе redraw класса draw. Ниже приведу укороченный код программы. Надеюсь кто-нибудь поможет мне. Заранее спасибо. Самый главный файл:
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);
    }
}
Window:
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);
    }
}
Tick:
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();
        }
    }
}
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 ...
Если бы работал repaint выводило бы что-то наподобие этого:
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");
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5