我正在尝试创建一个应用程序,我想添加一个时钟。我正在使用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())));
}
答案 0 :(得分:3)
为避免leaking this
,您可以使用实现ActionListener
的嵌套类,如此example所示。
答案 1 :(得分:1)
我假设您的ClockPanel看起来像:
public class ClockPanel extends JPanel implements ActionListener {
您的操作执行似乎正常。如果在设置文本之前放置打印件,您将看到它正在被调用。也许您在文本更新后没有刷新屏幕,这就是您没有看到更改的原因。