まずはスイングを使う最初の週ですが、私の質問があまりにも明白であれば申し訳ありません。また、標準的なJavaライブラリを使用するソリューションが必要です。これは宿題のためであり、私は奇妙なライブラリを使用することはできません。JavaスイングでJLabelまたはImageIconを回転させよう
私はImageIconでJLabelを使用して、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 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");
}
}
}
+1はコンパイル可能な例です。私の例の 'RotatableImage.getImage()'や@ camickrの 'Rotated Icon'を使って完成させてみてください。 – trashgod