如何在 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中文網其他相關文章!