如何在 Swing 中逐渐旋转图像?
此问题涉及 Java Swing 中单击按钮时旋转图像的问题。目标是让图像平滑旋转到 90 度。
问题详细信息:
提供的代码包含几个类:RotateButtonSSCE、CrossingPanelSSCE、VisualizationPanelSSCE 和一个 main TestGUISSCE 中的方法。 RotateButtonSSCE 类创建一个触发旋转的按钮,CrossingPanelSSCE 类包含需要旋转的图像,VisualizationPanelSSCE 类提供用于绘制图像的表面。
尝试逐渐旋转图像时会出现此问题。该代码尝试使用计时器来调用增量旋转图像的方法来实现此目的,但它似乎没有按预期工作。
答案:
除了@tulskiy 建议的更正之外,还需要注意的是,给定的代码存在一些可能导致该问题的结构问题。以下是关键观察和建议:
修订的代码摘录:
这里是 CrossingPanelSSCE 类旋转的修订部分图像使用AffineTransform:
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.*; public class CrossingPanelSSCE extends JPanel { // ... other code private BufferedImage image; private double rotationAngle = 0; private AffineTransform transform = new AffineTransform(); // ... other methods @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // Apply the rotation transform to the graphics context g2d.setTransform(transform); // Draw the image at its center g2d.drawImage(image, -image.getWidth() / 2, -image.getHeight() / 2, null); } public void rotateImage(double angle) { rotationAngle += angle; // Update the AffineTransform with the new rotation angle transform.rotate(Math.toRadians(angle), image.getWidth() / 2, image.getHeight() / 2); // Repaint the panel to display the updated image repaint(); } }
RotateButtonSSCE(按钮操作监听器)中的用法:
public void actionPerformed(ActionEvent ev) { vis.rotateImage(ROTATE_ANGLE_OFFSET); }
此代码将每个按钮上的旋转角度增加一个小值 (ROTATE_ANGLE_OFFSET)单击 并相应地更新图像。您可以调整 ROTATE_ANGLE_OFFSET 来控制旋转动画的速度。
以上是如何在Java Swing中使用定时器平滑地将图像旋转90度?的详细内容。更多信息请关注PHP中文网其他相关文章!