Поверните JLabel или ImageIcon на Java Swing

во-первых, это первая неделя, когда я использую качели, извините, если мой вопрос слишком очевиден . Кроме того, мне нужны решения, в которых используются стандартные библиотеки Java, поскольку это для домашних заданий, и мне не разрешено использовать странные библиотеки.

I ' m с помощью JLabel с ImageIcon для отображения изображений в JFrame. Теперь я хочу повернуть изображение на экране под произвольным углом. Я кое-что нашел о Graphics2D, но не нашел способа сделать это.

Поскольку решения, которые я нашел, не работают или я их не понимаю, меня интересует любое решение для поворота ImageIcon или JLabel. Поскольку я позиционирую изображение, выполняя setBounds на JLabel, повернуть JLabel будет лучшим решением, я думаю (таким образом меня не заставляют также сохранять объект ImageIcon).

Спасибо за внимание и извините за мой плохой английский.

Редактировать ... m заинтересован в любом решении для поворота ImageIcon или JLabel. Поскольку я позиционирую изображение, выполняя setBounds на JLabel, повернуть JLabel будет лучшим решением, я думаю (таким образом меня не заставляют также сохранять объект ImageIcon).

Спасибо за внимание и извините за мой плохой английский.

Редактировать ... m заинтересован в любом решении для поворота 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");
        }
    }
}
7
задан mKorbel 8 June 2013 в 10:55
поделиться