グラフィック表示

  1. 目的
    ここでは、直線や円によるグラフィック表示メソッドを紹介します。

  2. 表示法
    1. グラフィック表示
      グラフィック表示は、paint(Graphics g) というメソッドの内部で行います。アプレット内部で paint() メソッドを定義すると、ホームページを表示するブラウザが、必要なときに自動的に呼び出してくれます。

    2.  座標系
       グラフィクスは、アプレットの画面の左上を原点とします。座標は画素単位になります。高さ方向は上が0になり、y座標が大きくなると座標は下に移動します。



    3. 基本図形の描画メソッド

       以下のようなグラフィックスメソッドが利用できます。
      これ以外にも、Graphicsクラスの多くのグラフィックスメソッドが提供しています。ドキュメントを参考にして下さい。

       g.drawRect(x,y,w,h);
         矩形を表示します。(x,y)が座標、w,hは幅と高さです。

       g.fillRect(x,y,w,h);
        塗りつぶし矩形

       g.drawOval(x,y,w,h);
        楕円を描画します。
        矩形に接する楕円を描画します。

       g.fillOval(x,y,w,h);
         塗りつぶし楕円

       g.drawLine(x1, y1, x2, y2);
        2点を結ぶ直線を描画します

       g.drawString("Java AWT draw",x, y);
        文字列を描画します。
        開始位置を(x,y)で、文字列を先頭の引数で指定します。

    4. RGBカラー
      描画する色は、Colorクラスで設定します。色は(r,g,b)で、赤、緑、青、の順に、0..255に範囲で指定します。(255,0,0)は明るい赤、(0,0,0)は黒、(255,255,0)は黄色になります。
       下の例では、new Color(100, 100, 200) でカラーオブジェクトを生成し、それをc1で参照します。

        Color c1=new Color(100, 100, 200);  g.setColor(c2);

      グラフィックメソッドで利用する色は setColor で指定します。以後、変更するまで、この色で描画を行います。

       g.setColor(c1);

    5. HSBカラー
       色の色相の変化はRGBの数値では設定が困難です。色の表現方式には、他に、HSBカラーが利用できます。これは、H:色相、S:飽和度 B:明る で色を指定します。S,Bを最大の1.0とし、色をデータの番号より、0から1まで変化させると、全色相を一巡できます。具体的には、n を変化したい回数として、

       c1=Color.getHSBColor((float)i/n,(float)1.0,(float)1.0);

      で、色を設定します。これで、赤から緑、青、に変化し、赤に戻る、色環に沿った色が生成できます。

    6. 12色の色環
       12色の楕円状の色環を表示します。外回りの大きな円から、小さな円に順に塗りつぶします。
      色の数(cnum)を12色とします。最初に幅160、高さ120の円を描き、順に小さな楕円で塗りつぶします。
              int cnum=12;
              for(i=0;i<cnum;i++){
                  c1=Color.getHSBColor((float)i/cnum,(float)1.0,(float)1.0);
                  g.setColor(c1);
                  g.fillOval(40+6*i, 20+6*i, 160-12*i, 120-12*i);
              }

  3. プログラム

    1. ソース
      import java.applet.*;
      import java.awt.*;
      
      public class draw extends Applet {
      
          public void paint(Graphics g) {
              int i;
              
              Color c1 = new Color(100, 200, 100);
              g.setColor(c1);
              //矩形
              g.drawRect(5, 5, getWidth() - 10, getHeight() - 10);
      
              //楕円の色環
              int cnum=12;
              for(i=0;i<cnum;i++){
                  c1=Color.getHSBColor((float)i/cnum,(float)1.0,(float)1.0);
                  g.setColor(c1);
                  g.fillOval(40+6*i, 20+6*i, 160-12*i, 120-12*i);
              }
              g.setColor(c2);
      
      
              //格子の表示
              g.setColor(new Color(100, 100, 250));
              for (i = 0; i <= 5; i++) {
                  g.drawLine(20, 150 + 10 * i, 220, 150 + 10 * i);
              }
              for (i = 0; i <= 10; i++) {
                  g.drawLine(20 + 20 * i, 150, 20 + 20 * i, 200);
              }
          }
      
      }

    2. 実行
       最初に大きな枠を描き、その中に色環と格子を表示します。



  4. 課題

    1. 正3角形
       直線表示を利用して、辺の長さ100の正3角形を表示して下さい。

    2. グラフ
       y=x2 (-1<x<1) のグラフを表示しなさい。

      ヒント x,y ともに拡大して表示する。また、グラフィックスではyの方向が逆になる。