samsung-tocco

Olá!

Continuaremos dando seqüência a nossa ‘série’ sobre o desenvolvimento em Java ME para dispositivos móveis. Hoje irei falar mas um pouquinho sobre a classe Display e sobre os componentes visuais padrão de Java ME, mas precisamente da CLDC.

No ‘episódio’ anterior, Meu Primeiro MIDlet, eu citei que:

“Embora haja apenas um Display por MIDlet, dentro de uma MIDlet podem existir diversos objetos para serem exibidos.”

Agora é a hora de explicar isso melhor.

Uma instância da classe Display tem a possibilidade de ‘mostrar’ na tela do celular uma classe Displayable, que pode ser composta por vários tipos de componentes que extendem essa classe ou são descendentes diretos de classes filhas dela.

Lembram do myForm? Eu disse para pensar no myForm como um container onde é possível armazenar alguns tipos de objetos. Como você é uma pessoa esperta já deve ter imaginado que myForm de alguma maneira herda dessa classe. Caso você lembre bem, myForm é uma instância da classe Form. Veja o diagrama abaixo para clarear mais as coisa:

Relação entre Display e Displayable

Relação entre Display e Displayable

Como podemos observar, nosso Display pode ser composto por um Displayable. Só que Displayable não é uma classe ‘visível’. Ela funciona como uma abstração, uma interface.

Também notamos que tem duas classes que extendem Displayable que são Canvas e Screen. Resumidamente um Canvas é um meio de desenhar componentes gráficos personalizados e Screen utiliza um conjunto de componentes gráficos pré-definidos.

Agora vamos esquecer Canvas e pensar em Screen e suas subclasses. Temos quatros subclasses de Screen: Form (tipo do myForm), Alert, TextBox e List. Grave isso: somente UMA das subclasses de Screen pode ser exibido por vez na tela de um dispositivo. Isso significa que só myForm está presente na tela do dispositivo. Caso eu crie um outro tipo de Form, com o nome de otherForm, ou Alert, com o nome de myAlert, eu tenho que ‘tirar‘ myForm da tela para depois colocar otherForm ou myAlert nela, nunca juntos. Pense na tela do dispositivo como uma vaga de estacionamento e as subclasses de Screen em carros. Eles podem existir em simultaneamente mas somente um pode ocupar a vaga por vez.

estacionar

Observe o diagrama de classes novamente. Podemos ver que Form é composto por várias instancias de Item. Form é uma espécie de container. Ele é composto por vários componentes auto-organizáveis na tela. Isso mesmo, auto-organizáveis, ou seja, você não precisará se preocupar com layouts como eu SWING ou AWT. Como os dispositivos móveis possuem telas pequenas definir layouts seria algo no mínimo sem sentido.

Agora, como nós fazemos para exibir uma subclasse de Screen? Simples, olhe novamente o código de MyMIDlet construído anteiormente (link). Agora observe dentro do método startApp. Lá você irá encontrar display.setCurrent(myForm). Esse método de Display diz que é para ele colocar myForm nos holofotes, no meio do palco que é a tela do dispositivo.


Observe abaixo cada uma das subclasses de Screen em ação:

Form

Form

Alert

Alert

TextBox

TextBox

List

List

Quer fazer também? Copie o código abaixo. O que nós faremos para mudar entre os diferentes componentes? É só trocar myForm dentro de display.setCurrent(myForm) por qualquer um dos outros componentes.

package myMIDlet;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class TiposScreen extends MIDlet
{

	private Display display;
	private Form myForm;
	private Alert myAlert;
	private TextBox myTextBox;
	private List myList;

	private String[] items = {"Item1", "Item2", "Item3"};

	public TiposScreen()
	{
		display = Display.getDisplay(this);

		// Não se preocupe. Iremos falar sobre isso futuramente
		myForm = new Form("myForm");
		myAlert = new Alert("myAlert", "Meu component Alert", null, AlertType.INFO);
		myAlert.setTimeout(Alert.FOREVER);
		myTextBox = new TextBox("myTextBox", "Esse é mais um componete que toma toda a tela",
				200, TextField.ANY);
		myList = new List("myList", List.EXCLUSIVE, items, null);
	}

	protected void destroyApp(boolean unconditional)
			throws MIDletStateChangeException
	{
		// Nada aqui
	}

	protected void pauseApp()
	{
		// Nada aqui
	}

	protected void startApp() throws MIDletStateChangeException
	{
		display.setCurrent(myForm);
	}

}

Não irei prolongar mais nossa conversa. Prepare-se para os próximos ‘episódios’, pois iremos explorar Form e os componentes que podem compô-la. Até o próximo episódio nesse mesmo bat-blog, nessa mesma bat-tela, nesse… ah, vocês entenderam. 😉

Até lá pessoal!

Até lá pessoal!

Referências:

[1] Beginning Java ME Platform.

Anúncios