Таймер в JPanel

Я пытаюсь создать приложение и хочу добавить часы. Я делаю часы с помощью JPanel и ActionListener, а также хотел бы использовать таймер. В учебном руководстве Swing говорится, что для создания экземпляра Timer вы должны сказать new Timer (numMillis, this (ActionListener)), однако «this», похоже, не работает с элементами 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())));
  }

person Linda Lay    schedule 31.05.2012    source источник


Ответы (2)


Чтобы избежать утечки this, вы можете использовать вложенный класс, реализующий ActionListener, как показано в этом example.

person trashgod    schedule 31.05.2012
comment
Вложенный класс или анонимный класс - это действительно путь - person Robin; 01.06.2012

Я предполагаю, что ваша ClockPanel выглядит так:

public class ClockPanel extends JPanel implements ActionListener {

Кажется, ваше действие выполняется правильно. Если вы поместите печать непосредственно перед тем, как установить текст, вы увидите, что он вызывается. Возможно, вы не обновляете экран после обновления текста, поэтому вы не видите изменений.

person n00begon    schedule 31.05.2012