Java 如何使用摆动计时器启动/停止动画
有人能教我如何使用Java 如何使用摆动计时器启动/停止动画,java,swing,animation,timer,applet,Java,Swing,Animation,Timer,Applet,有人能教我如何使用摆动计时器达到以下目的吗: 我需要有一个多边形,当我单击鼠标时开始设置动画(简单的动画,如旋转);并在我再次单击时停止设置动画 我在理解MouseListener的工作方式方面没有问题,但在实际动画方面有问题。我尝试在paint()方法中使用while块模拟动画,在该方法中,我将绘制、擦除和重画多边形(例如模拟旋转),但在while中,小程序不会听到单击。它只会听一会儿。当我单击鼠标时,我需要swing计时器来中断while。小程序不会侦听单击,因为主线程(事件调度线程,EDT
摆动计时器
达到以下目的吗:
我需要有一个多边形,当我单击鼠标时开始设置动画(简单的动画,如旋转);并在我再次单击时停止设置动画
我在理解
MouseListener
的工作方式方面没有问题,但在实际动画方面有问题。我尝试在paint()
方法中使用while块模拟动画,在该方法中,我将绘制、擦除和重画多边形(例如模拟旋转),但在while中,小程序不会听到单击。它只会听一会儿。当我单击鼠标时,我需要swing计时器来中断while。小程序不会侦听单击,因为主线程(事件调度线程,EDT)在while循环中,不会侦听您的单击
你需要另一根线。
(尝试使用SwingWorker)
因此,SwingWorker将在后台执行while循环,发布结果以使多边形移动
然后,EDT可以专注于任何事件(如点击)。然后,如果要停止SwingWorker,可以使用click事件杀死它
祝您好运此控件使用按钮控制,而此相关控件则响应鼠标单击。后一个示例在每次单击时反转方向,但“开始/停止”是一个简单的更改
import javax.swing.Timer;
添加属性
Timer timer;
boolean b; // for starting and stoping animation
将以下代码添加到框架的构造函数中
timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
// change polygon data
// ...
repaint();
}
});
覆盖绘制(图形g)
并从操作执行(e)
修改的数据中绘制多边形
最后,启动/停止动画的按钮在其事件处理程序中具有以下代码
if (b) {
timer.start();
} else {
timer.stop();
}
b = !b;
抱歉,如果我的问题看起来很愚蠢,那么你说的框架构造函数(是init()方法)是什么意思呢。我在哪里实现按钮(事件处理程序)。谢谢类的构造函数是一个与类同名的方法。例如,类
public MyFrame扩展了javax.swing.JFrame
将public MyFrame(){…}
作为其构造函数。当我们使用new
关键字创建对象时,将调用构造函数。例如,可以使用以下命令创建框架对象MyFrame f=new MyFrame()代码>好的,我理解,但我不知道在扩展Javaapplet的类中哪里有框架构造函数。我在init()方法中添加了新的计时器,但它似乎无法正常工作。小程序响应单击,但多边形数据似乎没有更改。如果使用小程序,可以将代码timer=new timer…
放入init()
方法中。不需要创建构造函数。顺便说一句,您是否覆盖了公共无效绘制(图形g)
来绘制多边形?我已将代码计时器=新计时器。。。在init()方法中。在绘制方法中,我有一些类似于如果鼠标点击的坐标在多边形上,那么{timer.start();drawPolygon;}。在paint()方法中放入timer.start()可以吗?