Utilizando tema em LWUIT

10 agosto 2009


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.

7 comentários:

  • Unknown

    No Netbeans 6.5.1 apresenta o erro abaixo
    o que seria este erro

    ---------------------
    D:\Netbeans\Lista\nbproject\build-impl.xml:57: Platform home (platform.home property) is not set. Value of this property should be Java(TM) Platform Micro Edition SDK 3.0 emulator home directory location.
    FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

  • Olá Judão,

    O que indica no erro: Value of this property should be Java(TM) Platform Micro Edition SDK 3.0 emulator home directory location.

    Refere-se ao emulador do Netbeans 6.5.1 que não é compatível. O emulador que vc está usando não é compatível. Instale o SDK 3.0, ou atualize seu netbeans. Outros emuladores como o sprint também rodam projetos com lwuit.

    Veja sobre o SDK 3: http://www.javamovel.com/2009/06/java-platform-me-sdk-30-o-sucessor-do.html

    Att, javamovel.com

  • O post está ótimo, muito bom, vlw pela ajuda. vcs são d+++.

  • Bayron

    Muito bom, me ajudou muito. Alias, todo o site é excelente.

    OBS:
    No código completo repare que:
    - Na linha 24 a classe que deve ser utilizada é a "UIManager" e não a "IManager";
    - Após a linha 39 faltou o comando que manda exibir o Formulário, que é o form.show().

    Abraço

  • Post muito bom, pra mim só não está perfeito porque está dando o seguinte erro quando começa a emulador.
    ==================================================
    Installing suite from: http://127.0.0.1:1806/HelloLWUITMidlet.jad
    *** Error ***
    A problem occured during deploying application from http://127.0.0.1:1806/HelloLWUITMidlet.jad
    Reason:
    Corrupt JAR, error while reading: HelloLWUITMidlet.class
    C:\Documents and Settings\acer\My Documents\NetBeansProjects\HelloLWUITMidlet\nbproject\build-impl.xml:889: Execution failed with error code 1.
    FALHA NA CONSTRUÇÃO (tempo total: 9 segundos)
    ================================================

    Obrigado!

  • Estou com o mesmo problema!
    aff

  • Ola, estou tentando adicionar mais de um tema, para caso queira trocar de tema no enquanto a aplicação é executada. Gostaria de saber se isto é possivel.
    Agradeço desde já.

  • Postar um comentário