Comment faire pivoter une image progressivement dans Swing ?
Cette question concerne un problème de rotation d'une image lorsqu'on clique sur un bouton dans Java Swing . L'objectif est de faire pivoter l'image en douceur jusqu'à 90 degrés.
Détails de la question :
Le code fourni contient plusieurs classes : RotateButtonSSCE, CrossingPanelSSCE, VisualizationPanelSSCE et une classe principale. méthode dans TestGUISSCE. La classe RotateButtonSSCE crée un bouton qui déclenche la rotation, la classe CrossingPanelSSCE inclut l'image qui doit être pivotée et la classe VisualizationPanelSSCE fournit une surface pour dessiner l'image.
Le problème se pose lorsque vous essayez de faire pivoter l'image progressivement. . Le code tente d'y parvenir à l'aide d'un minuteur qui appelle une méthode pour faire pivoter l'image de manière incrémentielle, mais cela ne semble pas fonctionner comme prévu.
Réponse :
En plus des corrections suggérées par @tulskiy, il est important de noter que le code donné présente certains problèmes structurels qui peuvent contribuer au problème. Voici les principales observations et recommandations :
Extrait de code révisé :
Voici une partie révisée de la classe CrossingPanelSSCE qui effectue une rotation l'image en utilisant 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(); } }
Utilisation dans RotateButtonSSCE (Button ActionListener) :
public void actionPerformed(ActionEvent ev) { vis.rotateImage(ROTATE_ANGLE_OFFSET); }
Ce code incrémente l'angle de rotation d'une petite valeur (ROTATE_ANGLE_OFFSET) à chaque clic de bouton et met à jour l'image en conséquence. Vous pouvez ajuster le ROTATE_ANGLE_OFFSET pour contrôler la vitesse de l'animation de rotation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!