繁体   English   中英

在Java中使用Swing计时器

[英]Using a swing timer in java

我使用Java进行编码的时间最长(长达一个月),但是我已经使用其他多种面向对象的语言进行编码。

我正在尝试使用java.swing.timer中包含的摆动计时器,并且阅读了https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html来尝试并理解它。

我了解到使用timer = new Timer(speed, this) ,速度是计时器触发的频率,但是我不明白this意味着什么。 另外,我知道每次触发计时器时都会执行public void actionPerformed(ActionEvent e) ,但是有没有办法让我在同一类中使用两个计时器?

任何帮助表示赞赏,在此先感谢您。

您要调用的构造函数具有以下签名:

public Timer(int delay, ActionListener listener)

这意味着在示例中, this引用了ActionListener接口的实例。

在您的示例中,包含计时器代码的类恰好实现ActionListener 这只是为了方便起见。

您可以将ActionListener任何实例传递给计时器。 如果您使用的是Java 8,则使用方法引用非常简单。

public class TheExample
{
  public TheExample()
  {
    final Timer timerOne = new Timer(speedOne, this::timerOneMethod);
    final Timer timerTwo = new Timer(speedTwo, this::timerTwoMethod);
  }

  private void timerOneMethod(ActionEvent e)
  {
    // do something exciting
  }

  private void timerTwoMethod(ActionEvent e)
  {
    // do something else exciting
  }
}

如果您不使用Java 8,则可以使用匿名内部类实现相同的目的。 您可以在此处找到这种方式示例

定时器的Javadoc告诉你,构造就是 -它需要一个int和ActionListener的实例。

因此,为了回答您的第一个问题,在Oracle的示例代码中, timer = new Timer(speed, this)发生在构成示例UI的Applet的init方法内。 因此: 是指“当前”对象(有关更多详细信息,请参见此处 ),因为Applet对象是整个方法“所属”的对象。

而且这仅是有效的,因为在TumbleItem extends JApplet implements ActionListener声明了示例类TumleItem, TumbleItem extends JApplet implements ActionListener

记录:了解是绝对的基础知识。 如果您不知道是什么意思,那么您不应该参与UI编码。 在尝试运行之前,请学习爬网。

第二个问题是:对于要使用的Timer的每个实例,都需要一个可以传递的ActionListener。传统的实现方法是使用匿名内部类,例如

timer = new Timer(someSpeed, new ActionListiner() {
   @Override
   public void actionPerformed(ActionEvent evt) {
      System.out.println("Whatever");
   }
}

最后:Oracle的一个示例正在使用Applet,简单地说:Applet是无效的技术。 不要太挂在他们身上; 您最好避免将时间完全花在这些东西上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM