import java.applet.*; import java.awt.*; import java.lang.Math; public class enGraph extends Applet{ int Max; int r; public Dimension WindowSize; public void paint(Graphics g){ String tempStr; String BgColor; Color color; WindowSize = new Dimension(); WindowSize = getSize(); r = WindowSize.width; if(WindowSize.height < r){ r = WindowSize.height; } BgColor = getParameter("BgColor"); if(BgColor.equals(null) == true){ BgColor = "" + "ffffff"; } color = new Color(Integer.valueOf(BgColor,16).intValue()); g.setColor(color); g.fillRect(0,0,WindowSize.width,WindowSize.height); Max = 0; mainFunc(1,g); } // 配列を使わないかわりに // グローバル変数 max に値を入れていき // すべての値を格納してから // (値を取得したときに null かどうかで、再帰処理の終端処理としている) // その max 値を 100% とするように、 // 後ろから円弧を描いていく。 // (そのために、Arc という変数が各色{項目}ごと用意された) void mainFunc(int i,Graphics g){ String tempStr; Color color; int Arc; int MyValue; tempStr = getParameter("Value" + i); if(tempStr != null){ Arc = Max; MyValue = Integer.valueOf(tempStr,10).intValue(); Max = Max + MyValue; mainFunc(i+1,g); // デバグに使用 // g.setColor(Color.white); // g.drawString(Arc + "-" + Max + (360 * Arc / Max) ,0,10*i+10); tempStr = getParameter("Color" + i); color = new Color(Integer.valueOf(tempStr,16).intValue()); g.setColor(color); g.fillArc((int)((WindowSize.width - r)/2), (int)((WindowSize.height - r)/2), r, r, 90, (int)(-360 * (MyValue + Arc) / Max)); } } }