[英]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
}
}
定时器的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.