quinta-feira, 1 de maio de 2008

Tooltip para listas.

Ola pessoal,

Seguindo a idéia de apresentar alguns problemas que encontrei no desenvolvimento JME e soluções que utilizei, segue uma funcionalidade que pode ser incorporada a listas e ajudar o seu usuário durante a utilização da sua aplicação. Trata-se de um "tooltip" que é exibido quando o usuário fica um determinado tempo parado "em cima" de um determinado item da lista.

A idéia
A idéia era que quando o usuário ficasse um tempo parado em um item da lista fosse exibido algo onde pudesse ser exibida alguma explicação para o usuário sobre esse item que ele esta "selecionando". Alguns celulares Nokia possuem esse recurso e quando bem utilizado pode trazer um alto grau de usabilidade!

O Exemplo
No exemplo que vou mostrar aqui (e que o código está disponivel), eu optei por utilizar um Alert. Mas, fica ao gosto do fregues! =) E se achar que fica melhor utilizar um Ticker, ou um CustomItem e mostrar um aviso no meio da tela, fique a vontade, eu mostrarei o trecho que você deve alterar! ;-)
A aplicação está dividida em 3 classes (ListTooltipMIDlet, ListSelectionListener e TooltipTimer) que terão o seu funcionamento básico explicado abaixo.

ListSelectionListener
Essa classe, que implementa a interface Runnable, recebe como parametro para seu construtor a instância do Display atual da aplicação e a lista que terá suas ações "controladas" e o tooltip exibido. Essa classe é feita como uma thread pois ela tem que ficar o tempo todo verificando a mudança de seleção da lista.
Sua tarefa consiste básicamente em um loop (eterno) dentro do corpo do método run, que a cada interação é verificado se o indice de seleção da lista foi alterado desde a ultima execução. Caso o indice tenha sido alterado (o usuário mudou de opção dentro da lista), a variável de controle é atualizada, o schedule antigo de exibição é cancelado e uma nova instância da classe TooltipTimer é criada e schedulada para 2 mil milisegundos, ou seja, 2 segundos. Em seguida, a thread recebe o comando de sleep de 500 milisegundos (meio segundo).

TooltipTimer
Essa classe, que extende de uma TimerTask, assim como a ListSelecionListener recebe como parametro do seu construtor a instância do Display e da lista. Essa classe será executada 2 segundos após ela ter sido schedulada na classe ListSelectionListener e caso não tenha seu timer cancelado.
Sua tarefa a ser executada está dentro do método run e, nesse caso, é mostrar um alert com um texto. É justamente esse ponto que você deve alterar caso deseje que ele faça uma ação diferente, como por exemplo atualizar um ticker da sua List, chamar um novo form ou o que você achar interessante! =)

ListTooltipMIDlet
Bom, essa midlet nada mais é que apenas uma simples classe para poder fazer o exemplo funcionar. Aqui eu somente criei uma lista com alguns itens (que chamei de itens), exibi e depois fiz a utilização das classes que criei aqui, através da seguinte linha:

Thread t = new Thread(new ListSelectionListener(Display.getDisplay(this),
itens));
t.start();

Fiquem a vontade para usar o código, modificar ou até ignorar !! =)

Downloads

Projeto completo (Eclipse) com código fonte, clique aqui!
Aplicação exemplo (.jar), clique aqui!

[]s
Neto

Nenhum comentário: