import java.applet.Applet; // アプレットを使うため import java.awt.*; // Graphics と Dimension を使うため import java.awt.event.*; // イベントを取り扱うために必要 /* */ /** 波形を描くアプレット HakeiApplet Copyright 1999 Hidetaka Masuda */ public class HakeiApplet extends Applet implements ActionListener,ItemListener { TextField maxValueTF; // テキストフィールドを入れる Choice hakeiC; // チョイスを入れる int x0, y0; // 原点のピクセル値座標 double kx, ky; // 各軸の描画の倍率 Dimension d; // アプレットの大きさ int max=1; // 最大調波数 int hakei=0; // どの波形を描くか double alpha=Math.PI / 3; // 台形の角α /** 初期化 init() */ public void init() { hakeiC = new Choice(); // チョイスの生成 hakeiC.add("Kukei"); // 項目の追加 hakeiC.add("Nokogiri"); // 項目の追加 hakeiC.add("Sankaku"); // 項目の追加 hakeiC.add("Zenpa"); // 項目の追加 hakeiC.add("Daikei"); // 項目の追加 hakeiC.addItemListener(this); // フレームをリスナとして追加 add("North", hakeiC); // チョイスをアプレットに追加 maxValueTF = new TextField(Integer.toString(max), 10); // テキストフィールドの生成 maxValueTF.addActionListener(this); // フレームをリスナとして追加 add("South", maxValueTF); // テキストフィールドをアプレットに追加 } /** 各係数の設定 setVariables() */ public void setVariables() { d = getSize(); x0 = d.width / 4; y0 = d.height / 2; kx = d.width / 4 / Math.PI; ky = d.height * 0.8 / 2 / 1.0; } /** paint()メソッドの定義 */ public void paint(Graphics g) { setVariables(); // 現在のアプレットの大きさを得て係数を設定 drawAxis(g); // 軸を描く drawSineCurve(g); // カーブを描く } /** 軸を描く drawAxis() */ public void drawAxis(Graphics g) { g.drawLine(0, y0, d.width, y0); // x軸 g.drawLine(x0, 0, x0, d.height); // y軸 } /** カーブを描く drawSineCurve() */ public void drawSineCurve(Graphics g) { int pixelX, pixelY, prevX, prevY; // x、y、直前のx、直前のyのピクセル値 double x, y; // 二次元座標上のx、y prevX = 0; // 最初のx描画点 x = toX(prevX); // x座標値へ y = hakei(x); // 関数の計算 prevY = toPixelY(y); // 最初のy描画点 for (pixelX=0; pixelX=0) { // max が0より大きい時だけ repaint(); // グラフを描く } } /** チョイスのアクション処理 itemStateChanged() */ public void itemStateChanged(ItemEvent ie) { // 項目変更時に行う処理 hakei = hakeiC.getSelectedIndex(); } }