Прежде всего, это первая неделя, когда я использую свинг, затем извините, если мой вопрос слишком очевиден. Кроме того, мне нужны решения, в которых используются стандартные библиотеки Java, так как они предназначены для домашней работы, и мне запрещено использовать странные библиотеки.
Я использую JLabel с ImageIcon для показа изображений на JFrame. Теперь я хочу повернуть изображение на экране под произвольными углами. Я нашел кое-что о Graphics2D, но я не нашел способ сделать это.
Поскольку найденные мной решения не работают или я их не понимаю, меня интересует любое решение для поворота ImageIcon или JLabel. Так как я позиционирую изображение с помощью setBounds на JLabel, поворот JLabel будет лучшим решением, я думаю (таким образом я не буду вынужден сохранять объект ImageIcon тоже).
Спасибо за ваше внимание и извините за мой плохой английский.
Редактировать ...
Чтобы показать изображение на экране, я делаю следующее:
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);
Продолжая, как я могу повернуть этот IconImage или JLabel. Я могу использовать другой метод, чтобы показать изображение, если вы думаете, что лучше. Если решение заключается в использовании Graphics2D, как я вижу, я буду признателен за решение, чтобы прибыть к объекту этого класса, а затем вернуть повернутое изображение в ImageIcon, потому что когда я пытаюсь это сделать ...
ImageIcon imagePlayer = new ImageIcon("img/stand.png");
Image image = imagePlayer.getImage();
Graphics2D g = (Graphics2D)image.getGraphics();
Во время исполнения ответ таков:
Exception in thread "main" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)
2-е издание ...
Сейчас я работаю с этим кодом. Изображение поворачивается, но старое не повернутое изображение все еще остается на экране под новым. Поместите изображение png с именем stand.png в тот же каталог, и вы увидите его.
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");
}
}
}