Figura 3: Gráfico de barras

Propaganda
Gráficos em Java ME com mechart
Ricardo da Silva Ogliari
Introdução
A crescente utilização de pequenos dispositivos, como telefones celulares, faz
com que a demanda por soluções móveis também cresça, exigindo cada vez mais dos
programadores e de suas criações. Um exemplo disso são as inovações
proporcionadas na MIDP 2.0, porém, para a criação de interfaces gráficas somente
com a API presente na biblioteca padrão, ainda há um certo grau de dificuldade, além
de um número bastante reduzido de componentes gráficos.
Funcionalidades consideradas comuns em outras plataformas, ainda são um
desafio através do Java ME, como exemplos podem ser citados: a construção de
relatório, persistência de dados, dentre outros. Porém, a comunidade Java ME nos
fornece novidades, uma delas é a API MECHART, que fornece uma biblioteca para
construção de três tipos de gráficos: gráficos de linhas, gráfico pizza e gráfico de
barras. Como a API está registrada sobre GPL espera-se que mais colaboradores
ajudem no crescimento dessa biblioteca, para que, futuramente, a mesma possa
oferecer mais tipos de gráficos.
O presente artigo visa fornecer uma visão geral de como adicionar a
MECHART ao seu projeto, além de fazer uma síntese sobre os métodos necessários
para a criação dos três tipos disponíveis de gráficos. Por fim, o convite para que mais
pessoas contribuam no crescimento dessa API é reforçado mais uma vez.
MECHART: O Projeto
A mechart está registrada como um projeto no java.net, o link para acesso é:
https://mechart.dev.java.net/. Neste endereço pode-se encontrar o .jar que é usado na
aplicação, além de documentação e dos códigos fontes, é importante ressaltar que a
API está registrada sobre GPL e aguarda contribuições para seu crescimento. A API
ainda está em fase inicial, sendo desenvolvida apenas por dois programadores.
Atualmente, é possível a criação de três tipos de gráficos com a API, o gráficos
de linhas, o gráfico pizza e o gráfico de barras, todos eles são mostrados nas figuras
1, 2 e 3, respectivamente. O componente é gerado em uma classe que estende de
CustomItem, portanto, só pode ser usado dentro de um Form. Um dos objetivos do
criador da API e dos colaboradores é estender seu uso ao Canvas também.
Figura 1: Gráfico de Linhas
http://www.javafree.org/
Figura 2: Gráfico pizza
Figura 3: Gráfico de barras
A voz Java no Brasil – Pág. 1
Utilizando a API com o NetBeans e Wireless Toolkit
O uso de determinada IDE fica a cargo do leitor, porém, não seria possível
apresentar aqui o uso da API com todas as IDEs existentes, portanto, foi escolhido o
NetBeans, que é muito popular entre programadores Java, de forma similar, o Sun
Java Wireless Toolkit é bastante usado para emular programas Java ME, e para a
conseqüente distribuição. Aqui, é necessário fazer uma divisão entre duas versões do
NetBeans, a versão 3.6 representa a ferramenta no momento em que ainda seguia a
idéia de criação de filesystems, sem criar sua própria estrutura para projetos, a partir
da versão 4.1, o NetBeans passou a criar uma estrutura de projetos própria, suas
versões mais atuais, como a 5.0 (que será demonstrada aqui) continuam a seguir este
padrão.
NetBeans 3.6:
Usando a versão 3.6 do NetBeans, o leitor também deve usar uma versão do
Sun Java Wireless Toolkit (WTK) independente da IDE, se o leitor não tem
conhecimento dos dois softwares citados anteriormente, aconselha-se a leitura sobre
essas ferramentas antes de prosseguir a leitura do presente artigo. Através do WTK
cria-se o projeto, define-se o nome, configuração e perfil usado, dentre outras
características. Feito isso, uma árvore de diretórios semelhante à Figura 4 deve ser
formada no diretório apps da instalação do WTK. Para usar a mechart basta colocar o
jar da API na pasta lib da referida hierarquia.
Figura 4: Hierarquia do projeto
NetBeans 5.0:
Usando o NetBeans 5.0 o leitor terá uma facilidade maior, isso porque o WTK
pode ser acoplado diretamente a IDE, evitando a necessidade de constantes troca de
janelas para poder executar sua MIDlet. É presumido que o NetBeans já tenha o
Mobility Pack instalado, e o WTK mapeado, como esse não é o foco desse artigo,
entende-se que o leitor já tenha conhecimento de como fazer isso.
Depois de criado o projeto, o leitor deve acessar as propriedades do mesmo,
uma tela semelhante à Figura 5 corresponde à parte de configuração das
propriedades do projeto. Observe que a opção “Libraries & Resources” na parte
esquerda está selecionado, e na parte direita aparece o endereço de onde se encontra
o jar da mechart, para isso basta selecionar a opção “Add Jar/Zip...” na parte direita, e
posteriormente, mapear o endereço de onde o .jar da mechart está salvo.
http://www.javafree.org/
A voz Java no Brasil – Pág. 2
Figura 5: Tela de configurações do projeto.
Usando a mechart
Para continuar, é imprescindível que o leitor tenha um conhecimento básico da
Java ME. A Listagem 1 mostra o esqueleto básico da nossa MIDlet, sem o uso da
mechart, ainda. Observe que já foi criado um Form, pois como todo CustomItem é um
Item, o mesmo só pode ser adicionado em um formulário.
import
import
import
import
java.util.Vector;
javax.microedition.midlet.*;
javax.microedition.lcdui.*;
com.mechart.chart.*;
public class Midlet extends MIDlet {
private Display display;
private Form fmMain;
public void startApp() {
display = Display.getDisplay(this);
fmMain = new Form("Teste CustomItem");
display.setCurrent(fmMain);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
Listagem 1 – MIDlet básica.
http://www.javafree.org/
A voz Java no Brasil – Pág. 3
Para usar qualquer um dos três gráficos podemos fazer o import através da
seguinte linha de código Java:
import com.mechart.chart.*;
LineChart:
Depois de criar o objeto nos atributos da classe, deve-se criar a instância da
classe e em seguida adicionar o item ao Form. 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áficos, 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. Veja a Listagem 2 com o código de uma MIDlet que mostraria o
gráfico da Figura 1.
import
import
import
import
com.mechart.chart.*;
java.util.Vector;
javax.microedition.midlet.*;
javax.microedition.lcdui.*;
public class UsoLineChart extends MIDlet{
private Display display;
private Form fmMain;
private LineChart lineChart;
public void startApp() {
display = Display.getDisplay(this);
fmMain = new Form("Teste LineChart");
ClCanvas cv = new ClCanvas();
short[] posicoes = new short[]{50, 43, 19, 47, 32, 90};
String[] legenda = new String[]{"Jan", "Fev", "Mar", "Abr", "Mai",
"Jun"};
lineChart = new LineChart(cv.getWidth(), 110, posicoes, legenda,
"Produção", 1, LineChart.MAROON, LineChart.GRAY, (short)90);
fmMain.append(lineChart);
display.setCurrent(fmMain);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
class ClCanvas extends Canvas
{
protected void paint(Graphics graphics) {}
}
Listagem 2 – Uso do LineChart.
http://www.javafree.org/
A voz Java no Brasil – Pág. 4
Perceba que também foi criada uma classe interna que herda de Canvas, para
recuperar a largura e a altura do display do device, se o projeto é direcionado para
uma plataforma alvo de celulares, e suas dimensões são conhecidas, o uso do Canvas
não é necessário. A seguir são criados dois vetores, de short e String´s
respectivamente, que formaram os dados propriamente ditos do gráfico. Outro ponto
importante é as cores usadas. Para evitar que o usuário tivesse que decorar todos os
códigos RGB, a LineChart tem algumas constantes estáticas para a maiorias das
cores.
PieChart:
O gráfico de pizza, talvez um dos mais conhecidos, é 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. Observe a listagem 3 com o código para uso da
PieChart.
import com.mechart.chart.*;
…
public class UsoLineChart extends MIDlet{
…
private LineChart lineChart;
public void startApp() {
…
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"});
pieChart = new PieChart(cv.getWidth(), 70, dados, 1, new
byte[]{PieChart.BLACK, PieChart.FUCHSIA, PieChart.GREEN,
PieChart.YELLOW, PieChart.LIME});
fmMain.append(pieChart);
display.setCurrent(fmMain);
}
…
}
…
Listagem 3 – Uso da PieChart
As linhas que estão marcadas com “...” são iguais a Listagem 2, até a classe
que herda de Canvas. A Listagem 3 não tem muita alteração em relação a Listagem 2,
exceções para a passagem dos dados, que no caso da PieChart é feita através de
uma instância de Vector e da utilização de um vetor de bytes que forma as imagens de
cada pedaço da pizza.
http://www.javafree.org/
A voz Java no Brasil – Pág. 5
Gráfico de Barras:
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. Veja na Listagem 4 como utilizar a classe:
import com.mechart.chart.*;
…
public class UsoLineChart extends MIDlet{
…
private BarChart barChart;
public void startApp() {
…
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"});
barChart = new BarChart(cv.getWidth(), 80, dados, 1, new
byte[]{BarChart.RED, BarChart.NAVY,
BarChart.PURPLE, BarChart.LIME, BarChart.TEAL},
BarChart.SILVER, (short)90);
barChart.fullChart(false);
barChart.sizeBar(20);
}
…
}
…
Listagem 4 – Uso do BarChart
Depois de chegar até este último gráfico, o leitor não terá dificuldade de
entender o funcionamento do gráfico de barras, porém, preste atenção no método
fullChart(boolean fullChart), este método especifica se as barras que compõe o
gráfico ocuparão um espaço uniforme, ou seja, todas com o mesmo tamanho e
ocupando toda a área do gráfico, ou cada barra terá um tamanho menor, que será
especificado no método sizeBar(int tamBar). Para entender melhor este conceito,
veja as figuras 6 e 7, a Figura 6 mostra o gráfico segundo a Listagem 4, já a Figura 7
mostra como ficaria o gráfico se na linha:
barChart.fullChart(false);
Fosse usado:
http://www.javafree.org/
A voz Java no Brasil – Pág. 6
barChart.fullChart(true);
Figura 6: Gráfico de barras espaçadas.
Figura 7: Gráfico de barras “cheias”.
Conclusão
A construção de interfaces gráficas para qualquer sistema computacional é um
dos elementos críticos, que pode levar ao sucesso ou ao fracasso de uma solução.
Partindo deste ponto, a mechart pode ajudar de forma significativa aos
desenvolvedores de aplicativos móveis com a Java ME, além disso, gráficos podem
explicar de forma mais comunicativa e com um impacto maior, do que simples
caracteres na tela do telefone celular.
Referências Bibliográficas
MECHART. Página oficial
https://mechart.dev.java.net/ >.
da
API
mechart.
Disponível
em
<
MOBILIDADETUDO. Blog do idealizador da mechart. Disponível em <
http://mobilidadetudo.blogspot.com/ >.
Sobre o autor
Ricardo da Silva Ogliari é formando em Ciência da Computação pela
Universidade de Passo Fundo – RS. Desenvolveu sistemas móbile e web para
empresas do Rio Grande do Sul, atualmente trabalha como desenvolvedor de
aplicações direcionadas a telefones celulares na Kwead.com de São Paulo. Também,
foi palestrante dos eventos JustJava 2005 e EJES (Encontro Java do Espírito Santo)
2005, além de ministrar alguns cursos sobre a tecnologia Java ME e Java EE.
http://www.javafree.org/
A voz Java no Brasil – Pág. 7
Download