2012-05-31 2 views
0

J'essaye de créer une application, et j'aimerais ajouter une horloge. Je fais l'horloge en utilisant un JPanel et un ActionListener, et voudrais également utiliser un temporisateur. Le tutoriel Swing dit que pour instancier un Timer, vous diriez un nouveau Timer (numMillis, this (un ActionListener)), cependant, "this" ne semble pas fonctionner avec les éléments JPanel. Que dois-je ajouter au constructeur Timer pour instancier correctement le Timer?Minuterie dans JPanel

public ClockPanel() { 
    super(); 

    clockLabel.setText(sdf.format(new Date(System.currentTimeMillis()))); 
    clockLabel.setFont(new Font("Monospaced", Font.BOLD, 100)); 
    clockLabel.setOpaque(true); 
    clockLabel.setBackground(Color.black); 
    clockLabel.setForeground(Color.white); 

    timer = new Timer(500, this); 
    timer.setRepeats(true); 
    timer.start(); 

    clockLabel.setVisible(true); 

    initComponents(); 
} 
public void actionPerformed(ActionEvent e){ 
    if(e.getSource().equals(timer)) 
     clockLabel.setText(sdf.format(new Date(System.currentTimeMillis()))); 
    } 

Répondre

1

Je suppose votre ClockPanel ressemble à:

public class ClockPanel extends JPanel implements ActionListener { 

Votre action effectuer semble fonctionner correctement. Si vous mettez une impression juste avant de définir le texte, vous verrez qu'il est appelé. Peut-être que vous ne rafraîchissez pas l'écran après la mise à jour du texte, c'est pourquoi vous ne voyez pas les changements.

3

Pour éviter leaking this, vous pouvez utiliser une classe imbriquée qui implémente ActionListener, comme indiqué dans cette example.

+2

La classe imbriquée ou la classe anonyme est en effet la voie à suivre – Robin