Escolar Documentos
Profissional Documentos
Cultura Documentos
Mais uma camada será introduzida ao desenho do nosso software: a camada base. Nessa camada, costumam
ficar os serviços técnicos de mais baixo nível de um aplicativo, como, por exemplo, gerenciamento de
servidores, de envio de e-mails, de registro e recuperação de logs, de E/S de rede e de geração de
arquivos/relatórios.
Conteúdo
• Obtendo e adicionando a biblioteca iText
o Como obter a biblioteca iText
o Como adicionar a biblioteca iText ao projeto
• Implementando a camada Base
o Como criar a classe GeradorDeCabecalhoRodape
o Como criar a classe GeradorDeArquivoPDF
o Como criar a interface IGeradorDeArquivoPDF
o Como criar a classe FactoryDeServicos
o Como criar a interface IFactoryDeServicos
• Implementando a camada Util
o Como criar a classe ArquivoUtil
• Alteração na camada Modelo
o Como criar a classe ControleArquivo
• Alteração na camada Visão
o Como criar a classe GUIRelatorioDeSocio
o Como criar a classe OuvinteDeGUIRelatorio
o Alterações na classe GUIPrincipal
2. Copie-a para o diretório lib do JDK que está usando, por exemplo, C:\Program
Files\Java\jdk1.6.0_18\lib;
3. No NetBeans, clique no menu Ferramentas e, em seguida, em Bibliotecas;
É aberto o Gerenciador de Bibliotecas.
4. Clique em Nova biblioteca.
5. Em Nome da biblioteca, digite iText e clique em OK.
Entre as bibliotecas de classe, aparece agora iText.
1. No projeto, clique com o botão direito sobre Bibliotecas e, em seguida, clique em Adicionar
biblioteca.
2. Selecione a biblioteca iText e clique em Adicionar biblioteca.
1. Clique com o botão direito sobre o pacote net.antoniopassos.dukeclube, aponte para Novo e clique
em Classe Java.
É exibido o assistente para criar classe.
1. Em Nome da classe, digite GeradorDeCabecalhoRodape. Em pacote, acrescente .base.arquivo.impl.
2. Clique em Finalizar.
A classe GeradorDeRelatorios é criada, e seu código-fonte é exibido.
3. Faça a classe herdar de PdfPageEventHelper. Para tanto, ao lado do nome da classe, inclua extends
PdfPageEventHelper.
4. Corrija a importação.
5. Declare as seguintes variáveis:
protected Paragraph cabecalho;
protected PdfPTable rodape;
6. Corrija as importações.
Esse método configura o cabeçalho do relatório como sendo um parágrafo cujo texto é a string passada
como argumento e o rodapé como uma tabela de 3 colunas, cujas células exibem os créditos do DADP.
8. Corrija as importações.
5. Corrija as importações.
relatorio.close();
}
try {
PdfWriter writer = PdfWriter.getInstance(relatorio, new
FileOutputStream(arquivo));
writer.setPageEvent(new GeradorDeCabecalhoRodape("DukeClube - Relatório de
Sócios"));
Esse método cria o arquivo PDF. Note como são configurados o tamanho da página para A4, a orientação
para paisagem e as margens para 72.
9. Implemente o seguinte método.
private void configurarPropriedades() {
relatorio.addTitle("DukeClube - Relatório de Sócios");
relatorio.addSubject("Relatório de sócios");
relatorio.addKeywords("DukeClube, iText, DADP");
relatorio.addCreator("iText 5.0.2");
relatorio.addAuthor("Prof. Antonio Passos");
relatorio.addHeader("Expires", "0");
}
return tabelaDeSocios;
}
Esse método cria a tabela, cujas linhas corresponderão aos registros dos sócios.
11. Implemente o seguinte método.
private void configurarCabecalhoDaTabela(PdfPTable tabela) {
tabela.setHeaderRows(1);
Esse método configura o cabeçalho da tabela criada no passo anterior com os atributos dos sócios.
12. Implemente o seguinte método:
Esse método adiciona linhas à tabela, cada uma correspondendo a um registro de sócio.
1. Corrija as importações.
1. Clique com o botão direito sobre o pacote a classe GeradorDeArquivoPDF, aponte para Refatorar e
clique em Extrair interface.
2. Na janela Extrair interface, digite IGeradorDeArquivoPDF em Nome da interface, marque a caixa
gerarRelatorioDeSocio e clique em Refatorar.
A interface é criada.
3. Clique com o botão direito sobre a interface, aponte para Refatorar e clique em Mover.
4. Na janela Mover classe que é aberta, em Para pacote, apague .impl e clique em Refatorar.
5. Corrija as importações.
1. Clique com o botão direito sobre a classe FactoryDeServicos, aponte para Refatorar e clique em
Extrair interface.
1. Clique com o botão direito sobre o pacote net.antoniopassos.dukeclube, aponte para Novo e clique
em Nova classe.
2. Em Nome da classe, digite ArquivoUtil. Em Pacote, acrescente .util e clique em Finalizar.
3. Implemente o seguinte método:
public static boolean isExtensaoIgualA(File arquivo, String extensao) {
int posicaoDoPonto = arquivo.getAbsolutePath().lastIndexOf(".");
if (posicaoDoPonto < 0) {
return false;
}
if (extensaoDoArquivo.toLowerCase().equals(extensao)) {
return true;
} else {
return false;
}
}
4. Corrija a importação.
IGeradorDeArquivoPDF geradorDeRelatorios =
fabricaDeServicos.getGeradorDeRelatorios(arquivo);
geradorDeRelatorios.gerarRelatorioDeSocios(socios);
}
4. Corrija as importações.
1. Clique com o botão direito sobre o pacote net.antoniopassos.dukeclube.visao.gui, aponte para Novo
e clique em Formulário JInternalFrame.
2. Em Nome da classe, digite GUIRelatorioDeSocio.
3. Clique em Finalizar.
A janela GUIRelatorioDeSocio é criada e aberta no editor (visão projeto).
4. Na janela Inspetor, clique com o botão direito em JInternalFrame e, no menu pop-up, clique em
Propriedades.
5. A janela Propriedades é exibida.
6. No alto da janela, selecione Propriedades .
7. Marque a caixa de seleção closable.
8. Em title, digite DukeClube - Relatório de Sócios.
9. Clique em Fechar.
10. Adicione um painel(JPanel) e mude seu nome para pCriteriosDePesquisa.
©2009 Antonio Passos | http://www.antoniopassos.com.br/ead | Todos os direitos reservados
Desenvolvimento de Aplicativos Desktop em Java Utilizando Padrões 12
14. Adicione um botão de opção(JRadioButton) ao painel, mude seu texto para Todos os sócios e seu
nome para rbSociosTodos.
15. Marque a caixa de seleção da propriedade selected.
17. Adicione outro botão de opção, mude seu texto para Apenas os sócios... e seu nome para
rbSociosEspecificos.
18. Para a propriedade buttonGroup, selecione bgCategoriasDeSocio.
19. Adicione uma caixa de seleção (JCheckBox), mude seu texto para Titulares e seu nome para
cbTitulares.
20. Em Propriedades, desmarque a caixa enabled.
21. Adicione outra caixa de seleção (JCheckBox), mude seu texto para Remidos e seu nome para
cbRemidos.
22. Em Propriedades, desmarque a caixa enabled.
23. Adicione mais uma caixa de seleção (JCheckBox), mude seu texto para Beneméritos e seu nome para
cbBenemeritos.
24. Em Propriedades, desmarque a caixa enabled.
25. Sob o painel, adicione um rótulo, mude seu texto para Arquivo .PDF e seu nome lArquivoPDF.
26. Sob o rótulo, adicione um campo de texto(JTextField), apague seu texto e mude seu nome para
tfArquivoPDF.
27. Em Propriedades, desmarque a caixa editable.
28. Ao lado do campo de texto, adicione um botão (JButton), mude seu texto para Selecionar... e seu
nome para bSelecionar.
29. Sob o campo de texto e o botão, adicione um separador(JSeparator).
30. Sob o separador, adicione um botão, mude seu texto para Gerar relatório e seu nome para
bGerarRelatorio.
31. Em Propriedades, desmarque a caixa de seleção da propriedade enabled.
32. Na janela Inspetor, clique com o botão direito sobre Outros componentes, aponte para Adicionar da
paleta, aponte para Janelas Swing e clique em Selecionador de arquivos (JFileChooser) .
return cbBenemeritos.isSelected();
}
Esses métodos retornam true se o botão de opção (ou caixa de seleção) correspondente estiver
selecionado. Caso contrário, retorna false.
41. Implemente o método abaixo.
public File getArquivo() {
return this.arquivoPDF;
}
cbTitulares.setSelected(false);
cbRemidos.setSelected(false);
cbBenemeritos.setSelected(false);
Essas instruções criam e exibem uma instância de JFileChooser com que o usuário selecionará o diretório
e o nome do arquivo PDF a ser gerado.
52. Corrija as importações.
3. Clique em Finalizar.
4. Declare a seguinte variável:
private GUIRelatorioDeSocio guiRelatorio;
5. Corrija a importação.
6. Implemente o seguinte método:
private void gerarRelatorioDeSocios() {
ControleSocio controleSocio = new ControleSocio();
if (guiRelatorio.isSelectecRbSociosEspecificos()) {
if (guiRelatorio.isSelectedCbTitulares()) {
controleSocio.adicionarCriterioDePesquisaIgualA("categoria",
CategoriaDeSocio.Titular.ordinal());
}
if (guiRelatorio.isSelectedCbRemidos()) {
controleSocio.adicionarCriterioDePesquisaIgualA("categoria",
CategoriaDeSocio.Remido.ordinal());
}
if (guiRelatorio.isSelectedCbBenemeritos()) {
controleSocio.adicionarCriterioDePesquisaIgualA("categoria",
CategoriaDeSocio.Benemérito.ordinal());
}
}
try {
List socios = controleSocio.realizarPesquisa();
if (socios.size() > 0) {
ControleArquivo controleArquivo = new ControleArquivo();
File arquivo = guiRelatorio.getArquivo();
if (!ArquivoUtil.isExtensaoIgualA(arquivo, ".pdf")) {
arquivo = new File(arquivo.getAbsolutePath() + ".pdf");
}
controleArquivo.gerarRelatorioDeSocios(socios, arquivo);
} else {
throw new DukeClubeException("Não há sócios cadastrados!!!");
}
} catch (DukeClubeException ex) {
GUIMensagem.exibirMensagem(ex.getMessage(), "DukeClube - Relatório", true);
}
}
8. Corrija as importações.
9. Implemente o seguinte construtor:
public OuvinteDeGUIRelatorioDeSocio(GUIRelatorioDeSocio guiRelatorio) {
this.guiRelatorio = guiRelatorio;
this.guiRelatorio.bGerarRelatorioAddActionListener(new OuvinteGerarRelatorio());
}
2. Na janela Inspetor, clique com o botão direito sobre o item de menu itemDeMenuRelatorioDeSocio,
aponte para Eventos, aponte para Action e, em seguida, clique em actionPerformed.
3. No corpo do método exibido, substitua o comentário pelas instruções:
if ((guiRelatorioDeSocios == null) || (!guiRelatorioDeSocios.isVisible())) {
guiRelatorioDeSocios = new GUIRelatorioDeSocio();
OuvinteDeGUIRelatorioDeSocio ouvinte = new
OuvinteDeGUIRelatorioDeSocio(guiRelatorioDeSocios);
desktopPane.add(guiRelatorioDeSocios);
guiRelatorioDeSocios.setPosicao();
guiRelatorioDeSocios.setVisible(true);
}
try {
guiRelatorioDeSocios.setSelected(true);
} catch (PropertyVetoException exc) {
StringBuffer mensagem = new StringBuffer();
mensagem.append("Não foi possível selecionar a janela Relatório de Sócio!");
mensagem.append("\nMotivo: " + exc.getMessage());
GUIMensagem.exibirMensagem(mensagem.toString(), "DukeClube - Relatório de Sócio",
true);
}
4. Corrija a importação.
Testando o aplicativo
1. Levante o servidor de banco de dados H2, caso não o tenha feito ainda.
2. Execute o aplicativo.
7. Acesse o diretório onde foi gerado o arquivo e abra-o com um leitor de PDF.
9. Encerre o aplicativo.