javaを使って画像を任意の角度分傾けるプログラムを作りました。
コードの最後から7行目にあるMath.toRadiansの引数の数字を変えると、その数字分画像の角度が傾く、という感じです。
次のステップとして、ウィンドウ内にボタンを配置してそのボタンをクリックするごとに画像が15度ずつ傾いて表示される(15度じゃなくても構いませんが)プログラムを作りたいのですが、どうすればよいのでしょうか?
Math.toRadiansの引数を変数にして、そこから何かすればいいのかなと思うのですが・・・
よろしくおねがいします。
回答にコードも併せて記してくれるとありがたいです。
追記
回答してくれた方、アドバイスありがとうございました。
なんとか作ることができました。しかしボタンを押して画像を傾けた後、ボタンの表示が一時的に消えてしまいます(マウスを動かすとまた表示されますが)。
原因は何でしょうか?
↓ボタンを押すと・・・
画像は傾くが、ボタンが表示されなくなる
java
1import java.awt.BorderLayout; 2import java.awt.Graphics; 3import java.awt.Graphics2D; 4import java.awt.event.ActionEvent; 5import java.awt.event.ActionListener; 6import java.awt.geom.AffineTransform; 7import java.awt.image.BufferedImage; 8import java.io.File; 9 10import javax.imageio.ImageIO; 11import javax.swing.JButton; 12import javax.swing.JFrame; 13import javax.swing.JPanel; 14 15public class ImageButtonKatamuke extends JFrame implements ActionListener{ 16 public JButton addButton; 17 int rad = 0; 18 public static void main(String[] args){ 19 JFrame f = new ImageButtonKatamuke(); 20 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 f.setBounds( 0, 0, 1000, 700); 22 f.setTitle("画像表示"); 23 f.setVisible(true); 24 } 25 26 ImageButtonKatamuke(){ 27 JPanel p = new JPanel(); 28 p.setLayout(null); 29 30 addButton = new JButton("角度変更"); 31 addButton.addActionListener(this); 32 addButton.setBounds(0, 0, 160, 30); 33 34 p.add(addButton); 35 36 getContentPane().add(p, BorderLayout.CENTER); 37 } 38 39 public void actionPerformed(ActionEvent e){ 40 if (e.getSource() == addButton){ 41 rad += 15; 42 repaint(); 43 } 44 } 45 46 public void paint(Graphics g){ 47 Graphics2D g2 = (Graphics2D)g; 48 49 BufferedImage readImage = null; 50 try { 51 readImage = ImageIO.read(new File("3.bmp")); 52 } catch (Exception e) { 53 e.printStackTrace(); 54 readImage = null; 55 } 56 57 if (readImage != null){ 58 int sw = getWidth();//画面の幅を取得 59 int sh = getHeight();//画面の高さを取得 60 int iw = readImage.getWidth(this);//イメージの幅を取得 61 int ih = readImage.getHeight(this);//イメージの高さを取得 62 int x = (sw-iw)/2;//イメージが横中央になる位置を計算 63 int y = (sh-ih)/2;//イメージが縦中央になる位置を計算 64 65 g2.clearRect(0, 0, sw, sh); //画像枠外の背景を塗り潰す 66 AffineTransform at = new AffineTransform(); //new演算子を使いオブジェクトを作成 67 at.setToRotation(Math.toRadians(rad), sw/2, sh/2); //Math.toRadiansの引数の数字を変えると、その数字分角度が変わる 68 g2.setTransform(at); //画像を指定した角度傾けて上書き 69 g2.drawImage(readImage,x,y,this); 70 } 71 } 72}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。