首先,這是我使用swing的第一週,然後對不起,如果我的問題太明顯。另外,我需要使用標準java庫的解決方案,因爲這是用於作業,而且我不允許使用奇怪的庫。在Java Swing上旋轉JLabel或ImageIcon
我使用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)
二路版... 現在我與此代碼的工作。圖像旋轉,但舊的未旋轉圖像仍然保留在新的屏幕下。把一個名爲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");
}
}
}
+1表示可編譯示例;作爲一個練習,嘗試使用我的示例的RotatableImage.getImage()或@ camickr的「旋轉圖標」來完成它。 – trashgod 2010-11-27 20:10:00