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();
}
}