まず第一に、これは私がスイングを使用する最初の週です、そして私の質問があまりにも明白であるならば申し訳ありません。また、これは宿題用であり、奇妙なライブラリを使用することは許可されていないため、標準のJavaライブラリを使用するソリューションが必要です。
JFrameに画像を表示するためにImageIconでJLabelを使用しています。次に、画面上の画像を任意の角度に回転させます。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");
}
}
}