摇摆动画延迟可以通过使用Swing Timer来解决,而不是SwingWorker。下面是一个使用Swing Timer来创建摇摆动画的示例代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SwingAnimationDelayExample extends JFrame {
private JLabel label;
public SwingAnimationDelayExample() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Swing Animation Delay Example");
label = new JLabel("Swing Animation");
label.setFont(new Font("Arial", Font.BOLD, 24));
label.setHorizontalAlignment(SwingConstants.CENTER);
add(label, BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
startAnimation();
}
private void startAnimation() {
Timer timer = new Timer(500, new ActionListener() {
private int angle = 0;
private int delta = 10;
@Override
public void actionPerformed(ActionEvent e) {
if (angle == 0 || angle == 90) {
delta = -delta;
}
angle += delta;
label.setRotation(Math.toRadians(angle));
}
});
timer.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new SwingAnimationDelayExample().setVisible(true);
}
});
}
}
在这个示例中,我们使用了一个Swing Timer来定期更新标签的旋转角度。通过调整定时器的延迟时间,可以控制动画的速度。在actionPerformed
方法中,我们根据当前角度来计算下一个角度,并将其应用于标签的旋转。当角度达到0或90时,我们切换旋转方向,以实现摇摆效果。
请注意,这个示例使用Java的内置旋转功能来实现标签的旋转。如果您使用的是较旧的Java版本,可能需要使用其他库或手动计算旋转效果。