Nokia lança seu primeiro celular com Linux

28 agosto 2009 0 comentários
Segundo HELSINQUE (Reuters), a Nokia, maior fabricante de celulares do mundo, lançou nesta quinta-feira seu primeiro aparelho sofisticado que utiliza sistema operacional Linux.

O novo modelo N900, com conexão de celular, tela sensível a toque e teclado deslizante, custa em torno de 500 euros (712 dólares) no varejo, sem considerar subsídios e impostos.

O sistema operacional de fonte aberta Symbian, da Nokia, controla metade do volume do mercado de smartphones, mais que os concorrentes Apple, Research in Motion e Google juntos.
A companhia informou que o Linux funcionará paralelamente ao Symbian na série de produtos sofisticados.

"Isso não está colocando o Symbian de modo algum em perigo", afirmou Anssi Vanjoki, diretor de vendas da Nokia, à Reuters.

"O código aberto Symbian será nossa principal plataforma, e estamos expandindo e crescendo tudo o que podemos, tanto em termos de funcionalidade como em distribuição ... povoando mais e mais nossa linha de produtos com o Symbian", disse ele.

O novo modelo usará o processador Cortex-A8, da ARM.

"Se você olhar as propriedades de gestão de energia que temos no ARM, ao menos hoje, estamos claramente melhor, milhas e milhas melhor, do que temos na arquitetura da Intel", afirmou Vanjoki.

Fonte: Reuters

Criptografia com MD5 no Java ME

27 agosto 2009 0 comentários

O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional, muito utilizado por softwares com protocolo ponto-a-ponto, verificação de integridade e logins.
Os hashes MD5 de 128-bit (16-byte) são normalmente representados por uma sequência de 32 caracteres hexadecimais. O seguinte mostra uma string ASCII com 43-bytes e o hash correspondente:

MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6


Vulnerabilidade

Como o MD5 faz apenas uma passagem sobre os dados, se dois prefixos com o mesmo hash forem construídos, um sufixo comum pode ser adicionado a ambos para tornar uma colisão mais provável. Deste modo é possível que duas strings diferentes produzam o mesmo hash.

Vale ressaltar que o MD5 é um algoritmo de mão única! Então se gravarmos dados criptografados no banco (ex. Login/Senha), para fazermos a autenticação é necessário criptografar a string de entrada e comparar com o dado criptografado que está gravado no BD.

Neste post vamos mostrar um exemplo utilizando o algoritmo MD5 para criptografar uma senha afim de gravá-la no banco de dados. Essa técnica pode ser usada para qualquer tipo (ou toda) de informação que trafega pela rede ou que são gravadas no banco.

O MD5 é uma das soluções para criptografar informações, porém esta criptografia já é falha! Hoje já existem procedimentos que quebram este algoritmo, justamente por possuir uma Vulnerabilidade (citada acima).

Uma outra solução é um novo projeto Open Source brasileiro em Java, chamado BR1E.

Então vamos ao código para exemplificar o MD5 no Java / Java ME.


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import com.twmacinta.util.MD5;

public class MD5Hash extends MIDlet implements CommandListener {

private Display display;
private Form FormTeste;
private TextField textField1;
private TextField textField2;
private Command comandoDeSaida;
private Command comandoCriptografar;

public void startApp() {
display.setCurrent(FormTeste);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
display.setCurrent(null);
notifyDestroyed();
}

public MD5Hash() {
display = Display.getDisplay(this);
textField1 = new TextField("Senha", null, 120, TextField.ANY);
textField2 = new TextField("Senha Criptografada", null, 120, TextField.ANY);
FormTeste = new Form("Formulário");
FormTeste.append(textField1);

comandoDeSaida = new Command("Sair", Command.EXIT,1);
comandoCriptografar = new Command("Criptografar", Command.OK,1);
FormTeste.addCommand(comandoCriptografar);
FormTeste.addCommand(comandoDeSaida);
FormTeste.setCommandListener(this);
}

public void commandAction(Command comando, Displayable s)
{
if (comando == comandoDeSaida){
destroyApp(false);
}
if (comando == comandoCriptografar){
Criptografar();
}

}

public void Criptografar() {
FormTeste.append(textField2);

//converter o texto em bytes
byte plain[] = textField1.getString().getBytes();
// criar um objeto MD5Hash passando a sequencia de bytes resultante do texto digitado
MD5 md5 = new MD5(plain);
// pegando o resultado hash gerado
byte[] result = md5.doFinal();
// convertendo o conjunto de bytes em hexadecimal e aplicando ao objeto texto do display
textField2.setString(MD5.toHex(result));
}
}
Fonte:
http://pt.wikipedia.org/wiki/MD5
http://mobilepit.com/10/compact-md5-class-library-for-j2me-javame-app.html
http://www.devmedia.com.br/articles/viewcomp.asp?comp=6290&hl=

Transições de tela no LWUIT

20 agosto 2009 0 comentários

Hoje vamos aprender como fazer aqueles tão atraentes efeitos de transição de tela.

A transição pode ser Out ou In. No modo Out a transição é aplicada na saída do form. E no modo In o efeito de transição é aplicado quando o form está entrando, ou seja sendo mostrado na tela.

Tipos de Transições

Transições Comuns
  • Fade: a próxima tela surge de forma transparente sobrepondo a tela anterior.
 NOMEDOFORM.setTransitionOutAnimator(CommonTransitions.createFade(TEMPO));
TEMPO: Tempo de duração da transição, em milissegundos

  • Slide: transição estilo de slide. A próxima tela surge pela vertical ou
horizontal.
 NOMEDOFORM.setTransitionOutAnimator(CommonTransitions.createSlide(TIPO, BOOLEAN, TEMPO));
TIPO:
- CommonTransitions.SLIDE_HORIZONTAL
- CommonTransitions.SLIDE_VERTICAL
BOOLEAN:
- true: a tela vem da esquerda para a direita ou de cima para baixo
- false: a tela vem da direita para a esquerda ou de baixo para cima

Transições 3D
  • Cube: a transição funciona como um cubo giratório
  NOMEDOFORM.setTransitionOutAnimator(Transition3D.createCube(TEMPO,BOOLEAN));
BOOLEAN:
- true: a tela gira da esquerda para a direita
- false: a tela gira da direita para a esquerda


  • Rotation: É realizada uma rotação em torno do eixo central da tela
 NOMEDOFORM.setTransitionOutAnimator(Transition3D.createRotation(TEMPO, BOOLEAN));
BOOLEAN:
- true: a tela gira da direita para a esquerda
- false: a tela gira da esquerda para a direita


  • FlyIn: A nova tela surge do centro e cresce até preencher todo o espaço.
 NOMEDOFORM.setTransitionOutAnimator(Transition3D.createFlyIn(TEMPO));


  • SwingIn: A próxima tela surge como uma janela balançando.
  NOMEDOFORM.setTransitionOutAnimator(Transition3D.createSwingIn(TEMPO));
ou
  NOMEDOFORM.setTransitionOutAnimator(Transition3D.createSwingIn(TEMPO, BOOLEAN));
BOOLEAN:
-true: a tela está presa em cima e balança em baixo
- false: a tela está presa em baixo e balança em cima


Veja um aplicação de exemplo
import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import java.io.IOException;

import javax.microedition.midlet.*;

public class midletPrincipal extends MIDlet implements ActionListener{
Command troca, voltar;
Form fPrincipal;
Form fSecundario;

public void startApp() {
Display.init(this);
// TEMA
try{
Resources res = Resources.open("/imagens/javaTheme.res");
UIManager.getInstance().setThemeProps(res.getTheme(res.getThemeResourceNames()[0]));
}catch(IOException e){
}

fPrincipal = new Form("Transicoes");
fPrincipal.setTransitionOutAnimator(Transition3D.createCube(500, false));

troca = new Command("Trocar Tela");
fPrincipal.setCommandListener(this);
fPrincipal.addCommand(troca);
fPrincipal.show();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void actionPerformed(ActionEvent e) {
if(e.getSource() == troca){
fSecundario = new Form();
voltar = new Command("Voltar");
fSecundario.addCommand(voltar);
fSecundario.setCommandListener(this);
fSecundario.setTransitionOutAnimator(CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL, false, 500));
fSecundario.show();
}
if(e.getSource() == voltar){
fPrincipal.show();
}
}
}
Para baixar o projeto completo clique aqui.

Brasil atinge 161 milhões de linhas móveis

19 agosto 2009 0 comentários

Segundo Alberto Alerigi (Reuters), o número de linhas celulares ativas em julho no Brasil cresceu 1,45 por cento ante junho, superando a barreira dos 160 milhões, segundo dados divulgados pela Agência Nacional de Telecomunicações (Anatel), nesta quarta-feira.

O país encerrou o mês passado com 161,922 milhões de linhas móveis, o que equivale a quase um celular por habitante (IBGE). Ante os 135,33 milhões de celulares de julho de 2008, a base avançou 19,64 por cento.

Segundo a agência, três Estados rompem a barreira de um celular por habitante: Rio de Janeiro, Mato Grosso do Sul (quem diria!) e São Paulo. Até então, o Distrito Federal era o único nessa categoria.

A Vivo, maior operadora móvel do país e controlada por Telefônica e Portugal Telecom, registrou ligeiro avanço sobre junho, encerrando o mês passado com 29,38 por cento de participação, equivalente a 47,565 milhões de linhas. Em junho, a empresa teve fatia de 29,33 por cento.

Enquanto isso, a Claro, da mexicana América Móvil e segunda colocada, teve leve recuo, de 25,36 por cento para 25,35 por cento, com 41,054 milhões de clientes.

A TIM, da Telecom Italia, fechou o mês passado com fatia de 23,75 por cento contra 23,71 por cento em junho.

A Oi, incluindo a Brasil Telecom, saiu de 21,22 por cento em junho para 21,15 por cento em julho.

Segundo a Anatel, de janeiro a julho foram adicionadas 11,28 milhões de linhas à base celular do país ante 14,35 milhões um ano antes.

Fonte: Reuters

Jogos em Java ME

18 agosto 2009 0 comentários
Atendendo a pedidos, vamos postar hoje alguns protótipos de games afim de levar aos desenvolvedores, que estudam essa área, um pouco mais de conhecimento e quem sabe fazer um game bem bacana e postar aqui no javamovel.


Faça o download dos projetos aqui.

Links:
http://pt.wikibooks.org/wiki/J2ME/Li%C3%A7%C3%B5es/GameCanvas
http://wiki.forum.nokia.com/index.php/Como_desenvolver_um_jogo_em_Java_ME
http://www.symbianresources.com/tutorials/javame.php#overview
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=2563

Ganhadores das assinaturas Java Magazine Digital

2 comentários
Olá! Precisamos que os seguintes leitores entrem em contato conosco através do e-mail: java2mobile@gmail.com

Leitores:
1. Danilo Mikucki
2. Marcelo Quintana
3. Antonio de Lemos
4. Rafael Viana
5. Guilherme Ferrari
6. Robison Cris Brito

O e-mail deve conter os seguintes dados:
* Nome completo;
* Telefone para contato;
* e-mail.

Quando os sorteados enviarem os e-mails nós repassaremos para o pessoal da devmedia entrar em contato e confirmar a assinatura digital da revista Java Magazine, gratuitamente.
Em breve sortearemos mais 4 assinaturas da revista Java Magazine Digital. Os interessados entrem em contato.


Att, javamovel

Utilizando componentes com LWUIT

12 agosto 2009 1 comentários

Olá no post de LWUIT de hoje vamos demostrar a utilização de alguns componentes, como Label, ComboBox, Button, Image.

Para detalhes iniciais veja os posts anteriores sobre LWUIT.
HelloWorld com LWUIT
Utilizando tema em LWUIT

Para criar os componentes que iremos demostrar é necessário antes criar um projeto, adicionar o jar do LWUIT nos recursos do projeto e criar um form para colocar os componentes. Para melhor visualizar seria legal também carregar um tema. (Isto tudo é ensinado nos 2 posts referenciados acima)

Veja como criar os componentes:

Inserir um texto na tela -> Label
Label label = new Label("Texto");

Inserir uma imagem na tela -> Image + Label
Image imagem = Image.createImage("imagem.png");
Label ImagemLabel = new Label(imagem);

Inserir uma imagem com um texto em baixo: Image + Label
Image imagem = Image.createImage("imagem.png");
Label textoBaixo = new Label(imagem);
textBaixo.setText("Texto");
textBaixo.setTextPosition(Component.BOTTOM);
//seta a posição que o texto estará em relação a imagem

Inserir um botão com um texto: Button
Button button = new Button("Botao");

Inserir um botão com imagem: Button + Image
Image imagem = Image.createImage("imagem.png");
Button ImagemButton = new Button(imagem);

Inserir um campo de texto editável: TextField
TextFiel tfNome = new TextField(15);
//o argumento é a quantidade de colunas

Inserir uma lista de escolhas recolhível: ComboBox
String[] dias = new String[7];
dias[0] = "Domingo";
dias[1] = "Segunda";
dias[2] = "Terca";
dias[3] = "Quarta";
dias[4] = "Quinta";
dias[5] = "Sexta";
dias[6] = "Sabado";
ComboBox cbDia = new ComboBox(dias);

Para adicionar qualquer um dos componentes criados faça o seguinte
nomeDoForm.addComponent(nomeDoComponente);

Abaixo está listado um código completo de uma aplicação que possui um tema, um form com todos estes componentes e um comando de sair.
import com.sun.lwuit.Button;
import com.sun.lwuit.ComboBox;
import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.Image;
import com.sun.lwuit.Label;
import com.sun.lwuit.TextField;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import java.io.IOException;
import javax.microedition.midlet.*;

public class MidletDesenhando extends MIDlet implements ActionListener{
Form f;
Image image, imagem;
Label label, pictureLabel, lNome;
Button button;
Command exitCommand;
Button pictureButton;
TextField tfNome;
ComboBox cbDia;

public void startApp() {
Display.init(this);

// TEMA
try {
Resources r = Resources.open("/imagens/javaTheme.res");
UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
} catch (IOException ioe) {
System.out.println("Não foi possível carregar o tema.");
}

//cria um form
f = new Form("Testando Componentes");

//comando sair
exitCommand = new Command("Sair");
f.addCommand(exitCommand);
f.setCommandListener(this);

// TEXTO
label = new Label("Texto");
f.addComponent(label);

try {
// IMAGEM
image = Image.createImage("/imagens/calculadora.png");
pictureLabel = new Label(image);
f.addComponent(pictureLabel);

// TEXTO EM BAIXO DA IMAGEM
Label textBaixo = new Label(image);
textBaixo.setText("Texto");
textBaixo.setTextPosition(Component.BOTTOM);
f.addComponent(textBaixo);

} catch (IOException ex) {
ex.printStackTrace();
}

// BOTÃO COM TEXTO
button = new Button("Botao");
f.addComponent(button);
try {
// BOTÃO COM IMAGEM
imagem = Image.createImage("/imagens/musica.png");
pictureButton = new Button(imagem);
f.addComponent(pictureButton);
pictureButton.addActionListener(this);
} catch (IOException ex) {
ex.printStackTrace();
}

//Label e textField
lNome = new Label("Nome:");
tfNome = new TextField(15);
f.addComponent(lNome);
f.addComponent(tfNome);

//ComboBox
String[] dias = new String[7];
dias[0] = "Domingo";
dias[1] = "Segunda";
dias[2] = "Terca";
dias[3] = "Quarta";
dias[4] = "Quinta";
dias[5] = "Sexta";
dias[6] = "Sabado";
cbDia = new ComboBox(dias);
f.addComponent(cbDia);

//mostra o form
f.show();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void actionPerformed(ActionEvent e) {
if(e.getSource() == exitCommand){
notifyDestroyed(); //notifica a destruíção da aplicação ao gerenciador
destroyApp(true); //destroí a aplicação
}
}
}


Veja uma imagem do resultado da aplicação:

Evento WebMobile Tech Week Cancelado

11 agosto 2009 0 comentários

Infelizmente, por motivos de força maior, o evento WebMobile Tech Week 2009 foi cancelado. É uma pena, mas ficaremos esperando o WebMobile Tech Week 2010.

Porém não temos só notícias ruins! O Java Móvel firmou uma parceria com a Devmedia e iremos
sortear mais 5 assinaturas, totalizando 10 assinaturas da revista Java Magazine Digital. E com
muito prazer oferecer um desconto especial aos leitores que não forem sorteados.

Adotando o mesmo processo para o sorteio, os leitores que irão concorrer devem entrar em contato conosco mandando artigos pra serem publicados aqui no Java Móvel, deixar opniões para novos posts, ou contribuir da forma que acharem melhor.

Para mais informações entre em contato.

Para conhecer as revistas da Devmedia acessem o portal http://www.devmedia.com.br

Utilizando tema em LWUIT

10 agosto 2009 7 comentários


No post sobre LWUIT de hoje vamos aprender como por um tema na nossa aplicação e criar um form e um list.

Lembre-se de adicionar o JAR do LWUIT no seu projeto.
Veja os outros 2 posts anteriores de LWUIT (LWUIT - Introdução e HelloWorld com LWUIT).

Para iniciar precisamos de um tema. Este tema é um arquivo .res, que pode ser criado pelo próprio desenvolvedor, através da ferramenta Resource Edit ou baixado na internet. O tema que utilizaremos na aplicação pode ser baixado aqui. Insira ele na pasta src do seu projeto.

O código para carregar o tema é o seguinte:
try {
Resources r = Resources.open("/javaTheme.res");
UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
} catch (IOException ioe) {
System.out.println("O tema não pode ser carregado.");
}

Para criarmos um form é semelhante ao utilizando em LCDUI, porém cuidado na hora de importar a biblioteca para não importar a javax.microedition.lcdui.Form e sim a com.sun.lwuit.Form (Isto também vale para comandos, list, entre outros que for utilizar). Depois mostramos o form com o método show().
Form form = new Form("Título do Form");
form.show();

Vamos criar um comando sair e um comando listar
Command sair = new Command("Sair");
Command listar = new Command("Listar");

Agora adicionamos os comandos ao form e informamos que o form possui um ou mais eventos, para isto seu MIDlet deve implementar a classe ActionListener
form.addCommand(sair);
form.addCommand(listar);
form.setCommandListener(this);
A aplicação deve conter um método actionPerformed(ActionEvent ae) para implementar o que deve ser feito quando os eventos forem disparados. Para o comando sair destruímos a aplicação e o comando listar chamará um list. Portanto devemos criar um list e informar seus elementos.
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == sair){
notifyDestroyed();
}
if(ae.getSource() == listar){

}
}
No LWUIT um list é construído dentro de um form. O código abaixo mostra como criar um list, inserir elementos nele e depois adicioná-lo a um form.
list = new List();
list.addItem("Um");
list.addItem("Dois");
list.addItem("Tres");
list.addItem("Quatro");
form.addComponent(list);
form.show();

O código completo da aplicação fica o seguinte:
import com.sun.lwuit.Command;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.List;
import com.sun.lwuit.events.*;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import java.io.IOException;
import javax.microedition.midlet.*;


public class MidletListar extends MIDlet implements ActionListener{
Form form;
Command sair, listar;
List list;


public void startApp() {
Display.init(this);

// TEMA
try {
Resources r = Resources.open("/javaTheme.res");
IManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
} catch (IOException ioe) {
System.out.println("O tema não pode ser carregado.");
}


form = new Form("LWUIT");
form.show();

// COMANDOS
sair = new Command("Sair");
listar = new Command("Listar");

form.addCommand(sair);
form.addCommand(listar);
form.setCommandListener(this);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == sair){
notifyDestroyed();
}
if(ae.getSource() == listar){
// CRIANDO UM LIST
list = new List();
list.addItem("Um");
list.addItem("Dois");
list.addItem("Tres");
list.addItem("Quatro");
form.addComponent(list);
form.show();
}
}

}

O resultado da aplicação é mostrado nas figuras abaixo. Para baixar o projeto completo feito no NetBeans clique aqui.

Sorteio de Assinaturas da Revista Java Magazine

06 agosto 2009 5 comentários

Para a felicidade de alguns leitores, a DevMedia nos concedeu algumas assinaturas da revista Java Magazine Digital e ficamos muito felizes em poder compartilhar com todos que acompanham o blog. Dessa forma iremos sortear, entre os leitores que nos seguem e nos ajudarem de alguma forma, 5 assinaturas Digitais da Java Magazine. Se você tem interesse em acompanhar os artigos publicados na revista, pode participar mandando idéias para posts futuros ou escrevendo algum post para o javamovel referente ao conteúdo do evento. A revista digital tem todo o conteúdo da impressa e mais conteúdos extras!

Não perca tempo!

Semana que vem divulgaremos os nomes dos sortudos :)

WebMobile Tech Week

0 comentários

É com grande satisfação que o Java Móvel apresenta o maior evento de web e wireless do país!
Podemos participar de seminários e discussões sobre programação para TV Digital, desenvolvimento de jogos para celular e aplicativos para o Iphone, além de muitas outras novidades, confira.

O WebMobile Tech Week (WMTW), maior evento de web e wireless do país, tem o objetivo de reunir toda a comunidade de desenvolvedores de software da América Latina para discutir as novidades, tendências e soluções da área de TI. Neste ano, o WMTW, acontecerá nos dias 02 e 03 de outubro, no Centro Empresarial São Paulo (Panamby – CENESP).

O foco da agenda é apresentar aos desenvolvedores de softwares, consultores, analistas, engenheiros e diretores de software house as novas maneiras de alinhar seu trabalho com as necessidades da empresa, clientes e consumidores, assim como proporcionar informações sobre novas diretrizes de mercado, que impactarão no desenvolvimento estratégico e na execução de aplicações.

O evento contará com 60 sessões técnicas sobre as plataformas .Net e Java, num total de seis salas de palestras simultâneas, sendo três para cada linha de trabalho. Na área de Java, os destaques são as explanações sobre o desenvolvimento de jogos para celulares, do simples canvas à utilização de sensores na criação de games interativos, além da programação em Lua para a TV Digital, novidade no Brasil. Os participantes contarão ainda com uma mesa redonda que abordará a utilização de Java SE, Java EE, Java ME, Java FX e Java na TV do futuro. Já nas salas de conteúdo .Net, o diferencial ficará a cargo da apresentação das novidades trazidas pela versão 2010 do Visual Studio e amostras de desenvolvimento de aplicações para o iPhone. Os participantes poderão ainda desenvolver network com especialistas, consultores, empresas e desenvolvedores.

WebMobile Tech Week 2009

Datas: 2 e 3 de outubro de 2009.
Local: Centro Empresarial de São Paulo (Panamby – Cenesp).
Endereço: Av. Maria Coelho Aguiar, 215 - Bloco G - 2º andar. Santo Amaro SP.
Horário: das 8:30 às 18:30 h.

Mais informações e inscrições:
Tel: (21) 3382-5038
evento@devmedia.com.br

www.devmedia.com.br/wm2009

HelloWorld com LWUIT

05 agosto 2009 0 comentários

Continuando a série de posts sobre LWUIT vamos hoje fazer um "HelloWorld", para iniciar a familiarização com os códigos do LWUIT.

Veja o post anterior, LWUIT - Introdução.

Ao longo dos posts iremos introduzindo novos conceitos de LWUIT, como temas, botões, animações, entre outros.

HelloWorld ou HelloLwuit

1) Faça o download do LWUIT aqui.
2) Iremos utilizar o NetBeans 6.7.1. Crie um projeto Java ME e desmarque a opção de criar um MIDlet Olá. Pois o LWUIT não utiliza o editor visual da IDE. Seus códigos são feitos todos a mão.
3) Selecione CLDC 1.1, pois o LWUIT não roda no 1.0 e quanto ao MIDP selecione 2.0 ou 2.1.
4) Com o projeto pronto crie um MIDlet não visual e cole o código abaixo. Ele apresentará vários erros pois ainda não foi colocado o JAR do LWUIT no projeto.


import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.*;

public class HelloLWUITMidlet extends MIDlet implements ActionListener {
public void startApp() {
Display.init(this);

Form f = new Form("Hello, LWUIT!");
f.show();

Command exitCommand = new Command("Sair");
f.addCommand(exitCommand);
f.setCommandListener(this);
}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void actionPerformed(ActionEvent ae) {
notifyDestroyed();
}
}
5) Insira o JAR do LWUIT nos recursos do projeto.
6) Pronto é só executar!

Obs: Não esqueça que para rodar projetos com LWUIT é necessário ter emuladores compatíveis, como é o caso do novo Java Platform ME SDK 3.0: O sucessor do Wireless Toolkit ou do Sprint.

O código do LWUIT é próprio, portanto não usamos os códigos convencionais utilizados para construir interfaces com LCDUI.

Analisando o código...

No método StartApp() temos:
Display.init(this);

Este método é utilizado para inicializar o LWUIT passando a própria MIDlet como parâmetro.
Form f = new Form("Hello, LWUIT!");
f.show();

As linhas a cima cria um form com título “Hello, LWUIT!” e o mostra.
Command exitCommand = new Command("Sair");
f.addCommand(exitCommand);
f.setCommandListener(this);

Cria o comando sair, o adiciona ao form e informa que ele terá um evento.

No método actionPerformed(ActionEvent ae) temos os eventos que devem serem realizados quando os comandos forem pressionados. Como só temos um comando não temos condições para especificar o que fazer para cada evento disparado. Portanto quando o comando Sair for pressionado o evento a baixo é chamado. Ele notifica ao gerenciador de aplicativos que a MIDlet será destruída.
public void actionPerformed(ActionEvent ae) {
notifyDestroyed();
}

No próximo post chegaremos ao que realmente interessa: veremos como utilizar temas, dando um visual muito mais atraente as aplicações, e como criar componentes e adicioná-los ao form.

LWUIT - Introdução

04 agosto 2009 2 comentários

Olá! Devido a dificuldade de se encontrar materiais completos em português sobre LWUIT , vamos dispor aqui no javamovel uma série de artigos explicando passo a passo o desenvolvimento com LWUIT. Estes artigos serão baseados no guia de desenvolvimento oficial do LWUIT (LWUIT Developer's Guide).

Para quem ainda não sabe muito bem o que é o LWUIT, começaremos com uma breve introdução.

Introdução

Lightweight UI Toolkit (LWUIT) é uma biblioteca que permite criar interfaces gráficas do usuário (GUI) bastante atraentes, para dispositivos móveis ou quaisquer outros dispositivos que suportem o perfil MIDP, do Java ME. Ele foi baseado no Swing do Java SE e possui compatibilidade compatibilidade com MIDP 2.0, CDC, PBB e Java SE.
Com o LWUIT, diminui-se muito a necessidade de se desenhar telas em canvas para se obter interfaces amigáveis. É importante saber que o LWUIT não possui compatibilidade com a classe Canvas, portanto não é possível se desenhar interfaces canvas com o LWUIT. Mas oferece componentes visuais muito ricos, que podem ser muito mais atraentes do que interfaces desenhadas em LCDUI ou canvas, com muito menos eforço.
A biblioteca oferece melhorias a componentes já existentes no Java ME, como List, Form, Alert, entre outros. O LWUIT oferece ainda:
- suporte a touch Screen
- diversas fontes
- animações
- botões
- transições de telas animadas
- temas, que podem ser incluídos pelos próprios usuários
- layouts
- utilização de abas, como no Java SE
- integração 3D
- caixas de diálogo, entre outros.

No LWUIT, os temas podem ser carregados em tempo de execução. Para isto basta carregar um recurso com os temas e escolher um tema para ser o tema corrente da aplicação. Para criar um tema existe uma ferramenta muito interessante, disponibilizada pelo LWUIT toolkit, chamada ResourceEditor.
Para oferecer portabilidade o LWUIT implementa sua própria fina camada no topo do sistema nativo canvas e providencia uma abstração quanto aos diferentes dispositivos. Esta abstração é obtida através de classes chaves que escondem classes específicas, como Graphics, Image e Font.

Veja algumas imagens de como pode ficar uma aplicação desenvolvida com LWUIT, desfrutando de vários temas.


Nos próximos posts veremos como usar e criar temas, como usar o ResourceEditor, como fazer transições animadas, botões, lists e muitas mais. No próximo post vamos aprender como começar a desenvolver com LWUIT, fazendo um Hello LWUIT!