Drehen JLabel oder ImageIcon auf Java-Swing
zunächst, dies ist die erste Woche, dass ich die Schaukel, dann sorry, wenn meine Frage ist zu offensichtlich. Auch ich brauche Lösungen, die die standard-java-Bibliotheken, da diese für die Hausaufgaben, und ich bin nicht erlaubt die Verwendung von Fremd-Bibliotheken.
Ich bin mit JLabel mit ImageIcon anzeigen von Bildern auf einem JFrame. Ich möchte jetzt drehen Sie das Bild auf dem Bildschirm, um beliebige Winkel. Ich habe etwas gefunden über Graphics2D, aber ich finde nicht den Weg das zu tun.
Da Lösungen, die ich gefunden habe funktionieren nicht oder ich Sie nicht verstehen, ich bin daran interessiert, eine Lösung drehen Sie das ImageIcon oder das JLabel. Da ich die Positionierung des Bildes zu tun setBounds auf dem JLabel, drehen Sie das JLabel wird eine bessere Lösung wie ich finde (auf diese Weise bin ich nicht gezwungen, zu sparen, das ImageIcon-Objekt auch).
Danke für Eure Aufmerksamkeit und sorry für mein schlechtes Englisch.
Bearbeiten...
Um das Bild im Bildschirm ich die nächsten:
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);
Fortsetzen, wie kann ich drehen Sie das IconImage oder das JLabel. Ich kann verwenden eine andere Methode zum anzeigen des Bildes, wenn Sie denken, dass ist besser. Wenn die Lösung verwenden Graphics2D, wie ich sehe, werde ich schätzen eine Lösung zu kommen, um ein Objekt dieser Klasse einer späteren Rückkehr das gedrehte Bild in ein ImageIcon, weil wenn ich es versuchen...
ImageIcon imagePlayer = new ImageIcon("img/stand.png");
Image image = imagePlayer.getImage();
Graphics2D g = (Graphics2D)image.getGraphics();
Zeitpunkt der Ausführung, die Antwort ist...
Exception in thread "main" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)
2th edition...
Jetzt arbeite ich mit diesem code. Das Bild dreht sich, aber die alten nicht gedrehte Bild bleibt auf dem Bildschirm unter dem neuen. Setzen Sie ein png-Bild mit dem Namen stehen.png auf dem selben Verzeichnis, und Sie werden es sehen.
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 für eine kompilierbare Beispiel; als übung versuchen, indem Sie es komplett mit meinem Beispiel
RotatableImage.getImage()
oder @camickr istRotated Icon
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstelle von rotierenden Komponente selbst, betrachten drehen der Inhalt einer Komponente. Diese Beispiel zieht ein gedrehtes Bild in einem
JPanel
.Nachtrag: In der Beispiel
RotatableImage.getImage()
schafft eineBufferedImage
direkt im Speicher, aber Sie könnenImageIO.read()
erhalten Sie ein Bild von anderswo.BufferedImage#createGraphics()
wird unterstützt, wenn Sie wollen, um das Bild zu ändern, aber Sie wahrscheinlich wollen einfach nur, um zu zeichnen das unveränderte Bild gedreht Grafik-Kontext als Teil derpaintComponent()
.Nachtrag: Sie sind in der Malerei das Bild mit einer gedrehten kopieren; stattdessen ziehen Sie das Bild in eine gedrehte Grafiken Kontext:
rotate()
um den Effekt zu sehen.Gut, wenn Sie nicht verstehen, dann sollten Sie die post Ihre SSCCE (http://sscce.org) demonstrieren Ihre test-code. Dann vielleicht wird jemand in der Lage sein, zu erklären, wie der code funktioniert.
Bezweifle ich, Sie wäre in der Lage zu verstehen, eine neue code könnten wir posten, da die Konzepte von rotation, ein Bild oder ein Symbol sind alle gleich.
Warum verwenden Sie setBounds(). Sollten Sie einen layout-manager, so dass Sie nicht haben, um Angst zu haben.
Edit:
Vielleicht können Sie ein Gedreht Symbol.