0

我正在尝试创建一个应用程序,我想添加一个时钟。我正在使用 JPanel 和 ActionListener 制作时钟,并且还想使用 Timer。Swing 教程说要实例化 Timer,你会说 new Timer(numMillis, this(an 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())));
  }
4

2 回答 2

3

为避免泄漏this,您可以使用实现的嵌套类ActionListener,如本所示。

于 2012-05-31T23:36:52.360 回答
1

我假设您的 ClockPanel 看起来像:

public class ClockPanel extends JPanel implements ActionListener {

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

于 2012-05-31T23:35:22.757 回答