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");
}
}
}
RotatableImage.getImage()
ou @camickr de Rotated Icon
.OriginalL'auteur dgnin | 2010-11-26
Vous devez vous connecter pour publier un commentaire.
Au lieu de faire tourner le composant lui-même, considérer la rotation de la contenu d'un composant. Cette exemple dessine une image pivotée dans un
JPanel
.Addendum: Dans le exemple
RotatableImage.getImage()
crée unBufferedImage
directement dans la mémoire, mais vous pouvez utiliserImageIO.read()
pour obtenir une image à partir d'ailleurs.BufferedImage#createGraphics()
est pris en charge si vous souhaitez modifier l'image, mais vous avez probablement juste de vouloir attirer l'image non modifiée en une rotation du contexte graphique dans le cadre depaintComponent()
.Addendum: Vous êtes à la peinture sur l'image avec une copie en rotation; au lieu de cela, dessiner l'image dans une rotation du contexte graphique:
J'ai décrits ci-dessus.
Ok, je ne comprends pas tout ton code et il y a probablement la raison pourquoi le mien ne parvient pas mais au moins le problème est un peu résolu. J'ai éditer mon premier post avec le nouveau code que j'ai écrit et de l'image tourne, mais le sans rotation de l'image d'origine est également montré. J'ai fatigué pour créer un nouveau BufferedImage (même taille et de même type), et de la peinture il y a la rotation, mais ça ne fonctionne pas (peintures que l'original sans rotation de l'image).
Vous êtes en train de peindre sur l'image que vous venez de lire; plus de ci-dessus.
Je vous remercie pour votre aide. Enfin, il fonctionne 🙂
OriginalL'auteur trashgod
Bien, si vous ne les comprenez pas, alors vous devriez poster votre SSCCE (http://sscce.org) démontrer votre code de test. Alors peut-être que quelqu'un sera en mesure d'expliquer comment le code du travail.
Je doute que vous puissiez comprendre tout nouveau code nous pourrions envoyer depuis les concepts de la rotation d'une image ou d'une Icône sont tous les mêmes.
Pourquoi êtes-vous à l'aide de setBounds(). Vous devez utiliser un layout manager, de sorte que vous n'avez pas à vous inquiéter à ce sujet.
Edit:
Peut-être vous pouvez utiliser un Tourné Icône.
Cependant, j'ai édité le poste principal avec quelques exemples (je l'espère, il peut être considéré comme SSCCE :D) qui illustre mon problème. Je vous remercie.
comment estimez-vous qu'un SSCCE? Comment est-ce que le code compileable? Voir mon edit.
J'ai utiliser des bibliothèques standard.
si vous regardez le code et comprendre comment il fonctionne et ensuite modifier le code de vos propres besoins. Il n'y a pas de "bibliothèque standard" qu'est-ce que vous voulez. Vous avez besoin d'utiliser les différentes méthodes de la norme bibliothèques pour atteindre votre but désiré. C'est pourquoi ma première suggestion dit, vous avez besoin de poster le code que vous avez tenté d'utiliser.
OriginalL'auteur camickr