Autor: BUILDER.COM
JSP fornece muitas ferramentas simples e práticas, incluindo leitura de dados do banco de dados, envio de dados e capacidade de exibir os resultados em um gráfico de pizza. Agora vamos dar uma olhada neste método simples, mas prático.
o que você precisa
Para executar corretamente os exemplos relacionados a este artigo, você deve precisar do JDK 1.2 ou superior, um sistema de gerenciamento de banco de dados relacional e um servidor de rede JSP. Depurei esses exemplos no Tomcat e também usei as com.sun.image.codec.jpegclasses lançadas pelo Sun Java 2 SDK.
Design de banco de dados Suponha que você trabalhe para uma empresa que vende frutas frescas. As frutas vendidas pela empresa incluem: maçãs, laranjas e uvas. Agora seu chefe deseja usar um gráfico em forma de pizza para exibir o volume total de vendas de cada tipo de fruta. O gráfico em forma de pizza pode deixar claras as vendas de cada produto, e o chefe pode compreender rapidamente as transações de produtos da empresa. .
A Tabela A usa duas listas de bancos de dados deste artigo. A primeira lista (Produtos) contém os nomes de todos os produtos vendidos; a segunda lista (Vendas) contém o volume de vendas correspondente a cada produto.
A lista Produtos contém dois campos: productID e productname. A lista Vendas contém saleID, productID e valor total. O productID na lista de vendas fornece a associação entre as duas listas. Os totais na lista de vendas contêm o valor em dinheiro de cada venda como um número de ponto flutuante.
O método getProducts() na Tabela B conecta dois bancos de dados e salva todos os nomes de produtos em uma matriz. Defino as seguintes regras de banco de dados:
ProductID é o mais exclusivo na lista de produtos e é. também o mais crítico;
ProductID tem um valor 0 para o primeiro registro;
Todos os registros consecutivos subsequentes são cumulativos, portanto, o productID do segundo registro é 1, o productID do terceiro registro é 2 e assim por diante.
Essas regras de banco de dados permitem que os dados sejam armazenados na matriz de produtos, conforme mostrado abaixo:
arr[rs.getInt("productID")] = rs.getString("productname");
Alguns sistemas de gerenciamento de banco de dados permitem o armazenamento automático de dados por padrão. Acumulação ou classificação automática. Ao projetar um banco de dados, certifique-se primeiro de descobrir quais regras seu sistema de gerenciamento de banco de dados segue, como acumulação automática, classificação automática, etc.
Obtenha o volume total de vendas
Na maioria dos casos, haverá muitos registros na lista de vendas, por isso o acesso rápido e eficiente ao banco de dados é muito importante. Agora só precisamos acessar o total de vendas de cada produto do banco de dados.
O método getSales() na Tabela C se conecta ao banco de dados e retorna um array contendo o total de vendas de cada produto. Quando getSales() percorre todos os registros, ele armazena apenas o novo volume de vendas de cada produto:
int product = rs.getInt("productID");
arr[produto] += rs.getFloat("quantidade");
Cada produto no gráfico de pizza deve ser exibido em uma cor diferente. Para atingir esse objetivo, criamos um objeto pieColor (conforme mostrado na Tabela D). Este objeto contém uma matriz de cores relacionadas:
Color pieColorArray[] = {new Color(210,60,60), new Color(60,210, 60 )...}
A classe pieColor define um método setNewColor(), que pode incrementar curPieColor e o índice. Ao mesmo tempo, pode verificar se o índice não ultrapassa o intervalo limite, ou seja, o método utilizado é: se curPieColor for muito grande, um valor 0 será atribuído.
De forma mais eficiente, setNewColor() percorre cada cor e executa o seguinte código na primeira cor:
curPieColor++;
if(curPieColor >= pieColorArray.length)
{curPieColor = 0;}
RenderingHints e classes de antialiasing
A classe java.awt.RenderingHints define muitos métodos para exibir gráficos bidimensionais, incluindo métodos alpha_interpolation, dithering e antialiasing. RenderingHints ajudam a determinar como os gráficos são exibidos e como os gráficos são melhor processados.
Para exibi-lo sem problemas, você pode usar o método antialiasing para processar gráficos de pizza. Antialiasing é um método de suavização gráfica. O algoritmo seleciona o valor da cor de um pixel especial e substitui o pixel de interseção, suavizando assim a interseção das linhas.
A Figura A ilustra o efeito do método antialiasing. Pode-se observar que a intersecção das linhas do gráfico de pizza usando o método antialiasing torna-se muito suave.
A Figura A
Ao mesmo tempo, você também pode criar um objeto RenderingHints e passá-lo para o método setRenderingHints() do Graphics2D, conforme mostrado abaixo:
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
Crie bordas ajustáveis
A forma de pizza na Figura A tem uma borda. Como posso alterar o tamanho da borda? Você pode primeiro definir int border = 10 e, em seguida, calcular o tamanho da área dentro da borda para obter:
Ellipse2D.Double elb = new Ellipse2D.Double(x_pie - border/2, y_pie - border/2, pieWidth + border, pieHeight + border);
x_pie O valor de y_pie representa o canto superior esquerdo do quadrado que circunda a forma de pizza. Obtemos o centro da forma de torta tomando metade da área da borda (border/2).
Teoria do arco (arco) O método fillArc() herdado da classe java.awt.Graphics fornece um método simples para desenhar várias partes (ou arcos) de gráficos em forma de pizza:
g2d.fillArc(x_position, y_position, width, height, startAngle , sweepAngle);
os inteiros x_position e y_position representam as coordenadas x, y do canto superior esquerdo do arco a ser preenchido, e os inteiros de largura e altura representam seu tamanho específico. Se os valores de largura e altura forem iguais, o gráfico de pizza será um círculo. Se a largura e a altura não forem iguais, o gráfico de pizza será uma elipse.
O método fillArc() determina o tamanho do arco com base no valor inteiro sweepAngle. Se o valor de sweepAngle for positivo, o arco será desenhado no sentido anti-horário, caso contrário, será desenhado no sentido horário.
O primeiro passo para desenhar um arco é usar o método getPieColor() do objeto pieColor para obter a cor do arco em forma de pizza mais próximo e atribuí-lo ao arco atual:
g2d.setColor
(pc.getPieColor());
, através do array sales[] de loop contínuo e acumule-o para obter o volume total de vendas:
salesTotal
+
= sales[i];
perc = (sales [i]/salesTotal);
Calculamos sweepAngle para atribuir graus a cada parte do arco:
int
sweepAngle = (int)(perc * 360);
para o sweepAngle atual. Isso garante que a parte do arco atual comece a partir do arco anterior, criando assim uma forma de pizza completa.
Ícones de exibição Os ícones fornecem a maneira mais simples de exibir as diversas partes de um gráfico de pizza. O tamanho de um ícone deve corresponder à quantidade ocupada no gráfico de pizza.
A Figura B mostra um gráfico de pizza completo e os ícones correspondentes a cada peça, incluindo nome do produto, volume total de vendas e participação de cada peça.
Imagem B
Resumo
Este artigo descreve como usar JSP para desenhar métodos e algoritmos de gráficos de pizza. Esses métodos e algoritmos são simples e práticos e os desenvolvedores podem fazer uso completo desses métodos.