質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

2回答

5532閲覧

ボタンをクリックするごとに画像を15度ずつ傾けさせたい

fmams1994

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2015/08/04 04:05

編集2015/08/04 19:09

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

public void plus15() { rad += 15; f.repaint(); }

雑な命名ですみませんが、こんな関数用意するとかですかね。必要な変数はもたせておく必要がありますが。

投稿2015/08/04 05:08

supikid

総合スコア139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もうほぼ答えなのではないでしょうか?
回転角を管理する変数をどこかに持たせて,
ボタンを押した時にその変数を変化させて
もう一度paintする仕組みにすれば解決のように思えます.

投稿2015/08/04 04:35

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問