작성자: BUILDER.COM
JSP는 데이터베이스에서 데이터 읽기, 데이터 전송, 결과를 원형 차트로 표시하는 등 간단하고 실용적인 여러 도구를 제공합니다. 이제 이 간단하면서도 실용적인 방법을 살펴보겠습니다.
당신에게 필요한 것
이 기사와 관련된 예제를 올바르게 실행하려면 JDK 1.2 이상, 관계형 데이터베이스 관리 시스템 및 JSP 네트워크 서버가 필요합니다. 저는 Tomcat에서 이러한 예제를 디버깅했으며 Sun Java 2 SDK에서 릴리스된 com.sun.image.codec.jpegclasses도 사용했습니다.
데이터베이스 설계 당신이 신선한 과일을 판매하는 회사에서 일한다고 가정해 보겠습니다. 회사에서 판매하는 과일에는 사과, 오렌지, 포도가 포함됩니다. 이제 상사는 파이 모양의 그래프를 사용하여 과일 종류별 총 판매량을 표시하려고 합니다. 파이 모양의 그래프를 통해 각 제품의 판매량을 한눈에 확인할 수 있고, 상사는 회사의 제품 거래 내역을 빠르게 파악할 수 있습니다. .
표 A는 이 기사의 두 데이터베이스 목록을 사용합니다. 첫 번째 목록(Products)에는 판매된 모든 제품의 이름이 포함되고, 두 번째 목록(Sales)에는 각 제품에 해당하는 판매량이 포함됩니다.
제품 목록에는 productID와 productname이라는 두 개의 필드가 포함되어 있습니다. 판매 목록에는 saleID, productID 및 총 금액이 포함됩니다. 판매 목록의 productID는 두 목록 간의 연결을 제공합니다. 판매 목록의 총계에는 각 판매에 대한 현금 금액이 부동 소수점 숫자로 포함되어 있습니다.
표 B의 getProducts() 메소드는 두 개의 데이터베이스를 연결하고 모든 제품 이름을 배열에 저장합니다. 저는 다음과 같은 데이터베이스 규칙을 설정했습니다.
ProductID는 제품 목록에서 가장 고유하며, 또한 가장 중요합니다.
ProductID의 첫 번째 레코드 값은 0입니다.
모든 후속 연속 레코드는 누적되므로 두 번째 레코드의 productID는 1이고 세 번째 레코드의 productID는 2입니다.
이러한 데이터베이스 규칙을 사용하면 아래와 같이 제품 배열에 데이터를 저장할 수 있습니다.
arr[rs.getInt("productID")] = rs.getString("productname");
일부 데이터베이스 관리 시스템에서는 기본적으로 데이터 자동 저장을 허용합니다. 누적 또는 자동 정렬. 데이터베이스를 설계할 때 자동 누적, 자동 정렬 등 데이터베이스 관리 시스템이 따르는 규칙이 무엇인지 먼저 확인하십시오.
총 판매량 구하기
대부분의 경우 판매 목록에는 많은 기록이 있으므로 데이터베이스에 빠르고 효율적으로 액세스하는 것이 매우 중요합니다. 이제 데이터베이스에 있는 각 제품의 총 판매량에 액세스하면 됩니다.
표 C의 getSales() 메서드는 데이터베이스에 연결하고 각 제품의 총 판매량이 포함된 배열을 반환합니다. getSales()가 모든 레코드를 탐색할 때 각 제품의 새로운 판매량만 저장합니다.
int product = rs.getInt("productID");
arr[제품] += rs.getFloat("금액");
원형 차트의 각 제품은 서로 다른 색상으로 표시되어야 합니다. 이 목적을 달성하기 위해 (표 D에 표시된 대로) PieColor 객체를 만듭니다. 이 객체에는 관련 색상 배열이 포함되어 있습니다.
Color PieColorArray[] = {new Color(210,60,60), new Color(60,210, 60 )...}
PieColor 클래스는 curPieColor 및 인덱스를 증가시킬 수 있는 setNewColor() 메서드를 정의하는 동시에 인덱스가 경계 범위를 초과하지 않는지 확인할 수 있습니다. 즉, 사용되는 메서드는 다음과 같습니다. curPieColor가 너무 크면 0 값이 할당됩니다.
보다 효율적으로 setNewColor()는 각 색상을 반복하고 첫 번째 색상에 대해 다음 코드를 실행합니다.
curPieColor++;
if(curPieColor >= PieColorArray.length)
{curPieColor = 0;}
RenderingHint 및 앤티앨리어싱 클래스
java.awt.RenderingHints 클래스는 alpha_interpolation, 디더링 및 앤티앨리어싱 메서드를 포함하여 2차원 그래픽을 표시하는 많은 메서드를 정의합니다. RenderingHint는 그래픽 표시 방법과 그래픽이 가장 잘 처리되는 방법을 결정하는 데 도움이 됩니다.
원활하게 표시하려면 앤티앨리어싱 방법을 사용하여 파이 그래픽을 처리할 수 있습니다. 앤티앨리어싱은 그래픽을 매끄럽게 하는 방법입니다. 알고리즘은 특수 픽셀의 색상 값을 선택하고 교차 픽셀을 대체하여 선의 교차를 매끄럽게 만듭니다.
그림 A는 앤티앨리어싱 방법의 효과를 보여줍니다. 앤티앨리어싱 방법을 사용하면 파이그래프의 선의 교차가 매우 매끄러워지는 것을 볼 수 있다.
그림 A는
동시에 아래와 같이 RenderingHints 객체를 생성하여 Graphics2D setRenderingHints() 메서드에 전달할 수도 있습니다.
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
렌더링Hints.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 ,weepAngle);
x_position 및 y_position 정수는 채워질 호의 왼쪽 상단 모서리의 x, y 좌표를 나타내고 너비 및 높이 정수는 특정 크기를 나타냅니다. 너비와 높이의 값이 같으면 파이 차트는 원이 됩니다. 너비와 높이가 같지 않으면 원형 차트는 타원이 됩니다.
fillArc() 메서드는 SweepAngle 정수 값을 기반으로 호의 크기를 결정합니다. SweepAngle 값이 양수이면 호는 시계 반대 방향으로 그려지고, 그렇지 않으면 시계 방향으로 그려집니다.
호를 그리는 첫 번째 단계는 PieColor 객체의 getPieColor() 메서드를 사용하여 가장 가까운 원형 호의 색상을 얻고 이를 현재 호에 지정하는 것입니다.
그런 다음
g2d.setColor(pc.getPieColor());
, 지속적으로 sales[] 배열을 반복하여 이를 누적하여 총 판매량을 얻습니다.
salesTotal += sales[i]
총 판매량을 사용하여 총 판매량에서 각 제품의 판매량이 차지하는 비율을 계산할 수 있습니다
. perc = (sales [i]/salesTotal);
호의 각 부분에 각도를 할당하기 위해weepAngle을 계산합니다.
intweepAngle = (int)(perc * 360);
호의 각 부분이 그려진 후 startAngle은 다음과 같이 증가할 수 있습니다. 현재 SweepAngle로. 이렇게 하면 현재 호 부분이 이전 호에서 시작하여 완전한 파이 모양이 만들어집니다.
표시 아이콘 아이콘은 원형 그래프의 다양한 부분을 표시하는 가장 간단한 방법을 제공합니다. 아이콘의 크기는 원형 차트에서 차지하는 크기와 일치해야 합니다.
그림 B는 전체 파이 그래프와 제품명, 총 판매량, 각 부품의 점유율을 포함하여 각 부품에 해당하는 아이콘을 보여줍니다.
그림 B
요약
이 기사에서는 JSP를 사용하여 파이 그래픽 방법 및 알고리즘을 그리는 방법을 설명하며 이러한 방법과 알고리즘은 간단하고 실용적이며 개발자는 이러한 방법을 최대한 활용할 수 있습니다.