Swing で画像を徐々に回転させる方法は?
この質問は、Java Swing でボタンがクリックされたときの画像の回転に関する問題に関するものです。 。目標は、画像を 90 度までスムーズに回転させることです。
質問の詳細:
提供されたコードには、RotateButtonSSCE、CrossingPanelSSCE、VisualizationPanelSSCE、およびメインのいくつかのクラスが含まれています。 TestGUISCE のメソッド。 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 での使用法 (ボタン ActionListener):
public void actionPerformed(ActionEvent ev) { vis.rotateImage(ROTATE_ANGLE_OFFSET); }
このコードは、各ボタンの回転角度を小さい値 (ROTATE_ANGLE_OFFSET) ずつ増分します。をクリックすると、それに応じて画像が更新されます。 ROTATE_ANGLE_OFFSET を調整して、回転アニメーションの速度を制御できます。
以上がJava Swing でタイマーを使用して画像をスムーズに 90 度回転する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。