Curso Java

Propaganda
Curso Java
Prof. Júlio Machado
1) O Java-Swing (javax.swing) apresenta um grande conjunto de componentes que suportam a
implementação do padrão MVC (“Model View Controller”).
JList é um componente que permite a visualização e seleção de um ou mais elementos
de uma lista. Por exemplo, o código abaixo mostra a construção de um JList para um array de
strings.
String[] estados = {“PR”, “RS”, “SC”};
JList listaEstados = new JList(estados);
Para utilizar uma barra de rolagem, o objeto JList deve ser colocado dentro de um
JScrollPane (padrão Decorator).
String[] estados = {“PR”, “RS”, “SC”};
JList listaEstados = new JList(estados);
JScrollPane listaEstadosPainel = new JScrollPane(listaEstados);
Por padrão, um JList permite a seleção de múltiplos elementos. Para alterar o modo de
seleção, utiliza-se o método setSelectionMode(ListSelectionModel). Valores possíveis são:



SINGLE_SELECTION – seleção de um único elemento
SINGLE_INTERVAL_SELECTION – seleção de múltiplos elementos contíguos
MULTIPLE_INTERVAL_SELECTION – seleção de múltiplos elementos
Uma vez selecionado(s) o(s) elemento(s), é possível obter informações de qual
elemento foi selecionado (índice ou o próprio valor):
listaEstados.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
int indice = listaEstados.getSelectedIndex();
String elemento = (String) listaEstados.getSelectedValue();
Como JList foi implementado seguindo o padrão MVC, os dados da lista não são
armazenados “dentro” do JList mas em um objeto ListModel. O JList que enxergamos é a
visualização dos dados.
Quando utilizamos o construtor do objeto passando um array, o próprio construtor
criou um ListModel e o inicializou com os dados recebidos por parâmetro. Para verificar isso,
podemos executar o seguinte código que irá imprimir a sigla dos estados:
ListModel modelo = listaEstados.getModel();
for(int i = 0; i < modelo.getSize(); i++){
System.out.println(modelo.getElementAt(i));
}
Porém, as listas criadas nos exemplos acima são todas imutáveis, ou seja, não se pode
adicionar ou remover elementos. Para que o JList seja dinâmico, deve-se utilizar um “list
model” que suporte alterações. A API de Java já fornece uma implementação básica que é a
classe DefaultListModel.
O seguinte exemplo é uma versão dos exemplos anteriores que permite adicionar e
remover elementos:
ListModel estados = new DefaultListModel();
estados.addElement(“PR”);
estados.addElement(“RS”);
estados.addElement(“SC”);
JList listaEstados = new JList(estados);
estados.addElement(“MG”);
estados.remove(2);
a) Abra o arquivo “Exercicios4.zip”. Execute o exemplo “padraoObserver2” através da classe
Teste e verifique o comportamento da lista.
b) Execute o exemplo “padraoObserver2” através da classe Teste2 e verifique o
comportamento da lista. Note que o novo elemento NÃO é adicionado ao JList, mas à coleção
de dados que o JList mostra na tela.
c) Pesquise na documentação da API de Java quais métodos indicam os eventos utilizados pelo
“list model” para sinalizar ao JList que ele deve se redesenhar na tela refletindo as alterações
na lista de elementos.
Se for necessário um modelo de dados mais complexo, basta criar uma nova classe que
implemente a interface ListModel. O meio mais fácil de fazer isso é estendendo a classe
abstrata AbstractListModel.
d) Execute o exemplo “padraoObserver2b” através da classe Teste e verifique o
comportamento da lista. Abra o fonte e estude como a classe Estados foi implementada.
e) Como você alteraria o código para que a lista mostrasse “sigla – nome” ao invés de somente
“sigla”?
2) Um banco implantou um sistema para controlar o acesso dos clientes aos caixas (existem 5
caixas no total). Cada cliente, ao chegar, registra-se no sistema, informando seu nome e sua
idade. Os caixas, quando liberados, solicitam ao sistema o próximo cliente. O sistema está
projetado para dar prioridade a clientes idosos, da seguinte forma:


Os caixas 1 e 2 deverão dar prioridade aos clientes com 65 anos ou mais. Assim, se
houver clientes desta faixa etária, aquele que tiver chegado há mais tempo deve ser
selecionado. Caso não haja, seleciona pela ordem de chegada o cliente (de qualquer
idade) que está a esperar;
Os caixas 3, 4 e 5 devem selecionar o cliente que está há mais tempo a esperar, seja
ele de que idade for.
A interface com o usuário deve oferecer duas opções: uma para o caixa solicitar o próximo
cliente (que será selecionado de acordo com as regras de prioridade), e uma para o cliente se
registrar quando chega ao banco.
Download