Timer, problem z paintComponent()

0

Pisze dosyc prosty timer i mam problem. Otoz przy wykonywaniu sie petli while czas nie rysuje sie w ramce.

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

public class Rysowanie_czasu extends JComponent {
    
    int godziny,minuty,sekundy,czas;
    
    public Rysowanie_czasu() {
        godziny = 0;
        minuty = 20;
        sekundy = 0;
        czas = minuty * 60;
    }
    
    public Rysowanie_czasu(int godziny,int minuty,int sekundy) {
        this.godziny = godziny;
        this.minuty = minuty;
        this.sekundy = sekundy;
        czas = sekundy + minuty * 60 + godziny * 60 * 60;
    }
    
    public void paintComponent(Graphics g) {
        try {
            while (czas!=0) {
                String czas_do_rys = godziny + ":" + minuty + ":" + sekundy;
                System.out.println(czas_do_rys);
                g.drawString(czas_do_rys,15,15);
                sekundy-=1;	
                czas-=1;
                Thread.sleep(1000);
                repaint();
            }
            g.drawString("0:0:00",15,15);
        }
        catch (InterruptedException e) {};
    }

}

klasa timer

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


class Timer extends JFrame {

public void odliczanie(int godziny,int minuty,int sekundy) {    

}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                JFrame okno = new JFrame();
                okno.setBounds(80,80,200,200);
                okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                okno.setVisible(true);
                okno.setTitle("Tajmer");
                Rysowanie_czasu licznik = new Rysowanie_czasu(0,0,6);
                okno.add(licznik);
            }
        });
    }
}

Prosze o wskazanie bledu.
0
import javax.swing.*;
import java.awt.*;

//Tutaj dodajesz Runnable
class Rysowanie_czasu extends JComponent implements Runnable {

    int godziny,minuty,sekundy,czas;

    public Rysowanie_czasu() {
        godziny = 0;
        minuty = 20;
        sekundy = 0;
        czas = minuty * 60;
    }

    public Rysowanie_czasu(int godziny,int minuty,int sekundy) {
        this.godziny = godziny;
        this.minuty = minuty;
        this.sekundy = sekundy;
        czas = sekundy + minuty * 60 + godziny * 60 * 60;
    }

    //Tutaj TYLKO rysujesz
    public void paintComponent(Graphics g) {
        String czas_do_rys = godziny + ":" + minuty + ":" + sekundy;
        g.drawString(czas_do_rys,15,15);
    }

    //Tutaj w oddzielnym wątku robisz obliczenia
    public void run() {
        try {
            while (czas!=0) {
                sekundy-=1;
                czas-=1;
                repaint();
                
                Thread.sleep(1000);
            }
        }
        catch (InterruptedException e) {};
    }
}

public class Timer extends JFrame {

    public void odliczanie(int godziny,int minuty,int sekundy) {

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run()
            {
                JFrame okno = new JFrame();
                okno.setBounds(80,80,200,200);
                okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                okno.setVisible(true);
                okno.setTitle("Tajmer");
                Rysowanie_czasu licznik = new Rysowanie_czasu(0,0,6);
                okno.add(licznik);
                
                //Tutaj uruchamiasz licznik
                new Thread(licznik).start();
            }
        });
    }
}
0

Dziekuje slicznie, wszystko dziala jak nalezy :).

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