A classe Display


A apresentação de dados ao utilizador realiza-se através da classe pt.tecnico.uilib.Display. A forma de apresentar os dados ao utilizador deve seguir o seguinte procedimento: primeiro vai-se construindo a mensagem a apresentar e só quando esta estiver completa é que deve ser apresentada ao utilizador. A classe Display tem métodos que suportam a construção da mensagem de forma incremental. Cada instância da classe Display mantém uma cadeia de caracteres, tem métodos que permitem acrescentar caracteres a esta cadeia de caracteres e tem também métodos que permitem apresentar o estado actual da cadeia de caracteres ao utilizador. 

A funcionalidade principal desta classe é representada pelos seguintes métodos:
  • public Display() - cria um display em que o valor actual da mensagem a apresentar é a cadeia de caracteres vazia;
  • public Display add(Object obj) - adiciona a cadeia de caracteres resultante da invocação do método toString() sobre o parâmetro do método ao valor actual da mensagem a apresentar;
  • public Display addLine(String text) - semelhante ao método anterior mas a cadeia de caracteres é adicionada numa nova linha de texto. Se o valor actual da mensagem a apresentar ainda for a cadeia de caracteres vazia ("") então este método tem exactamente o mesmo comportamento do anterior;
  • public Display addAll(Collection<?> items) - adiciona a cadeia de caracteres resultante da invocação do método toString() sobre cada objecto guardado na coleção items ao valor actual da mensagem a apresentar. O resultado da invocação de cada método toString() é colocado numa nova linha de texto. Este método corresponde a invocar o anterior sobre cada elemento da coleção;
  • clear() - apaga o conteúdo da mensagem a apresentar colocando-a como sendo a cadeia de caracteres vazia;
  • popup(Object obj) - É uma forma mais rápida de apresentar a mensagem ao utilizador quando esta já está construída.  Quando se quer apenas apresentar ao utilizador a cadeia de caracteres retornada pela invocação do método toString() sobre o um dado objecto então basta utilizar este método, passando-lhe como argumento o objecto em causa, em vez de invocar o método add seguido do método display.
  • display() apresenta o texto recolhido pelos métodos add(String) e addLine(String). Após ter apresentado a mensagem ao utilizador, a mensagem associada ao Display é colocada como sendo a cadeia de caracteres vazia.

O texto a ser escrito pela aplicação vai sendo construído através dos métodos add e addLine. Ambos os métodos acrescentam a cadeia de caracteres indicada no único parâmetro dos métodos ao texto que deverá ser apresentado ao utilizador. A diferença entre estes dois métodos é que o método addLine cria uma nova linha de texto (adição do caracter mudança de linha "\n") no texto já recolhido antes de adicionar o texto passado como argumento ao texto já previamente recolhido.

O texto recolhido por uma instância de Display é apresentado ao utilizador quando é invocado o método display(). Após a apresentação do texto ao utilizador, o texto é inicializado com a cadeia de caracteres vazia.

O  seguinte pedaço de código apresenta ao utilizador os números (um número por linha) guardados numa lista de inteiros:

protected void execute() { // executed when this option is selected
    List<Integer> list =  ...;  // list of integers to show
    Display disp = new Display();
    for (Integer number : list)
        disp.addLine(number.toString());
    disp.display();
}

Ou, de forma mais simplificada,  utilizando o método addAll():

protected void execute() { // executed when this option is selected
    List<Integer> list =  ...;
    Display disp = new Display();
    disp.addAll(list);
    disp.display();
}

Ainda é possível simplificar mais utilizando o display que todos os comandos têm (guardado no atributo _display) e tirando partido do valor de retorno dos vários métodos add de Display:

protected void execute() { // executed when this option is selected
    List<Integer> list =  ...;
    _disp.addAll(list).display();
}