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

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

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

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

Q&A

解決済

1回答

1382閲覧

AWTスレッド

Launcher

総合スコア19

Swing

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

0グッド

0クリップ

投稿2017/02/07 06:33

現在Eclipseを使ってSwingでlauncherを制作しています。

画像ボタンになっていて、各ボタンを押すとそこに設定されているショートカットが起動する仕組みになっています。

AWTスレッドを使って
真ん中のボタンをクリックすると画像のように、各ボタンの位置が回るようにしたいです。(画像は表示するPictuerを変更しているだけ)

イメージ説明
イメージ説明

ボタンの座標は固定してあり、サイズは位置によって計算して変化します。

どのようなクラスが必要なのか、どのようなソースになるのか、調べていますが全く分かりません

アニメーションで表現したいのですがアニメーションをどう実現したらよいかわかりません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

アニメーションというのはちょっとずつ違った画像を一定時間ごとに書き直すことで実現します。基本は「一定時間ごとに再描画の契機を設ける」ことと「時間経過に応じた図形内容の再計算・再描画」になります。再描画は適当なJComponentのpaintComponentメソッドに実装することになるでしょう。

  • 一定時間ごとに再描画の契機を設ける

java.awt.Timerを使うとよいでしょう。インターバルを指定できますので例えば0.1秒ごとに再描画といったことができます。

  • アイコンの位置

時間経過に従い軌道中心からみた角度が変化すると考えればよいですね。一番奥の位置を0度、一番手前を180度と考えると以下の計算になります。角度の単位はラジアンなのでdegree(1周が360度)をパラメーターとしたいならradian = Math.toRadians(degree)を使います。
int x = xCenter + (int)(Math.sin(角度)*軌道長半径)
int y = yCenter - (int)(Math.cos(角度)*軌道短半径)

  • アイコンの大きさ

透視投影の考え方を用いて視点からの距離によって遠くにあるほど小さくなるような計算をします。視点からの距離をDとするとアイコンの見かけ上の大きさはDに反比例します。
double D = Dmin + (Dmax - Dmin) / 2 * Math.cos(角度)
といった感じで距離が求められるのでそこからアイコンの大きさを計算します。アイコンの画像(java.awt.Image)をスケーリングしつつ描画するには例えば以下が使えるでしょう。
Graphics#drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)

投稿2017/02/10 04:08

KSwordOfHaste

総合スコア18392

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

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

KSwordOfHaste

2017/02/10 07:49

ありゃ・・・次の質問で答えが・・・
Launcher

2017/02/13 00:56

いいえ! 角度はとても分かりやすいです! ぜひ使わせていだたきます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問