JPanel中的计时器

时间:2012-05-31 23:26:30

标签: java swing timer jpanel actionlistener

我正在尝试创建一个应用程序,我想添加一个时钟。我正在使用JPanel和ActionListener制作时钟,并且还想使用Timer。 Swing Tutorial说要实例化一个Timer,你会说新的Timer(numMillis,这个(一个ActionListener)),但是,“this”似乎不能用于JPanel项目。 我将如何添加到Timer构造函数以正确实例化Timer?

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())));
  }

2 个答案:

答案 0 :(得分:3)

为避免leaking this,您可以使用实现ActionListener的嵌套类,如此example所示。

答案 1 :(得分:1)

我假设您的ClockPanel看起来像:

public class ClockPanel extends JPanel implements ActionListener {

您的操作执行似乎正常。如果在设置文本之前放置打印件,您将看到它正在被调用。也许您在文本更新后没有刷新屏幕,这就是您没有看到更改的原因。