Gráficos em Java ME com MECHART

09 julho 2009

MECHART é uma API que fornece uma biblioteca para construção de gráficos de linhas, pizza e barras. Registrada sobre a GPL, encontra-se como um projeto no java.net. Neste link pode-se encontrar o .jar da API, as classes .java, a documentação e os códigos fonte.

A intenção deste post é apresentar esta API para aqueles que ainda não conhecem. A MECHART pode ajudar de forma significativa os desenvolvedores de aplicativos móveis com a plataforma Java ME, visto que a dificuldade para gerar gráficos nessa plataforma é considerável, pois é necessário a utilização de classes de baixo nível, como Canvas.

Para utilizar a API basta realizar o download do .jar ou se preferir vá nas propriedades do seu projeto e crie um novo diretório "com.mechart.chart" e insera todas as classes dispostas no arquivo que você baixou.

No código fonte basta importar as classes para usá-las:

import com.mechart.chart.*;

Nos atributos da classe basta declarar os objetos para acessá-las:

private PieChart pieChart;
private BarChart barChart;
private LineChart lineChart;

Classe LineChart

O construtor da classe LineChart recebe nove parâmetros no total, sendo eles: a largura total do gráfico, a altura total do gráfico, os valores que formam a linha do gráfico, legenda dos dados, identificação dos dados, tamanho da fonte, cor da linha, cor do fundo do gráfico e o valor máximo para o gráfico. Para as cores, a LineChart já traz alguns valores definidos como constantes para você usar, sem a necessidade de conhecer os códigos RGB das cores desejadas.

Classe PieChart

O gráfico de pizza é criado com a classe PieChart, que possui um construtor que recebe cinco parâmetros, sendo eles: a largura total do gráfico, a altura total do gráfico, dados que formam a pizza, altura da fonte e as cores de cada fatia da pizza. O último parâmetro é passado em um vetor de byte, sendo que os bytes que definem as principais cores, estão disponíveis como constantes estáticas na PieChart.

Classe BarChart

O Gráfico de Barras é construído com a utilização da classe BarChart da mechart, seu construtor é semelhante aos demais gráficos da API, os parâmetros passados são: a largura total do gráfico, a altura total do gráfico, dados que formam o gráfico (detalhe, os dados são passados em um Vector, e cada elemento do vetor é uma das "barras" do gráfico), tamanho da fonte, vetor de bytes representando as cores usadas (mesma lógica do PieChart), um byte que representa a cor de fundo do gráfico, e o valor máximo que o gráfico irá receber. Assim como as outras classes da API, a BarChart também tem valores constantes e estáticos para definir algumas das principais cores. O método fullChart(boolean fullChart), chamado por barChart.fullChart(false), especifica se as barras que compõe o gráfico ocuparão um espaço uniforme ou não, de acordo com o argumento booleano.

Na versão 2.0 da API foi criado um novo tipo de gráfico, o gráfico combinado.

Este, por sua vez, combina barras e linhas. Além disso, nesta nova versão, é possível criar gráficos passando cores no formato RGB, tirando a limitação de uso das cores pré-definidas na API. Também, existe um método createImage para todos os tipos de gráficos, que retorna um objeto Image , permitindo seu uso em uma tela Canvas . Por fim, a criação de gráficos em Canvas, e não somente como CustomItem, também foi adicionada a esta versão mais recente da MECHART.

Veja o Resultado:
Segue um código exemplificando o uso da API.

import com.mechart.chart.*;
import java.util.Vector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Midlet extends MIDlet implements CommandListener{
private Display display;

private Form fmMain;
private StringItem siTabela;
private PieChart pieChart;
private BarChart barChart;
private LineChart lineChart;

private Command cmSair;

public void startApp() {
display = Display.getDisplay(this);

fmMain = new Form("Teste CustomItem");
siTabela = new StringItem("Tabela", "Titulos");

ClCanvas cv = new ClCanvas();

Vector dados = new Vector();
dados.addElement(new String[]{"Brasil", "50"});
dados.addElement(new String[]{"Alemanha", "88"});
dados.addElement(new String[]{"Itália", "71"});
dados.addElement(new String[]{"Argentina", "45"});
dados.addElement(new String[]{"Uruguai", "22"});

short[] posicoes = new short[]{50, 43, 19, 47, 32, 90};
String[] legenda = new String[]{"Jan", "Fev", "Mar", "Abr", "Mai", "Jun"};
pieChart = new PieChart(cv.getWidth(), 70, dados, 1, new byte[]{PieChart.BLACK, PieChart.FUCHSIA, PieChart.GREEN, PieChart.YELLOW, PieChart.LIME});
barChart = new BarChart(cv.getWidth(), 80, dados, 1, new byte[]{BarChart.RED, BarChart.NAVY,
BarChart.PURPLE, BarChart.LIME, BarChart.TEAL}, BarChart.SILVER, (short)90);
lineChart = new LineChart(cv.getWidth(), 110, posicoes, legenda, "Produção", 1, LineChart.MAROON, LineChart.GRAY, (short)90);
fmMain.append(siTabela);
barChart.fullChart(false);
barChart.sizeBar(20);
fmMain.append(lineChart);
fmMain.append(pieChart);
fmMain.append(barChart);

cmSair = new Command("Sair", Command.EXIT, 1);

fmMain.addCommand(cmSair);
fmMain.setCommandListener(this);

display.setCurrent(fmMain);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable d) {
destroyApp(true);
notifyDestroyed();
}
}

class ClCanvas extends Canvas
{
protected void paint(Graphics graphics) {
}

}

Caso prefira faça o download do projeto deste exemplo.

Para mais informações veja:

Referências

MECHART. Página oficial da API mechart. Disponível em https://mechart.dev.java.net/
Artigo MECHART 1.0. http://www.javafree.org/artigo/871434/Graficos-em-Java-ME-com-MECHART.html
Artigo MECHART 2.0. http://www.javafree.org/artigo/871435/Graficos-em-Java-ME-com-MECHART-20.html
MOBILIDADETUDO. Blog do idealizador da mechart. Disponível em http://mobilidadetudo.blogspot.com/

0 comentários:

Postar um comentário