棒グラフ

棒グラフを描くプログラム

次のような棒グラフをつくります。

棒グラフの課題

ファイル名 DrawRectG.java

import java.awt.*;
import javax.swing.*;

public class DrawRectG extends JFrame{
    public DrawRectG() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("グラフ");
        setLayout(new BorderLayout());
        MyPanel mypnl = new MyPanel();
        add(mypnl, BorderLayout.CENTER);
        mypnl.setBackground(Color.white);
        mypnl.setPreferredSize(new Dimension(400,300));
        pack();
        setVisible(true);
    }
    public static void main(String[] args){
        DrawRectG myframe = new DrawRectG();
    }

    public class MyPanel extends JPanel{
        int[] data={10,40,120,60,80};
        int yzero=250;
        int left =50;
        int top  =50;
        int dx = 50;
        public void paintComponent(Graphics myg){
           super.paintComponent(myg);
           myg.setColor(new Color(0,0,0));
           myg.drawLine(x1,y1,x2,y2); //x軸
           myg.drawLine(x1,y1,x2,y2); //y軸
           myg.setColor(new Color(0,0,255));
           for(int i=0; data.length>i ; i++){
               myg.fillRact(x,y,w,h);
           }
        }
    }
}

paintComponent()内は未完成です。drawLineのx1,y1,x2,y2や fillRectのx,y,w,hは別の値やyzero,left,dx,data[i]を使った式に置き換えなければなりません。

パネルの大きさ

一番外側のJFrameはsetSize()で大きさを指定していましたが、それでは中に入るJPanelがそれより小さくなります。

グラフを描くにあたりパネルの大きさを指定したいのでsetPreferredSize()を使いました。大きさはDimensionというクラスを使いますが、上記のように書けば400x300になります。

pack()をすればパネルに合わせてフレームの大きさをあわせてくれます。

x軸,y軸を描く

プログラムの中に定数として yzero, left, top を書いていますが意味は次の図のとおりです。

int yzero=250;
int left =50;
int top  =50;

x軸,y軸を描く

y軸は次のようにすればできます。

myg.drawLine(left,top,left,yzero); //y軸

グラフにするデータはdata[]に入っていてその数はdata.lengthです。

x軸の右端は一つの棒の領域幅をdxとしてデータ数分あればいいので次のようにすればできます。

myg.drawLine(left,yzero,left+dx*data.length,yzero); //x軸

データ数はdata.lengthですから、繰り返しはforを使います。

for(int i=0; data.length>i ; i++){

最初のデータの棒を描く横位置はy軸よりちょっと右がいいでしょう。

myg.fillRect(left+10+dx*i,top,dx/2,data[i]);

棒を描く横位置はdxずつ右によせて行かないと重なってしまいます。i が0から始まりますから一番最初は left+10 で好都合です。

myg.fillRect(left+10+dx*i,top,dx/2,data[i]);

棒を描く縦位置はちょっと難しいのでとりあえず top にします。これは後で変更します。

myg.fillRect(left+10+dx*i,top,dx/2,data[i]);

棒の幅はdxの半分にしましょう。

myg.fillRect(left+10+dx*i,top,dx/2,data[i]);

棒の高さはdata[i]にしましょう。最大で120ですから、そのまま描いてもはみ出しません。

myg.fillRect(left+10+dx*i,top,dx/2,data[i]);

棒を描く

棒の高さはdata[i]でいいのですが、棒を描く縦位置を変更しなければなりません。次の図を参考に変更しなさい。

棒を描く

課題

1

上記プログラムをつくりなさい。

ファイル名 DrawRectG.java


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Oct.2009
Oct.2012