Sto cercando di realizzare un pannello per la visualizzazione dell'ora gestendo dei thread. Lo scorrimento dell'ora funziona bene però ho dei problemi con la pulizia dello schermo.
I secondi che scorrono si sovrappongono, evidentemente il metodo
repaint() non pulisce il pannello.
Sapete dirmi come devo fare per far pulire il pannello ogni volta?
Perchè repaint non funziona?
Ecco il codice del JPanel:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.*;
import java.io.*;
public class orologio extends JPanel implements Runnable {
private Thread avanza = null; /* Il thread dell'orologio !!! */
public orologio(){
start();
}
public void start() {
if (avanza == null) {
avanza = new Thread(this, "orologio");
avanza.start();
}
}
public void run() {
while (Thread.currentThread() == avanza) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e){ }
}
}
/* Funzione di disegno che semplicemente scrive data ed ora */
public void paint(Graphics g){
String tt="",ora="",min="",sec="";
Date now = new Date();
ora+=now.getHours();
min+=now.getMinutes();
sec+=now.getSeconds();
if(now.getHours()<10)ora="0"+ora;
if(now.getMinutes()<10)min="0"+min;
if(now.getSeconds()<10)sec="0"+sec;
tt=ora+" : "+min+" : "+sec;
g.setFont(new Font("Roman",1,16));
g.drawString(tt, 20, 20);
}
public void stop() {
avanza = null;
}
}
Il codice che richiama il pannello è il seguente:
public class orologioframe extends JFrame{
private orologio o;
public orologioframe(){
Container c=getContentPane();
o=new orologio();
c.add(o);
setSize(200,100);
show();
}
public static void main(String args[]){
new orologioframe();
}
}
Dove è che sbaglio? perchè il repaint non funziona bene?