著者: BUILDER.COM
JSP は、データベースからのデータの読み取り、データの送信、結果の円グラフでの表示など、シンプルで実用的なツールを多数提供します。それでは、このシンプルかつ実用的な方法を見てみましょう。
必要なもの
この記事に関連する例を正しく実行するには、JDK 1.2 以降、リレーショナル データベース管理システム、および JSP ネットワーク サーバーが必要です。これらの例は Tomcat でデバッグし、Sun Java 2 SDK によってリリースされた com.sun.image.codec.jpegclasses も使用しました。
データベースの設計 生鮮果物を販売する会社に勤めているとします。その会社で販売されている果物には、リンゴ、オレンジ、ブドウが含まれます。上司は、円グラフを使用して果物の種類ごとの総売上高を表示したいと考えています。円グラフを使用すると、各製品の売上が一目でわかり、上司は会社の製品取引をすぐに把握できます。 。
表 A では、この記事の 2 つのデータベース リストを使用します。最初のリスト (製品) には販売されたすべての製品の名前が含まれ、2 番目のリスト (売上) には各製品に対応する販売数量が含まれます。
製品リストには、productID と productname という 2 つのフィールドが含まれています。 Sales リストには、saleID、productID、および合計金額が含まれます。販売リストの productID は、2 つのリスト間の関連付けを提供します。売上リストの合計には、各売上の現金金額が浮動小数点数として含まれます。
表 B の getProducts() メソッドは 2 つのデータベースを接続し、すべての製品名を配列に保存します。 次のデータベース ルールを設定します。
ProductID は製品リスト内で最も一意です。最も重要なことでもあります。
ProductID の最初のレコードの値は 0 です。
後続のすべての連続レコードは累積されるため、2 番目のレコードの productID は 1、3 番目のレコードの productID は 2 などとなります。
これらのデータベース ルールでは、以下に示すように、データを product 配列に保存できます。
arr[rs.getInt("productID")] = rs.getString("productname");
一部のデータベース管理システムでは、デフォルトでデータの自動保存が許可されています。蓄積または自動仕分け。データベースを設計するときは、まず、データベース管理システムが自動蓄積や自動ソートなど、どのようなルールに従っているかを確認してください。
総販売量を取得する
ほとんどの場合、販売リストには多数のレコードが含まれるため、データベースに迅速かつ効率的にアクセスすることが非常に重要です。ここで必要なのは、データベース内の各製品の総売上高にアクセスすることだけです。
表 C の getSales() メソッドはデータベースに接続し、各製品の総売上高を含む配列を返します。 getSales() がすべてのレコードを走査すると、各製品の新しい販売数量のみが保存されます。
int product = rs.getInt("productID");
arr[製品] += rs.getFloat("金額");
円グラフ上の各製品は異なる色で表示される必要があります。この目的を達成するために、pieColor オブジェクトを作成します (表 D を参照)。このオブジェクトには関連する色の配列が含まれています:
Color pieColorArray[] = {new Color(210,60,60), new Color(60,210, 60 )...}
pieColor クラスは、curPieColor とインデックスをインクリメントできる setNewColor() メソッドを定義します。同時に、インデックスが境界範囲を超えていないことを確認できます。つまり、使用されるメソッドは次のとおりです。 curPieColor が大きすぎる場合は、値 0 が割り当てられます。
より効率的に、setNewColor() は各色をループし、最初の色で次のコードを実行します
。
if(curPieColor >= pieColorArray.length)
{curPieColor = 0;}
RenderingHints とアンチエイリアス クラス
java.awt.RenderingHints クラスは、alpha_interpolation、ディザリング、アンチエイリアス メソッドなど、2 次元グラフィックスを表示するための多くのメソッドを定義します。 RenderingHints は、グラフィックスの表示方法とグラフィックスの最適な処理方法を決定するのに役立ちます。
スムーズに表示するために、円グラフをアンチエイリアス処理する方法を使用できます。アンチエイリアスはグラフィックスを滑らかにする方法です。このアルゴリズムは特別なピクセルのカラー値を選択し、交差ピクセルを置き換えることにより、線の交差を滑らかにします。
図 A は、アンチエイリアス手法の効果を示しています。アンチエイリアシング手法を使用した円グラフの線の交差が非常に滑らかになっていることがわかります。
図 A
同時に、以下に示すように、RenderingHints オブジェクトを作成して Graphics2D setRenderingHints() メソッドに渡すこともできます。
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
調整可能な境界線を作成します
。図 A の円形には境界線があります。境界線のサイズを変更するにはどうすればよいですか?最初に int border = 10 を定義し、次に境界内の領域のサイズを計算して次のように達成します。
Ellipse2D.Double elb = new Ellipse2D.Double(x_pie - border/2, y_pie - border/2, pieWidth + border, pieHeight + border);
x_pie y_pie の値は、円の形状を囲む正方形の左上隅を表します。境界領域の半分 (border/2) を取得することで、円形の中心を取得します。
円弧 (Arc) 理論 java.awt.Graphics クラスから継承された fillArc() メソッドは、円グラフのさまざまな部分 (または円弧) を描画するための単純なメソッドを提供します。
g2d.fillArc(x_position, y_position, width, height, startAngle) 、スイープ角度);
x_position および y_position の整数は、塗りつぶされる円弧の左上隅の x、y 座標を表し、幅と高さの整数はその特定のサイズを表します。幅と高さの値が等しい場合、円グラフは円になります。幅と高さが等しくない場合、円グラフは楕円になります。
fillArc() メソッドは、sweepeAngle 整数値に基づいて円弧のサイズを決定します。スイープ角度の値が正の場合、円弧は反時計回りの方向に描画され、それ以外の場合は時計回りの方向に描画されます。
円弧を描画する最初のステップは、pieColor オブジェクトの getPieColor() メソッドを使用して、最も近い円弧の色を取得し、それを現在の円弧に割り当てること
です
。
sales[] 配列を継続的にループし、それを累積して総売上高を取得します:
salesTotal += sales[i];
総売上高を使用して、総売上高に占める各製品の売上の割合を計算できます:
float perc = (sales [i]/salesTotal);
円弧の各部分に角度を割り当てるために sweepeAngle を計算します。
int スイープ角度 = (int)(perc * 360);
円弧の各部分が描画された後、startAngle は次のように増加します。現在の スイープ角度に設定します。これにより、現在の円弧部分が前の円弧から始まるようになり、完全な円形が作成されます。
アイコンの表示 アイコンは、円グラフのさまざまな部分を表示する最も簡単な方法を提供します。アイコンのサイズは、円グラフ内に占める量に対応する必要があります。
図 B は、完全な円グラフと、製品名、総売上高、各部分のシェアなど、各部分に対応するアイコンを示しています。
写真B
概要
この記事では、JSP を使用して円グラフを描画する方法とアルゴリズムについて説明します。これらのメソッドとアルゴリズムはシンプルで実用的であり、開発者はこれらのメソッドを最大限に活用できます。