Tourner JLabel ou ImageIcon sur Java Swing

tout d'abord, c'est la première semaine que j'utilise swing, alors désolé si ma question est trop évident. Aussi, j'ai besoin de solutions qui utilisent les bibliothèques de base de java, car c'est pour les devoirs et je ne suis pas autorisé à utiliser étrange bibliothèques.

Je suis en utilisant JLabel avec ImageIcon pour afficher des images sur une JFrame. Maintenant, je veux faire pivoter l'image à l'écran à l'arbitraire des angles. J'ai trouvé quelque chose à propos de Graphics2D mais je ne trouve pas le moyen de le faire.

Car les solutions que j'ai trouvé ne fonctionne pas ou je ne comprends pas, je suis intéressé par toute solution pour faire tourner le ImageIcon ou le JLabel. Depuis que je suis le positionnement de l'image en faisant setBounds sur le JLabel, tourner le JLabel sera une meilleure solution je pense (de cette façon, je ne suis pas obligé d'enregistrer le ImageIcon objet de trop).

Vous remercie de votre attention et désolé pour mon mauvais anglais.

Modifier...
Pour afficher l'image dans un écran, je ne le suivant:

JFrame frame = new JFrame("Something");
frame.setLayout(new FlowLayout()); //for example
JPanel panel = new JPanel();
panel.setLayout(null);

ImageIcon playerSprite = new ImageIcon("rute/to/file.png");
JLabel player = new JLabel(playerSprite);

panel.add(player);
player.setBounds(10,10,36,52); //for example

frame.getContentPane().add(panel);
frame.setVisible(true);

La reprise, comment puis-je faire tourner cette IconImage ou le JLabel. Je peux utiliser une autre méthode pour afficher l'image si vous pensez que c'est mieux. Si la solution est d'utiliser Graphics2D, telles que je les vois, je vais apprécier une solution pour arriver à un objet de cette classe une plus tard, de retour de l'image tournée vers une ImageIcon, parce que quand j'ai essayer ce...

ImageIcon imagePlayer = new ImageIcon("img/stand.png");
Image image = imagePlayer.getImage();
Graphics2D g = (Graphics2D)image.getGraphics();

Au moment de l'exécution, la réponse est celle-ci...

Exception in thread "main" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)

2ème édition...
Maintenant, je travaille avec ce code. L'image tourne mais le vieux sans rotation de l'image reste sur l'écran en vertu de la nouvelle. Mettre une image png appelé stand.png sur le même répertoire, et vous le verrez.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.lang.Math;
public class Test {
    public static void main(String args[]) throws Exception {    
        try {
            JFrame frame = new JFrame("Rotation Test");
            frame.setBounds(10,10,1008,756);

            BufferedImage bi = ImageIO.read(new File("stand.png"));
            Graphics2D g = (Graphics2D)bi.getGraphics();
            g.rotate(Math.toRadians(45),26,26);
            g.drawImage(bi, 0, 0, null);
            JLabel player = new JLabel(new ImageIcon(bi));
            frame.getContentPane().add(player);

            player.setBounds(0,0,100,100);
            frame.setVisible(true);
        } catch (IOException ex) {
            System.out.println("Exception");
        }
    }
}
+1 pour un compilable exemple; à titre d'exercice, essayez de faire ça avec mon exemple de RotatableImage.getImage() ou @camickr de Rotated Icon.

OriginalL'auteur dgnin | 2010-11-26