首先,这是我使用swing的第一周,如果我的问题太明显,请见谅。另外,我需要使用标准 java 库的解决方案,因为这是为了家庭作业,我不允许使用奇怪的库。
我使用 JLabel 和 ImageIcon 在 JFrame 上显示图像。现在我想将屏幕上的图像旋转到任意角度。我发现了一些关于 Graphics2D 的东西,但我找不到这样做的方法。
由于我找到的解决方案不起作用或我不理解它们,因此我对旋转 ImageIcon 或 JLabel 的任何解决方案感兴趣。由于我将图像定位在 JLabel 上执行 setBounds,因此我认为旋转 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 版...现在我正在使用此代码。图像会旋转,但未旋转的旧图像仍保留在新图像下方的屏幕上。将一个名为 stand.png 的 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");
}
}
}