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

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

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

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

Решение задачи: «Снова. Снова этот repaint()»

textual
Листинг программы
  1. public class Trololo {
  2.  
  3.     private static int star[][] = new int[50][2];
  4.     private static int colstar = 0;
  5.  
  6.     public static void main(String[] args) {
  7.         Window w = new Window(star, colstar);
  8.  
  9.         new Timer(1000, new ActionListener() {
  10.             @Override
  11.             public void actionPerformed(ActionEvent e) {
  12.                 System.out.println("timer tick");
  13.                 w.repaint();
  14.             }
  15.         }).start();
  16.     }
  17. }
  18.  
  19. class Window extends JFrame {
  20.     Window(int[][] starIn, int colstarIn) {
  21.         setTitle("Mega Stars");
  22.         setBounds(100, 100, 500, 500);
  23.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  24.         setResizable(false);
  25.         setBackground(new Color(50, 50, 50));
  26.         add(new MyCoolPanel(starIn, colstarIn));
  27.         setVisible(true);
  28.     }
  29. }
  30.  
  31. class MyCoolPanel extends JPanel {
  32.  
  33.     private int[][] starIn;
  34.     private int colstarIn;
  35.     private int i = 0;
  36.     private final Color myColor = new Color(255, 255, 255, 200);
  37.  
  38.     MyCoolPanel(int[][] starIn, int colstarIn) {
  39.         this.starIn = starIn;
  40.         this.colstarIn = colstarIn;
  41.     }
  42.  
  43.     public void paintComponent(Graphics g) {
  44.         super.paintComponent(g);
  45.         g.clearRect(0, 0, 500, 500);
  46.         g.setColor(myColor);
  47.         g.fillRect(i, 15, 3, 3);
  48.         System.out.println("Paint");
  49.     }
  50. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут