Páginas
Download J Planet
Downloads Java
Fórum
Canal do YouTube
Página no Face
sábado, 21 de julho de 2012
Gráfico com Efeito 3D usando Java 2D
Exemplo 1:
DesenhandoGraficos3DExemplo1.java
/* * DesenhandoGraficos3DExemplo1.java */ import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; /** * * @author Andreia */ public class DesenhandoGraficos3DExemplo1 extends JPanel { private int x_linhaVertical = 40; private int y_linhaVertical = 60; private int larguraColuna = 20;//largura da coluna private int margem = 10; private int altura = 160; // altura do grafico //* use na 'altura' um numero divisivel pela quantidade de linhas private int quantidadeLinhas = 8; private int espaco = 10; // espaco entre valores private String[] rotulos; private List<int[]> dadosList = new ArrayList<int[]>(); private List<Color> cores = new ArrayList<Color>(); private List<String> legendas = new ArrayList<String>(); private String tituloGrafico; @Override public void paintComponent(Graphics g) { super.paintComponent(g); this.setBackground(Color.WHITE); desenhaLinhasDoGrafico(g); desenhaRotulos(g); desenhaLegenda(g); for (int i = 0; i < rotulos.length; i++) { for (int j = 0; j < dadosList.size(); j++) { int dado = dadosList.get(j)[i]; // seta cor da coluna g.setColor(cores.get(j)); int xPonto = i * espaco * 2 + (j + 1) * larguraColuna + (dadosList.size() * larguraColuna) * i + x_linhaVertical; int yPonto = (altura + y_linhaVertical) - dado; // desenha colunas do grafico g.fillRect(xPonto, yPonto, larguraColuna, dado); /* * Desenha efeito 3D */ // seta cor do poligono de cima g.setColor(escurecer(cores.get(j))); // desenha poligono de cima da coluna int xValues3[] = {xPonto, xPonto + 5, xPonto + larguraColuna + 5, xPonto + larguraColuna}; int yValues3[] = {yPonto, yPonto - 5, yPonto - 5, yPonto}; g.fillPolygon(xValues3, yValues3, 4); // seta cor do poligono lateral g.setColor(escurecer(escurecer(cores.get(j)))); // desenha poligono lateral da coluna int xValues1[] = {xPonto + larguraColuna + 5, xPonto + larguraColuna, xPonto + larguraColuna, xPonto + larguraColuna + 5}; int yValues1[] = {yPonto - 5, yPonto, yPonto + dado, yPonto - 5 + dado}; g.fillPolygon(xValues1, yValues1, 4); } // fim do for } // fim do for dados /* * desenha titulo do grafico */ g.setColor(Color.BLACK); g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 14)); g.drawString(tituloGrafico, margem, margem * 3); } // fim do metodo paintComponent private void desenhaLinhasDoGrafico(Graphics g) { int x2_linhaHorizontal = rotulos.length * espaco * 2 + larguraColuna + (dadosList.size() * larguraColuna) * rotulos.length + x_linhaVertical - 5; // comprimento da linha horizontal g.setColor(Color.BLACK); // desenha linha vertical g.drawLine(x_linhaVertical, y_linhaVertical + 5, x_linhaVertical, y_linhaVertical + altura + 5 + 5); // desenha linhas horizontais int contador = altura; for (int i = 0; i <= quantidadeLinhas; i++) { int y_linhaHorizontal = y_linhaVertical + i * (altura / quantidadeLinhas); // desenha linhas g.drawLine(x_linhaVertical, y_linhaHorizontal + 5, x_linhaVertical + larguraColuna - 5, y_linhaHorizontal - 10); g.drawLine(x_linhaVertical + larguraColuna - 5, y_linhaHorizontal - 10, x2_linhaHorizontal + 10, y_linhaHorizontal - 10); if (i == quantidadeLinhas) { // se: ultima linha g.drawLine(x2_linhaHorizontal + 10, y_linhaHorizontal - 10, x2_linhaHorizontal - larguraColuna + 15, y_linhaHorizontal + 5); g.drawLine(x2_linhaHorizontal - larguraColuna + 15, y_linhaHorizontal + 5, x_linhaVertical, y_linhaHorizontal + 5); } /** * fim do novo codigo */ // desenha numeros g.drawString("" + contador, margem, y_linhaHorizontal + 5); contador -= (altura / quantidadeLinhas); } // fim do for } // fim do metodo desenhaLinhasDoGrafico private void desenhaRotulos(Graphics g) { for (int i = 0; i < rotulos.length; i++) { g.setColor(Color.BLACK); // desenha rotulos g.drawString(rotulos[i], i * espaco * 2 + larguraColuna + (dadosList.size() * larguraColuna) * i + x_linhaVertical, altura + y_linhaVertical + 20); // desenha tracos da linha horizontal g.drawLine((i * 2 + 1) * espaco + larguraColuna + (dadosList.size() * larguraColuna) * (i + 1) + x_linhaVertical, altura + y_linhaVertical + 10, (i * 2 + 1) * espaco + larguraColuna + (dadosList.size() * larguraColuna) * (i + 1) + x_linhaVertical, altura + y_linhaVertical + 5); } // fim do for } // fim do metodo desenhaRotulos /** * desenha legenda de cores */ private void desenhaLegenda(Graphics g) { for (int j = 0; j < dadosList.size(); j++) { g.setColor(Color.BLACK); // escreve legenda g.drawString(legendas.get(j), rotulos.length * espaco * 2 + larguraColuna + (dadosList.size() * larguraColuna) * rotulos.length + x_linhaVertical + 25, y_linhaVertical + j * 15 + 7); // seta cor da legenda g.setColor(cores.get(j)); // desenha um quadrado 7x7 g.fillRect(rotulos.length * espaco * 2 + larguraColuna + (dadosList.size() * larguraColuna) * rotulos.length + x_linhaVertical + 15, y_linhaVertical + j * 15, 7, 7); } // fim do for } // fim do metodo desenhaLegenda public void setTituloGrafico(String tituloGrafico) { this.tituloGrafico = tituloGrafico; } public void setRotulos(String[] rotulos) { this.rotulos = rotulos; } public void setDados(String titulo, int[] dados, Color cor) { legendas.add(titulo); cores.add(cor); dadosList.add(dados); } public Color escurecer(Color cor) { int r = Math.abs(cor.getRed() - 30 > 0 ? cor.getRed() - 30 : 0); int g = Math.abs(cor.getGreen() - 30 > 0 ? cor.getGreen() - 30 : 0); int b = Math.abs(cor.getBlue() - 30 > 0 ? cor.getBlue() - 30 : 0); return new Color(r, g, b); } } // fim da classe DesenhandoGraficos3DExemplo1
TesteGraficos3DExemplo1.java
/* * TesteGraficos3DExemplo1.java */ import java.awt.Color; import javax.swing.JFrame; /** * * @author Andreia */ public class TesteGraficos3DExemplo1 { public static void main(String[] args) { // cria painel para desenhar grafico final DesenhandoGraficos3DExemplo1 desenhando = new DesenhandoGraficos3DExemplo1(); /* * Exemplo */ // seta titulo para o grafico desenhando.setTituloGrafico("Faixa Etaria"); // rotulos aparecerao na parte inferior do grafico String[] rotulos = new String[]{"14 a 17 anos", "18 a 29 anos", "30 a 49 anos", "50 a 65 anos"}; desenhando.setRotulos(rotulos); // cria os dados para o grafico int[] dados1 = new int[rotulos.length]; int[] dados2 = new int[rotulos.length]; int[] dados3 = new int[rotulos.length]; int[] dados4 = new int[rotulos.length]; dados1[0] = 0; // 14 a 17 dados1[1] = 13; // 18 a 29 dados1[2] = 13; // 30 a 49 dados1[3] = 13; // 50 a 65 dados2[0] = 15; // 14 a 17 dados2[1] = 15; // 18 a 29 dados2[2] = 17; // 30 a 49 dados2[3] = 15; // 50 a 65 dados3[0] = 20; // 14 a 17 dados3[1] = 67; // 18 a 29 dados3[2] = 93; // 30 a 49 dados3[3] = 42; // 50 a 65 dados4[0] = 8; // 14 a 17 dados4[1] = 45; // 18 a 29 dados4[2] = 160; // 30 a 49 dados4[3] = 29; // 50 a 65 desenhando.setDados("2009", dados1, Color.BLUE); desenhando.setDados("2010", dados2, Color.RED); desenhando.setDados("2011", dados3, Color.GREEN); desenhando.setDados("2012", dados4, Color.MAGENTA); /* */ /* * cria janela */ JFrame frame = new JFrame(); frame.add(desenhando); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(550, 300); frame.setVisible(true); } } // fim da classe TesteGraficos3DExemplo1
Exemplo 2:
DesenhandoGraficos3DExemplo2.java
/* * DesenhandoGraficos3DExemplo2.java */ import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; /** * * @author Andreia */ public class DesenhandoGraficos3DExemplo2 extends JPanel { private int x_linhaVertical = 40; private int y_linhaVertical = 60; private int larguraColuna = 30;//largura da coluna private int margem = 10; private int altura = 250; // altura do grafico //* use na 'altura' um numero divisivel pela quantidade de linhas private int quantidadeLinhas = 5; private int espaco = 10; // espaco entre valores private List<Integer> dados = new ArrayList<Integer>(); private List<Color> cores = new ArrayList<Color>(); private List<String> legendas = new ArrayList<String>(); private String tituloGrafico; @Override public void paintComponent(Graphics g) { super.paintComponent(g); this.setBackground(Color.WHITE); desenhaLinhasDoGrafico(g); desenhaLegenda(g); for (int i = 0; i < dados.size(); i++) { int dado = dados.get(i); // seta cor da coluna g.setColor(cores.get(i)); int xPonto = i * espaco * 2 + (i + 1) * larguraColuna + larguraColuna * i + x_linhaVertical; int yPonto = (altura + y_linhaVertical) - dado; // desenha colunas do grafico g.fillRect(xPonto, yPonto, larguraColuna, dado); /* * Desenha efeito 3D */ // seta cor do poligono de cima g.setColor(escurecer(cores.get(i))); // desenha poligono de cima da coluna int xValues3[] = {xPonto, xPonto + 9, xPonto + larguraColuna + 9, xPonto + larguraColuna}; int yValues3[] = {yPonto, yPonto - 9, yPonto - 9, yPonto}; g.fillPolygon(xValues3, yValues3, 4); // seta cor do poligono lateral g.setColor(escurecer(escurecer(cores.get(i)))); // desenha poligono lateral da coluna int xValues1[] = {xPonto + larguraColuna + 9, xPonto + larguraColuna, xPonto + larguraColuna, xPonto + larguraColuna + 9}; int yValues1[] = {yPonto - 9, yPonto, yPonto + dado, yPonto - 9 + dado}; g.fillPolygon(xValues1, yValues1, 4); } // fim do for /* * desenha titulo do grafico */ g.setColor(Color.BLACK); g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 14)); g.drawString(tituloGrafico, margem, margem * 3); } // fim do metodo paintComponent private void desenhaLinhasDoGrafico(Graphics g) { int x2_linhaHorizontal = dados.size() * larguraColuna * 2 + larguraColuna * dados.size() + margem; // comprimento da linha horizontal g.setColor(Color.BLACK); // desenha linha vertical g.drawLine(x_linhaVertical, y_linhaVertical + 5, x_linhaVertical, y_linhaVertical + altura + 5); // desenha linhas horizontais int contador = altura; for (int i = 0; i <= quantidadeLinhas; i++) { int y_linhaHorizontal = y_linhaVertical + i * (altura / quantidadeLinhas); // desenha linhas g.drawLine(x_linhaVertical, y_linhaHorizontal + 5, x_linhaVertical + larguraColuna - 5, y_linhaHorizontal - 10); g.drawLine(x_linhaVertical + larguraColuna - 5, y_linhaHorizontal - 10, x2_linhaHorizontal + 10, y_linhaHorizontal - 10); if (i == quantidadeLinhas) { // se: ultima linha g.drawLine(x2_linhaHorizontal + 10, y_linhaHorizontal - 10, x2_linhaHorizontal - larguraColuna + 15, y_linhaHorizontal + 5); g.drawLine(x2_linhaHorizontal - larguraColuna + 15, y_linhaHorizontal + 5, x_linhaVertical, y_linhaHorizontal + 5); } /** * fim do novo codigo */ // desenha numeros g.drawString("" + contador, margem, y_linhaHorizontal + 5); contador -= (altura / quantidadeLinhas); } // fim do for } // fim do metodo desenhaLinhasDoGrafico /** * desenha legenda de cores */ private void desenhaLegenda(Graphics g) { for (int j = 0; j < dados.size(); j++) { g.setColor(Color.BLACK); // escreve legenda g.drawString(legendas.get(j), dados.size() * larguraColuna * 2 + (dados.size() * larguraColuna) + larguraColuna + 25, y_linhaVertical + j * 15 + 7); // seta cor da legenda g.setColor(cores.get(j)); // desenha um quadrado 7x7 g.fillRect(dados.size() * larguraColuna * 2 + (dados.size() * larguraColuna) + larguraColuna + 15, y_linhaVertical + j * 15, 7, 7); } // fim do for } // fim do metodo desenhaLegenda public void setTituloGrafico(String tituloGrafico) { this.tituloGrafico = tituloGrafico; } public void setDados(String titulo, int dado, Color cor) { legendas.add(titulo); cores.add(cor); dados.add(dado); } public Color escurecer(Color cor) { int r = Math.abs(cor.getRed() - 30 > 0 ? cor.getRed() - 30 : 0); int g = Math.abs(cor.getGreen() - 30 > 0 ? cor.getGreen() - 30 : 0); int b = Math.abs(cor.getBlue() - 30 > 0 ? cor.getBlue() - 30 : 0); return new Color(r, g, b); } } // fim da classe DesenhandoGraficos3DExemplo2
TesteGraficos3DExemplo2.java
/* * TesteGraficos3DExemplo2.java */ import java.awt.Color; import javax.swing.JFrame; /** * * @author Andreia */ public class TesteGraficos3DExemplo2 { public static void main(String[] args) { // cria painel para desenhar grafico final DesenhandoGraficos3DExemplo2 desenhando = new DesenhandoGraficos3DExemplo2(); /* * Exemplo */ // seta titulo para o grafico desenhando.setTituloGrafico("Notificacoes"); desenhando.setDados("2009", 40, Color.RED); desenhando.setDados("2010", 155, Color.GREEN); desenhando.setDados("2011", 220, Color.BLUE); desenhando.setDados("2012", 100, Color.MAGENTA); /* */ /* * cria janela */ JFrame frame = new JFrame(); frame.add(desenhando); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(480, 380); frame.setVisible(true); } } // fim da classe TesteGraficos3DExemplo2
Nenhum comentário:
Postar um comentário
Postagem mais recente
Postagem mais antiga
Página inicial
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário