Esse artigo faz parte da revista Java Magazine edição 38. Clique aqui para ler todos os artigos desta edição

 

imagem

 

Clique aqui para ler todos os artigos desta ediçãoimagem_pdf.jpg

 

Datas no Desktop

Usando Componentes Swing para Manipulação de Datas e Calendários

Saiba como usar o NachoCalendar em aplicações Swing, como integrá-lo ao NetBeans e Eclipse, e conheça conceitos gerais sobre componentes visuais em Java

 

O Swing é uma biblioteca de componentes visuais muito rica e poderosa, permitindo criar uma grande quantidade de aplicações com qualidade profissional, usando apenas os componentes padrões inclusos no Java SE. Mas sempre haverá situações em que o desenvolvedor poderá se beneficiar de algum componente adicional.

Um caso comum é o de um “date picker”, um componente que permite selecionar uma data num calendário. A maioria dos usuários prefere este tipo de interface em vez da caixa de texto formatada oferecida pelo Swing (o componente JFormattedTextField).

O termo tecnicamente correto para qualificar componentes como um “date picker” em uma aplicação seria JavaBean, mas este termo ganhou usos comuns fora do seu sentido original, por isso preferimos o termo “componente”. Para mais detalhes sobre esta questão, veja o quadro “Componentes, JavaBeans e POJOs”

Existem vários componentes proprietários e livres para a seleção de datas, mas decidimos focar este artigo no NachoCalendar (nachocalendar.sf.net) para fornecer ao leitor um modelo de como incluir componentes Swing externos em suas aplicações. Veja também o quadro “Outras bibliotecas Java para calendários”.

Enquanto este artigo apresenta detalhes específicos da instalação e uso do NachoCalendar, os quadros que demonstram a integração deste componente com os IDEs NetBeans e Eclipse, será útil também para o desenvolvedor interessado em outros componentes adicionais para aplicações Swing.

Sobre o NachoCalendar

O NachoCalendar é um projeto open source criado em meados de 2004 no SourceForge. Como tem licença LGPL, pode ser incluído também em aplicações distribuídas sob licenças de software proprietário, sem que isto exija a permissão dos desenvolvedores e sem obrigar a abertura do código da aplicação que faz uso do componente.

São fornecidos três componentes principais, todos no pacote net.sf.nachocalendar.components:

l      DateField – Permite tanto a digitação de datas quanto a seleção em uma janela pop-up, com estilo semelhante a um combobox.

l      DatePanel – É basicamente o pop-up utilizado pelo DateField, mas fornecido como uma subclasse de JPanel. Por isso pode ser posicionado livremente dentro de uma janela qualquer para formar telas de entrada de dados customizadas (como numa agenda de compromissos).

l      CalendarPanel – Outra subclasse de JPanel, que exibe múltiplos DatePanels simultaneamente, formando uma visão de calendário que exibe diversos meses com navegação e layout customizáveis.

 

A Figura 1 apresenta a aplicação de demonstração inclusa com o NachoCalendar. Observe que o componente já está “localizado” para o português brasileiro, usando os recursos de localização presentes no Java SE, por meio de java.text.DateFormat e classes relacionadas.

 

imagem

Figura 1. Aplicação de demonstração do NachoCalendar: observe no DatePanel que a data atual pode ser indicada por uma elipse vermelha (os retângulos vermelhos indicam os componentes em si).

 

Os três componentes compartilham muitos recursos, de modo que a maior parte do que se aprende sobre o mais simples é válida também para os mais complexos. Assim o artigo inicia apresentando exemplos de uso do DateField, e depois passa para o DatePanel. Para evitar que o artigo fique muito longo, entretanto, não serão apresentados exemplos do CalendarPanel, pois a parte principal da sua utilização será exatamente igual à do DatePanel.

A Edição 22 apresenta, na seção “Primeiros Passos”, um artigo que detalha todas as APIs de manipulação de datas do Java SE. Leitura recomendada para os usuários do NachoCalendar e componentes similares.

Instalação do NachoCalendar

Para obter o NachoCalendar, visite nachocalendar.sf.net, siga o link “Downloads” e baixe o arquivo nachocalendar-0.23.zip. Então descompacte o ZIP em uma pasta qualquer. Será criado o diretório nachocalendar-0.23 que contém, entre outros, o arquivo manual-0.23.pdf, um “QuickStart” para a utilização do componente. A documentação JavaDoc pode ser encontrada no subdiretório doc. Em lib está o arquivo nachocalendar-0.23.jar, que deve ser adicionado ao classpath de compilação e de execução de qualquer aplicação que utilize os componentes do NachoCalendar.

Para executar o programa de demonstração do NachoCalendar, execute a seguinte linha de comando, onde %NACHO% deve ser substituído pelo diretório contendo o JAR do NachoCalendar:

 

java -jar %NACHO%\lib\nachocalendar-0.23-demo.jar

 

Usuários Linux devem executar o comando:

 

java -jar $NACHO/lib/nachocalendar-0.23-demo.jar

 

Os quadros “NachoCalendar no NetBeans 5” e “NachoCalendar no Eclipse VE” apresentam instruções específicas de instalação e uso para esses IDEs.

Agora veremos um exemplo de uso do NachoCalendar em aplicações Swing, para depois estudarmos em mais detalhes a arquitetura do NachoCalendar e exemplos adicionais de aplicações.

Exemplo de seleção de datas

A Listagem 1 apresenta um exemplo básico de uso do componente DateField do NachoCalendar, e demonstra quase tudo que é necessário saber sobre ele para utilizá-lo em uma aplicação real.

O exemplo modifica a instância de java.text.DateFormat do componente por meio do método setDateFormat(). A razão disso é que a configuração padrão do componente exibe anos com apenas dois dígitos (por exemplo, “17/05/06”), enquanto que o formato padrão MEDIUM de DateFormat utiliza quatro dígitos.

O exemplo também ilustra como inicializar e como recuperar a data editada pelo componente. Os métodos getValue() e setValue() são declarados para receber e retornar um java.lang.Object em vez de um java.util.Date ou java.util.Calendar. O motivo disto é tornar o componente um substituto direto para o JFormattedTextField, que define os métodos get/setValue() da mesma forma. Apesar da assinatura dos métodos indicar um Object, passar qualquer coisa diferente de um  java.util.Date irá gerar uma exceção.

Para compilar e executar o exemplo, antes acrescente o JAR com os componentes ao classpath do sistema, por exemplo:

 

set CLASSPATH=%CLASSPATH%;%NACHO%\lib\nachocalendar-0.23.jar

 

(Usuários Linux devem usar o comando export em vez do comando set.) O resultado da execução do programa pode ser visto na Figura 2.

 

imagem

...

Quer ler esse conteúdo completo? Tenha acesso completo