×
Namespaces

Variants
Actions

Tooltip para listas em Java ME

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Artigo
Criado por netomarin em 19 Jun 2008
Última alteração feita por lpvalente em 08 Dec 2013

Contents

Introdução

Este artigo mostra como implementar um "tooltip" em listas, usando Java ME.

Um "tooltip" em uma lista pode servir como uma ajuda, ou dica, para que o usuário possa entender melhor uma opção da lista, já que devido ao tamanho reduzido dos dispositivos não contribui muito para uma interação amigável com o usuário.

TooltipTimer

A principal idéia de um tooltip é exibir a dica para o item da lista no qual o usuário está esperando. E uma forma de se programar um certo evento (nesse caso o tooltip) é utilizar uma TimerTask.

A classe TooltipTime estenderá a classe TimerTask e receberá no seu construtor a instância do Display corrente para poder exibir a dica e a instância da lista que está sendo "observada". O principal objetivo da instância da lista é poder saber qual item está selecionado.

O método run() é o responsável por executar a ação da tarefa, que nesse caso é exibir um alerta indicando qual item está selecionado. Nesse ponto você pode alterar como o tratamento é feito. Por exemplo você pode exibir sua dica da maneira que achar melhor.

Segue o código dessa classe:

public class TooltipTimer extends TimerTask {
 
private Display display;
private List list;
 
public TooltipTimer(Display d, List list) {
this.display = d;
this.list = list;
}
 
public void run() {
String texto = list.getString(list.getSelectedIndex());
Alert alertInfo = new Alert("Item selecionado",
"Item Selecionado: "+texto,
null,
AlertType.INFO);
alertInfo.setTimeout(Alert.FOREVER);
display.setCurrent(alertInfo);
}
}

ListSelectionListener

Para que seja possível que a aplicação perceba que o usuário está a um determinado tempo parado em uma das opções, "alguém" precisa saber das mudanças do estado da lista, e então cancelar uma certa tarefa (classe TooltipTimer) ou iniciar uma nova, de acordo com a mudança de seleção.

Para isso, a classe ListSelectionListener é extende de Runnable e ficará em loop infinito e verificando a cada 500 milisegundos se houve mudança no indice selecionado da lista. Caso haja mudança, a classe cancela um timer inciado anteriormente e inicia um novo timer que executará a classe TooltipTimer em 2000 milisegundos, ou seja, 2 segundos.

Segue código dessa classe:

public class ListSelectionListener implements Runnable {
 
private Timer timer;
private Display d;
private List l;
private int selectedIndex;
 
public ListSelectionListener(Display d, List l) {
this.timer = new Timer();
this.selectedIndex = -1;
this.d = d;
this.l = l;
}
 
public void run() {
while ( true ) {
if ( selectedIndex != l.getSelectedIndex() ) {
/*
* Atualizando indice selecionado
*/

this.selectedIndex = l.getSelectedIndex();
 
/*
* Cancelando eventuais tarefas antes, já que foi mudada a seleção
* E depois é reiniciado!
*/

timer.cancel();
timer = new Timer();
 
/*
* Ativando a tarefa de exibição para daqui a 2 segundos.
* Obs.: Por isso é somado 2000 (milisegundos) ao tempo corrente.
*/

timer.schedule(new TooltipTimer(d, l),
new Date(System.currentTimeMillis()+2000));
}
 
/*
* Dorme... para verificar daqui a pouco se mudou a seleção,
* senão ficaria em loop infinito e travaria aplicação.
* Obs.: Tempo em milisegundos, nesse caso 500 = meio segundo
*/

try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

Colocando pra funcionar

Agora que você já tem essas duas classes prontas, é preciso fazer algumas linhas de código para que o tooltip aconteceça corretamente.

Para isso, o primeiro passo é criar a sua List (ou alguma classe que extenda de List). Depois, criar uma thread que receberá uma instância da classe ListSelectionListener e depois iniciar a thread.

Segue um trecho de exemplo para o uso:

...
itens = new List("Itens: ",
Choice.IMPLICIT,
new String[]{"Item 1", "Item 2", "Item 3", "Item 4"},
null);
 
itens.addCommand(new Command("Sair", Command.EXIT, 1));
itens.setCommandListener(this);
Display.getDisplay(this).setCurrent(itens);
Thread t = new Thread(new ListSelectionListener(Display.getDisplay(this),
itens));
t.start();
...
This page was last modified on 8 December 2013, at 00:07.
112 page views in the last 30 days.