• 締切済み

【javaアプレット】スクロールバーを動かすとその場で正三角形を回転させたい

スクロールーバーを移動させると、表示している正三角形がその場で回転するプログラムを作りたいのですが、まったくわかりません・・・。 正三角形を作る座標は既にできてます。cos、sinを使うやつですよね? でも、スクロールバーの値を読み取って、どうやって回転するように座標に組み込むかがわかりません。 知恵を貸してくださいm(__)mお願いします。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.3

 以下は、下のスクロールバーを動かすと上の三角形が回転するアプレットのサンプルです。 画数は、ページのparamタグで指定しています。 -----アプレット----- import java.applet.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; public class triapp extends Applet { VolatileImage OSI = null; Graphics G; int N, X[], Y[], W, H; Scrollbar SB; public void init() { try { N = Integer.parseInt(getParameter("N")); } catch (Exception e) { N = 3; }; W = getWidth(); H = getHeight(); X = new int[N]; Y = new int[N]; setLayout(new BorderLayout()); SB = new Scrollbar(Scrollbar.HORIZONTAL, 0, 60, -314, 314 + 60); add(SB, BorderLayout.SOUTH); SB.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { MakeTriangle((double)e.getValue() / 100.0); repaint(); }; }); }; public void start() { OSI = createVolatileImage(W, H); G = OSI.getGraphics(); G.setColor(Color.RED); MakeTriangle(0.0); repaint(); }; public void MakeTriangle(double t) { G.clearRect(0, 0, W, H); for (int i = 0; i < N; i ++) { double d = 2 * Math.PI * (double)i / (double)N + t; X[i] = (int)(Math.sin(d) * 100) + W / 2; Y[i] = - (int)(Math.cos(d) * 100) + H / 2; if (i == 0) G.drawOval(X[0] - 10, Y[0] - 10, 20, 20); }; G.drawPolygon(X, Y, N); }; public void paint(Graphics g) { if (OSI != null) g.drawImage(OSI, 0, 0, this); }; public void update(Graphics g) { paint(g); }; } -----ページHTML----- <html> <head><title>Rotate Triangle</title></head> <body><center> <applet codebase="." code="triapp" width="320" height="280"> <param name="N" value="3"> <applet codebase="." code="triapp" width="320" height="280"> <param name="N" value="7"> </applet> </center></body> </html>

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

Swing的(つまりMVC的)にやるなら、 スクロールバーからモデル(BoundedRangeModelオブジェクト)をゲットして、それにChangeListenerをaddします。ChangeListenerのstateChanged()メソッドの中で、スクロールバーのgetValue()の値を見ながら角度を表すパラメータthetaの値を変えて、三角形を表示しているパネルのrepaint()をコールします。 三角形を表示しているパネルのpaintComponent()の中では、引数のGraphics->Graphics2Dがrotate(theta, x, y)をコールします。x,yは座標変換(translate)の量です。以上により、回転が実現します。

回答No.1

ソースコードを見ないと何ともいえませんが スクロールバーのクラスとして、 たとえば、JScrollBarを使っているとすると そのgetValueメソッドでスクロールバーの値を取得し Math.PIとかけ合せて、10でも20でも好きな数で割った値を cos、sinの引数に足し算すれば求まるのではないのでしょうか?

関連するQ&A