P. 1
apostila_programacao3periodo

apostila_programacao3periodo

|Views: 267|Likes:
Published by viniciuslaura

More info:

Published by: viniciuslaura on May 03, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/06/2013

pdf

text

original

Sections

  • Apresentação
  • Plano de Ensino
  • Sumário
  • Aula 1
  • Aula 2
  • Aula 3
  • Aula 4
  • Aula 5
  • Aula 6
  • Aula 7

Programação 3° Período

Alex Coelho

... import javax.swing.*; ... public class AppCadastro extends Frame{ ... TextField nome = new TextField(71); TextField descricao = new TextField(68); Button salvar = new Button("Salvar"); Button limpar = new Button("Limpar"); Button report = new Button("Relatório"); Button sair = new Button("Sair"); Label result = new Label(); //método construtor public AppCadastro(){ rio"); ... painelCadastro.setLayout(new FlowLayout()); painelCadastro.add(new Label("Nome:")); painelCadastro.add(nome); painelCadastro.add(new Label("Descrição:")); painelCadastro.add(descricao);

Caro estudante,
Seja bem-vindo à disciplina Programação. O objetivo deste material é apresentar os principais conceitos que a tecnologia Java disponibiliza para a construção de aplicações visuais, aprofundar e conhecer novos componentes da programação visual, além dos conceitos relacionados à conexão e consulta a banco de dados, para que, ao final desta disciplina, você consiga desenvolver programas em Java, aplicando todo o conhecimento adquirido. A tecnologia Java, nos últimos anos, tornou-se muito popular no mercado, estando presente nas mais diversas aplicações, como, em eletrodomésticos, aparelhos celulares e web. Assim, a linguagem Java tem características que a tornam diferenciada, sendo de grande importância na criação de software. Na aula 1, iniciaremos conhecendo os componentes básicos para a programação visual, utilizando a biblioteca AWT, além de relembrarmos conceitos básicos já vistos na disciplina de Programação anterior. Na aula 2, continuaremos com a apresentação dos componentes da biblioteca AWT e aprenderemos a desenvolver programas e explorar a interação. Em nossa 3ª aula, serão apresentados os tratadores de eventos para a interação dos usuários com o sistema que são aceitos pela biblioteca AWT e serão explorados os conceitos vinculados ao gerenciamento de layouts e disposição dos componentes em uma interface gráfica. Na 4ª aula, conheceremos os conceitos para construção de aplicações que serão interligadas a banco de dados para o armazenamento e recuperação de dados. Em nossa aula 5, o foco será o trabalho com a Applets, que possibilita a criação de programas com interfaces para WEB. Na aula 6, iremos falar sobre o desenvolvimento de programas em Java com relatórios, possibilitando a criação de aplicações comerciais, mais completas. Finalizando, na aula 7 será apresentado um estudo de caso, de uma aplicação completa para o cadastro e consultas de cursos, por meio da utilização de todos os conceitos apresentados em nosso módulo. Então vamos ao que interessa, tente aproveitar ao máximo tudo o que será exposto na disciplina.

Apresentação

Aires Assessoria Editorial Marinalva do Rêgo Barros Silva Assessoria Produção Gráfica Katia Gomes da Silva Revisão Lingüístico-Textual Kyldes Batista Vicente Revisão Digital Katia Gomes da Silva Projeto Gráfico Douglas Donizeti Soares Irenides Teixeira Katia Gomes da Silva Programação Visual Douglas Donizeti Soares Katia Gomes da Silva Material Didático – Equipe Univali Coordenação Geral . G. Extensão e Cultura Valdir Cechinel Filho Coordenação Técnica e Logística Jeane Cristina de Oliveira Cardoso Coordenação de Curso Luis Carlos Martins Editoração Gráfica Delinea Design Soluções Gráficas e Digitais LTDA Coordenação Editorial Charlie Anderson Olsen Larissa Kleis Pereira Logística Editorial Michael Bernardini Diagramação Michael Bernardini Ilustração Alexandre Beck EADCON – Empresa de Educação Continuada Ltda Diretor Presidente Luiz Carlos Borges da Silveira Diretor Executivo Luiz Carlos Borges da Silveira Filho Diretor de Desenvolvimento de Produto Márcio Yamawaki Diretor Administrativo e Financeiro Júlio César Algeri .Fundação Universidade do Tocantins Reitor Humberto Luiz Falcão Coelho Vice-Reitor Lívio William Reis de Carvalho Pró-Reitor de Graduação Galileu Marcos Guarenghi Pró-Reitor de Pós-Graduação e Extensão Claudemir Andreaci Pró-Reitora de Pesquisa Antônia Custódia Pedreira Pró-Reitora de Administração e Finanças Maria Valdênia Rodrigues Noleto Diretor de EaD e Tecnologias Educacionais Marcelo Liberato Coordenador Pedagógico Geraldo da Silva Gomes Coordenador do Curso Igor Yepes Organização de Conteúdos Acadêmicos Alex Coelho Material Didático – Equipe Unitins Coordenação Editorial Maria Lourdes F. Pós-Graduação.Gerência de EaD Margarete Lazzaris Kleis Reitor José Roberto Provesi Vice-Reitor Mário César dos Santos Procurador Geral Vilson Sandrini Filho Secretário Executivo Nilson Scheidt Pró-Reitora de Ensino Amândia Maria de Borba Pró-Reitor de Pesquisa.

• Apresentar os principais componentes utilizados para a construção de interfaces gráficas. JasperReports e iReport. ObjEtiVOS • Apresentar conceitos básicos da linguagem de programação Java para programação visual. Biblioteca AWT (Abstract Window Toolkit). Menus. Componentes básicos: Frame. TextField. TextArea.EmEntA Programação visual utilizando a tecnologia Java. Label. Applets. • Demonstrar aos alunos a confecção de relatórios utilizando a tecnologia Java. PreparedStatament. • Demonstrar aos alunos o potencial do desenvolvimento de aplicações visuais e sua possibilidade de interação com os usuários. Choice. • Proporcionar a compreensão aos alunos sobre a utilização de banco de dados em aplicações visuais utilizando componentes e conceitos de conexão. Connection. COntEúdO PrOgrAmátiCO • Componentes visuais básicos • Label • Button • TextField • Pane • TextArea • Choice • List • Checkbox • CheckboxGroup • Menu • Tratamento de eventos • Gerenciamento de layouts • Conexão com banco de dados • Inserção e consultas a banco de dados • Applets • Relatórios com jasperReport Plano de Ensino . Eventos AWT. Panel. Button. List. CheckBoxGroup. Conexão com Banco de dados: JDBC. Statement. CheckBox. Gerenciadores de Layout. Tipos JDBC.

bibliOgrAfiA COmPlEmEntAr SUN. ANSELMO. 2003.com.sun. JasperReports for Java Developers. Disponivel em http://java. Fernando. 2006. ed. Rio de Janeiro: Ciência Moderna. DEITEL. 2007. 6 ed. 2. CARDOSO. São Paulo: Pearson Prentice Hall. Acessado em 12 out. Introdução à programação orientada a objetos usando Java. Harvey M. SANTOS.bibliOgrAfiA báSiCA BOENTE. Rio de Janeiro: Brasport. Caíque. 2006. Aplicando lógica orientada a objetos em Java. Orientação a objetos na prática: aprendendo orientação a objetos com Java. Florianópolis: Visual Books. Java: como programar. Java Technology. David. Agosto. 2005. Rio de Janeiro: Campus. Alfredo. . Rafael. 2003. HEFFELFINGER. Aprendendo a programar em Java 2: orientado a objetos. 2005. MicroSystem.

.................................. 49 Aula 5 – Applets Java ...................................................... 23 Aula 3 – Gerenciadores de layout e Tratadores de evento........................................................ 37 Aula 4 – Trabalhando com Banco de Dados................... 71 Aula 7 – Estudo de Caso....................................................................................................... 83 Sumário ..............Aula 1 – Programação Visual em Java ...................................................... 61 Aula 6 – Relatórios ............................................................................ 9 Aula 2 – Componentes visuais ..

.

com o avanço tecnológico e dos microcomputadores em empresas e residências. introdução Nos últimos anos.Aula 1 Programação Visual em java Objetivo Esperamos que. com isso. vistos na disciplina Programação do segundo período. passaram a agilizar os processos antes desempenhados de maneira pouco interativa. ao final desta aula. as aplicações gráficas ganharam considerável espaço. aumentando. conforme apresentado no módulo anterior. é importante conhecermos os conceitos básicos da programação orientada a objetos. Essas interfaces que mudaram todo o conceito da programação são mais conhecidas como GUI (Graphical User Interface) e obedecem a um padrão que consiste em dar ao usuário o que ele está vendo e precisando. rica e intuítiva com os usuários. Esse conhecimento é importante para uma melhor compreensão desta aula. Pré-requisitos Para iniciarmos os estudos sobre a programação visual Java. além de fornecerem uma interface mais simples. únicas no desenvolvimento de aplicações gráficas que. a linguagem de programação Java oferece diversas capacidades. uma vez que são conceitos básicos para prosseguimento na construção de programas visuais em Java. você seja capaz de: • conhecer os principais componentes visuais utilizados na tecnologia Java para a programação visual. devido à capacidade de liberdade de plataforma não Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 9 . o famoso “what you see is what you get” das pesquisas oriundas da interação homem-máquina. Assim. as possibilidades que.

utilizando componentes GUI. utilizando componentes GUI. fez das interfaces gráficas um sucesso. 1. A outra biblioteca e que será tema de nossos estudos nesta aula. A linguagem Java disponibiliza duas bibliotecas para a construção de interfaces gráficas. sendo uma vantagem comercial diante das demais linguagens. e desempenhando as mesmas funções “ A linguagem Java disponibiliza duas bibliotecas para a construção de interfaces gráficas. apresentados na aula 5 da disciplina de programação anterior. pode se afirmar que a AWT faz com que seja criada uma generalização dos componentes utilizados na construção de aplicações visuais. entradas de dados. fazendo com que estas sejam sempre equivalentes. iniciaremos esta aula apresentando um conceito geral da programação visual com Java. como reconhecimento de voz. são elementos que compõem uma interface GUI. consiste na biblioteca AWT (Abstract Window Toolkit) que é disponibilizada por meio da importação do pacote java.1 Programação Visual Nesta aula. vista anteriormente. campos de texto e menus. No caso. A classe abstrata Component consiste na base para construção de qualquer componente visual oferecido pela linguagem Java. Podemos dizer que a utilização de componentes padronizados. 2005). um componete GUI é: um objeto pelo qual o usuário interage através do mouse. por meio da utilização da AWT (DEITEL.aUla 1 • PROgRaMaçãO são necessárias modificações ou mesmo recompilação da aplicação. a biblioteca AWT fornece diversas classes.” 10 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . Pela utilização de componentes visuais. seleção de caixas. Estes componentes também conhecidos como GUI componentes. acionar outras operações que tornem as aplicações interessantes ao usuário conforme demonstrado nas aulas finais do módulo anterior. como botões. comuns e abstratas que realizam com a utilização da JVM (Java Virtual Machine) a apresentação dos componentes visuais pertencentes a essa biblioteca. sendo independentes da plataforma que esteja sendo utilizada. Segundo Deitel (2005). é possível que usuários interajam por meio de operações realizadas pelo teclado ou mouse. tornando possível com isso. do teclado ou outra forma de entrada. Assim. com a implementação de aplicações simples.awt. botões além de. sendo que estas podem ser executadas em diferentes ambientes gráficos. A primeira consiste na utilização da biblioteca Swing. Em discussão sobre os conceitos vinculados aos componentes. veremos mais a fundo os conceitos relacionados à programação com interfaces visuais.

como melhor você estiver familiarizado. com a redução de custos. selecionando todos os componentes que irão compor a tal interface. Sendo assim. uma mesma aplicação pode ser executada sem que o resultado final seja alterado. Dentre estas. Estas colaboram com a aceleração do processo de desenvolvimento e. ou mesmo atributo. Windows ou mesmo Solaris. no caso. Saiba mais Existem diversas IDEs e plugins para ferramentas de desenvolvimento para aplicações gráficas em Java. fica a seu critério a utilização ou não dessas ferramentas.aUla 1 • PROgRaMaçãO para as quais foram destinadas e se propõem a resolver garantindo a portabilidade do sistema. 2007): simples. 2006). Sempre é válido mencionar que em Java todos os componentes são classes. interpretada. A Sun define a Java como (SUN. utilizando o padrão Drag and Drop. 1. mesmo que a aparência do componente seja distinta. por exemplo. um botão sempre será compreendido como um botão pela JVM rodando seja no Linux. as mais utilizadas consistem no Eclipse. não nos apegaremos a nenhuma IDE. 2005). conseqüentemente. um componente é instanciado da mesma forma como uma variável. Com isso. multi-funções e dinâmica. é mais importante definir qual a real função de cada componente e sua utilização na aplicação. distribuída. porém o que isto significa para a construção de minhas aplicações? Isto significa que. como visto anteriormente: a primeira consiste na criação e instanciação dos componentes da biblioteca AWT no projeto (FLANAGAN. Certo.2 Construindo uma Aplicação Gráfica O processo inicial de uma aplicação gráfica sempre é realizado com a seleção e projeto de uma interface para o sistema. Netbeans. porém como nosso intuito nesta aula consiste em fixar todos os conceitos ligados à programação visual. podemos dividir a implementação de um sistema visual utilizando a linguagem Java em três etapas. O mercado fornece diversas IDEs para a construção de interfaces gráficas Java. os princípios básicos de funcionamento e operação sempre serão os mesmos (DEITEL. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 11 . Sun One e JBuilder. distribuindo-os da forma desejada no ambiente visual e. segura. robusta. de arquitetura neutra. portátil. independentemente do sistema operacional escolhido.

f. Então transcreva o código a seguir e execute-o. consiste no que irá ser realizado quando um determinado evento ocorrer sobre um dos componentes gráficos de uma aplicação. assim que ocorrer uma interação do usuário com a aplicação. 2005). f. } } 12 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . Após essa interação. seja por meio do teclado ou mesmo pela utilização do mouse. Existem componentes que incorporam outros componentes. f. f. sendo responsáveis por escutar uma interação e reagir a tais interações. informando o tipo e a forma de interação que ocorreram sobre o componente.awt. 100). para que eles estejam visíveis no momento da execução do sistema. utilizando as bibliotecas gráficas AWT. addActionListener(Evento). public class PrimeiroExemplo extends Frame{ public static void main (String args[]) { Frame f = new Frame (). vamos pôr a mão na massa e criar nosso primeiro exemplo. 50). para que estes estejam visíveis sendo denominados como containers. Button botao = new Button (“SAIR”). é enviada uma mensagem da plataforma em que a aplicação esta sendo executada. // Classe PrimeiroExemplo.java import java. A terceira e última etapa de um desenvolvimento voltado para criação de aplicações gráficas.setSize(50.*.show(). Estes métodos especiais são implementados nas aplicações e são associados aos componentes. que são métodos que ficam em estado de alerta escutando o que é enviado pelo sistema operacional. Aí entram em ação os listeners. Estes são criados e associados à interface. //botao.setLocation(50. sendo que podem ser especificados o seu posicionamento com a utilização de gerenciadores de layout que serão estudados nesta aula. conforme desejado (DEITEL.aUla 1 • PROgRaMaçãO Outra etapa a ser desempenhada na criação de uma aplicação visual consiste na adição dos componentes à interface. Depois da apresentação desta visão inicial sobre as aplicações gráficas.add(botao).

que consiste em uma área na qual outros componentes podem ser Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 13 .awt. iremos trabalhar com a biblioteca AWT.aUla 1 • PROgRaMaçãO Como podemos perceber. são utilizados diversos conceitos apresentados no módulo anterior. é interessante que sejam conhecidos quais são os componentes básicos da AWT. Por exemplo: com a utilização da biblioteca Swing. mas podem ser utilizadas como um modelo para a criação de novos componentes. uma vez que a idéia geral do processo é muito semelhante. A classe Component também é base para construção da classe abstrata Container. obviamente adicioná-los estes a interfaces. todos os conceitos e componentes conhecidos serão úteis para construções de aplicações. bem como instanciar. para criarmos um botão convencional. Conforme apresentado no exemplo anterior. para que o mesmo processo seja realizado. sendo que este é fornecido pela linguagem Java. a AWT utiliza apenas a classe Button. Então. Porém. por meio do pacote java. Assim como no conceito de interfaces apresentado no módulo anterior. que difere do que já foi apresentado na aula anterior. Mas não se preocupe. Com isso. conforme mencionado anteriormente neste módulo. 2007). a classe abstrata Component é a base para construção de qualquer componente visual. permitindo um tratamento generalizado dos componentes que são oriundos do conceito de polimorfismo. 1. torna-se possível criar aplicações gráficas que utilizem os componentes GUI da biblioteca AWT. não se esqueça. como o processo de instanciação e referência dos objetos ou mesmo a idéia de herança.awt. para que possamos criar efetivamente uma aplicação. além de propor funcionalidades por meio dos eventos e interações desempenhadas pelos usuários sobre os componentes (SUN. sendo uma biblioteca nativa do Java. 2005). Todos os componentes gráficos que serão aqui apresentados são baseados no pacote java.3 Componentes básicos Como já mencionado nesta aula. as classes abstratas não podem ser instanciadas diretamente. Esse pacote oferece classes com toda infra-estrutura necessária para criação de objetos que possuam uma representação gráfica que podem ser exibidos em uma interface que pode reagir a interações de um usuário (DEITEL. deveríamos instanciar um objeto da classe JButton. sendo estas novas classes derivadas desta.

a construção de pequenos exemplos. 1. Sugerimos uma verificação prévia deste. sendo que esta consiste em sua finalidade principal. Vamos criar nosso exemplo utilizando tais conceitos. além da janela a ser utilizada. além da classe Panel que é um painel (DEITEL. 2005). vamos apresentar os principais componentes da AWT. o componente Frame. o componente Frame consiste na base para a criação de aplicações gráficas.1 Componente frame O componente Frame consiste em uma classe responsável pela construção de janelas para aplicações gráficas que disponibiliza uma barra de título e bordas. 2005). sendo que são feitas especificações da classe Frame. Nosso primeiro componente a ser explorado consiste no Frame. também implementa a interface MenuContainer. sendo por definição o alinhamento default BorderLayout para os componentes que são adicionados (FILHO. Alguns exemplos de containers de componentes são as classes Frame e Window. que consistem em janelas. através da utilização de seu método construtor (DEITEL. possibilitando que possam ser associados a estes componentes de menu associados à janela . transcreva o exemplo a seguir e execute-o. assim.aUla 1 • PROgRaMaçãO adicionados e posicionados a interface. uma vez que todos são herdados pelos demais componentes. conforme mencionado. então. Pensando sobre o assunto Assim como qualquer outra classe. para isso. esta pode conter em seu escopo outros componentes. Outro detalhe que deve ser levado em consideração é o alinhamento dos componentes dentro do Frame instanciado. Então vamos ao que interessa. qualquer classe que herda da classe Container pode agregar a seu escopo outros componentes. Ademais. criando. Geralmente. No caso. Todos estes componentes serão explorados mais profundamente no decorrer desta aula. Como esta é uma subclasse da classe Container. conhecendo suas principais aplicações e utilizando. 14 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . um container para os componentes desta janela. fornecendo formas de acesso às funcionalidades desta.3. 2005). são fornecidos diversos métodos pela classe Component.

setLocation(100. Por exemplo. Iremos.java import java. para tanto. apesar de conseguirmos apresentar nossa janela. além de diversas características.setVisible(true). é acionado nada ocorre. um repositório para componentes. setSize(50. conforme foi apresentado no módulo anterior (DEITEL. a janela ainda não responde a nenhum evento. Porém. com capacidade de conter diversos componentes. porém poderia ser utilizado o método show(). sendo que utilizaremos apenas um. 100). necessitamos então encerrar a execução da Java Virtual Machine.aUla 1 • PROgRaMaçãO // FrameExemplo. que consiste na invocação do método setVisible(true) para a apresentação da janela. O ponto negativo da utilização da interface WindowListener é que esta exige a implementação de 7 (sete) métodos. sendo que esta se torna. } // metodo executável public static void main (String args[]) { FrameExemplo janela = new FrameExemplo(). pode ser facilmente utilizada devido à possibilidade da utilização de diversas interfaces. para a mesma classe. Então vamos tornar nosso segundo exemplo mais interessante: é necessário que sejam construídos métodos que processem os eventos que irão reagir à interação com a janela. dentro do método executável da classe. janela. por exemplo. são construídas geralmente classes que estendem da classe Frame. como não possuímos um método que escute tais mensagens da plataforma. } } Note que no nosso segundo exemplo. A utilização da interface exige de maneira semelhante a um contrato que os métodos definidos nestes sejam implementados. conforme mencionado anteriormente.*. 2005). para conseguirmos finalizar nossa janela. mas este está sendo depreciado pela nova versão da JVM. Na classe FrameExemplo explicitamos outro detalhe interessante e muito importante. Isso se dá devido ao fato de não existirem métodos que tratem os eventos. utilizar a interface WindowListener para se incumbir de tal tarefa. no caso que recebam a mensagem do sistema operacional e seja capaz de tratá-la. conforme desejado. quando o botão “fechar”. 100). pelas classes que se propõem a implementá-la. além de uma janela. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 15 .awt. public class FrameExemplo extends Frame{ // metodo construtor public FrameExemplo(){ super(“Janela Exemplo”).

Todos os componentes da AWT possuem métodos especiais que tratam essas interações entre os usuários e o componente. enriquecendo nossos programas.setVisible(true). É interessante observar os métodos que devem ser ao menos declarados. public class FrameExemplo extends Frame implements WindowListener{ // metodo construtor public FrameExemplo (){ super(“Titulo: Janela Exemplo”). setSize(50. bem como a importação do pacote java. após a definição de que esta passará a implementar a interface WindowListener.java import java. Certo. fazendo com que a interação do usuário junto a nossa janela possa gerar uma reação desta. setLocation(100. conseguimos fazer com que a nossa janela passe a escutar as mensagens vindas do sistema operacional. devido à utilização da interface. import java.*. Assim. 100).awt. } public void windowClosed(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} } Assim.event. faça as alterações na classe conforme é apresentado no quadro abaixo e execute seu programa. 16 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . pessoal? Então vamos agora a nosso segundo componente que pode ser agregado à nossa janela.event.aUla 1 • PROgRaMaçãO Vamos verificar como ficará nossa classe FrameExemplo.*. 100). } // metodo executavel static public void main(String args[]){ FrameExemplo janela = new FrameExemplo(). // FrameExemplo. sendo que este será detalhado na 3ª aula. } // metodos listeners public void windowClosing(WindowEvent e){ System.exit(0). addWindowListener(this). janela.awt.

RIGHT. import java. definimos o texto a ser apresentado na janela. sendo que esta não permite alteração.LEFT. 2006). no qual alteramos nosso o exemplo anterior (MANZANO. iremos apresentar o componente Label.awt. // FrameExemplo..*. conforme mencionado. com a utilização de seu construtor. Label texto = new Label(“Novo Texto!”). assim.add(texto). apresentado. } . } Note que no exemplo apenas criamos uma instância da classe Label. Assim. Label.aUla 1 • PROgRaMaçãO 1. 100). Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 17 .2 Componente label Nesta subseção.setVisible(true). rótulos de texto. 100).3. addWindowListener(this). Então vamos a outro exemplo para uma pequena demonstração deste componente. } // metodo executavel static public void main(String args[]){ FrameExemplo janela = new FrameExemplo().java import java. exibindo apenas uma linha. Outra característica que é muito utilizada na instanciação de objetos do tipo Label consiste na utilização das constantes para a definição de seu alinhamento. pode ser agregado ao componente Frame. os mais utilizados são os métodos construtores.*.. porém. Diversos métodos podem ser acessados para uma instância da classe Label. sendo que este tem importância significativa para o desenvolvimento de aplicações gráficas. denominada texto e. nos quais já podem ser definidos textos que serão apresentados dentro das interfaces gráficas criadas com a classe Frame. no caso os botões. setLocation(100. setSize(50. ou simplesmente legendas. para que o label fosse acrescentado à janela. janela. vamos a mais um componente.event. para sua apresentação. Note que foi utilizado o método add() do objeto janela. Este.awt. pode ser utilizado em qualquer componente que seja do tipo container. com certeza. qualquer objeto que deva ser apresentado deve estar adicionado à janela por meio desse método. public class FrameExemplo extends Frame implements WindowListener{ // metodo construtor public FrameExemplo (){ super(“Titulo: Segundo Exemplo”). São disponibilizadas três constantes: Label. que. Desta forma.CENTER e Label. por sua vez. janela.

conforme é apresentado em nosso exemplo a seguir. uma vez que apresentam efeitos e modificações no estado deste. 2005).event. no qual exige que seja definido apenas um método. Label texto = new Label(“Para sair aperte o botão!”). } //metodo listener public void actionPerformed(ActionEvent e) { System.addActionListener(this). ActionListener{ // metodo construtor public FrameExemplo (){ super(“Titulo: Botão Exemplo”). Button botao = new Button(“Sair”). Os botões agregam valor visual. Porém. } . bem como crie o novo método conforme é apresentado. altere as linhas no método construtor. Para que essa interação seja percebida pelo sistema. para que as mensagens das interações entre o usuário e o sistema sejam interpretadas e sejam atendidas. responsável pela criação de componentes do tipo botão. realizado pelos famosos listeners.java import java. determinar seqüências de comandos para reagirem a tais interações.awt.. ou seja. Assim. que denotam uma resposta do sistema às ações desempenhadas pelos usuários (DEITEL. import java.3. } 18 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . os botões necessitam de implementações.*. assim. o actionPerformed().*. add(botao). a classe Button. setSize(150. botao. // FrameExemplo. public class FrameExemplo extends Frame implements WindowListener.exit(0). 100). add(texto). assim como apresentado na construção das janelas através da utilização da classe Frame.. dependem de tratadores ou escutadores de eventos. 100). setLocation(100.aUla 1 • PROgRaMaçãO 1. addWindowListener(this). setLayout(new FlowLayout()). Os botões são interessantes para as aplicações gráficas por possibilitar a interação entre o sistema e os usuários e.3 Componente button Agora vamos a um componente importantíssimo para a criação de aplicações gráficas.awt. a classe Button deve implementar a interface ActionListener. onde alteramos novamente nosso exemplo em que criamos a janela e definimos uma legenda de texto.

conseqüentemente. Além disso. no botão ocorre o mesmo. é possível identificar sobre qual componente a ação foi disparada. Todo o conteúdo digitado dentro das caixas de texto é tratado como Strings dentro da aplicação.4 Componente textfield Vamos ao nosso último componente desta aula. sendo que devem ser tratados após sua inserção conforme necessário. Assim como o Button. 1.aUla 1 • PROgRaMaçãO Neste exemplo. Assim como a Classe Button. existe o método getSource() que nos fornece tal informação. facilitando a modularidade do sistema. uma boa prática de programação que. o método de mesmo nome para tratar entradas de dados. deve ser utilizado o método listener addTextListener(TextListener) (DEITEL. que será o responsável por receber e tratar as mensagens. que recebe um evento de ação que é produzido pelos botões. Outro detalhe a ser percebido é a transferência do código para o construtor da classe.3. podemos notar que. porém o método que realiza tal tarefa consiste no actionPerformed(). Podem ser criados diversos botões em uma aplicação e. ao digitar algum texto. obtemos uma caixa de texto. conforme o quadro abaixo e execute-o. foi acrescentado o método setLayout() no qual foi atribuído o valor de uma nova instância da classe FlowLayout para centralizar os componentes na janela. trazendo maior clareza do que a interface deve conter no momento de sua instanciação. assim como na janela. quando o método actionPerformed() se tornar grande e complexo é a realização de uma explosão do código em outros métodos que tratem isto de maneira mais clara. este só é acionado através da tecla “enter”. Porém. este é exaustivamente utilizado em programas que fazem uso de interfaces visuais: é o componente TextField. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 19 . 2005). Para ações que devam ser executadas. Retornaremos a este assunto na nossa 3ª aula. Através da classe TextField. agindo sobre estas. para tanto. a TextField também utiliza a interface ActionPerformed e. que possibilita a entrada de texto pelos usuários. Altere o método construtor de nossa classe FrameExemplo. Pensando sobre o assunto Uma vez que existem os listeners para escutar e receber as mensagens do sistema de que ocorreu alguma interação sobre os componentes. na qual definimos qual é o seu listener.

} Tanto o componente Label quanto o TextField podem ter seu conteúdo alterado. } . import java. addWindowListener(this). Nos vemos na próxima aula. bem como alguns componentes e tratadores de eventos para uma maior interação entre usuários e sistema. add(botao). foram apresentados os componentes Button e TextField para a criação de botões e a caixa de texto respectivamente.. add(texto). Aprendemos como criar janelas utilizando a classe Frame.*. Saiba mais É mais que interessante. Label texto = new Label(“Para sair aperte o botão!”). botao. bem como recuperado pelos métodos setText() e getText(). 30). sugerimos a leitura do javadoc deste importante componente da programação visual Java. 120).java import java. add(caixaDeTexto).event. no caso as legendas através da classe Label.addActionListener(this). setSize(250. Button botao = new Button(“Sair”). é de vital importância para que suas aplicações sejam bem sucedidas e que se tenha domínio sobre os métodos disponibilizados pela classe TextField. finalizamos nossa 1ª aula. Síntese da aula Nesta aula. setLocation(300. apresentamos os conceitos básicos relacionados à programação visual com a utilização da tecnologia Java.*. setLayout(new FlowLayout()). 300). Ademais.. ActionListener{ // metodo construtor public FrameExemplo (){ super(“Titulo: Botão Exemplo”). Dessa maneira.awt. 20 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .awt. Para tanto. Façam as atividades para uma melhor fixação dos conceitos e componentes apresentados até aqui. TextField caixaDeTexto = new TextField(“”. respectivamente. public class FrameExemplo extends Frame implements WindowListener.aUla 1 • PROgRaMaçãO // FrameExemplo. além de criar textos estáticos que não podem ser alterados diretamente pelos usuários.

Já na questão 2. COSTA JR. 2006. qual a principal vantagem conseguida com a construção de aplicações Java. o mesmo botão será apresentado da mesma maneira em todas as plataformas. A classe Frame possibilita que criemos janelas para aplicações visuais. windowDeactivated(). Java: como programar. São Paulo: Érica. Marco Aurélio. Desenvolva aplicativos com Java 2. Estas podem ter eventos vinculados a sua estrutura.. qual é a interface responsável por fornecer os métodos de uma janela? 2. Java 2: programação de computadores. FILHO. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 21 . 2002. windowActivated(). independente do sistema operacional. THOMPSON. 2005. levando em consideração o conceito de portabilidade? Comentário das atividades Na atividade 1. Roberto Affonso da. Renato Rodrigues. São Paulo: Érica. que fornece os métodos: windowClosing(). José Augusto Navarro Garcia. a interface responsável por definir os métodos de uma janela é a WindowListener. Assim. MANZANO. 2005. windowClosed(). fazendo com que. São Paulo: Érica. 6 ed. a principal vantagem apresentada pelas aplicações visuais em Java consiste em sua independência de plataforma graças aos conceito de portabilidade. Assim. que enriquecerão a interação com o usuário. São Paulo: Pearson Prentice Hall. windowOpened(). windowIconified(). na próxima aula Veremos outros componentes para a construção de aplicações visuais utilizando a biblioteca AWT. Devido ao conceito de portabilidade da linguagem Java e a JVM as aplicações visuais com a biblioteca AWT e Swing tem ganho espaço considerável no mercado. Java 2 & banco de dados. windowDeiconified(). Harvey M.aUla 1 • PROgRaMaçãO Atividades 1. referências DEITEL.

aUla 1 • PROgRaMaçãO Anotações 22 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .

conseguimos incorporar valor aos sistemas. introdução Com a utilização das interfaces gráficas. além de fornecer subsídio para a solução de problemas pelo computador como uma atividade mais humanizada. mais possibilidades existirão para criarmos aplicações que contribuam com a interação entre usuários e programas. ao final desta aula. você seja capaz de: • conhecer os componentes visuais básicos da biblioteca AWT relacionados a programação visual. Esse conhecimento é necessário.Aula 2 Componentes visuais Objetivo Esperamos que. para a crição de programas com outros componentes visuais que interagem com os apresentados em nossa 1a aula. A programação visual Java é uma metodologia com um enfoque muito diferente aos usuais sustentados e encontrados no mercado. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 23 . pois agora iremos nos aprofundar na utilização da tecnologia Java. Estes recursos fornecidos por essa metodologia dão suporte à construção de aplicações que aumentam o poder dos sistemas. Assim. Pré-requisitos É de fundamental importância que os conceitos apresentados na aula 1 tenham sido assimilados por você. A biblioteca AWT. disponibilizam diversos componentes. assim como a Swing. uma vez que estes não disponibilizam controle total sobre os eventos. quanto mais componentes forem disponibilizados.

1 Componentes visuais Então vamos ao que interessa. 2005). Para tanto. a construção de aplicações com a utilização de aplicações visuais em Java é relativamente nova na concepção e implementação de sistemas de software. uma vez que ambas são derivadas da classe Container. É através da utilização de componentes visuais que conseguimos observar toda uma nova era dos computadores que buscam uma maior proximidade com o usuário. é hora de colocarmos a mão na massa. iremos.1 Componente Panel Então. Vamos criar uma nova janela para observar a combinação de todos os componentes vistos até o momento. Pessoal.aUla 2 • PROgRaMaçãO Assim como a própria linguagem de programação Java. como os demais componentes apresentados até aqui. é um tipo de classe (DEITEL. nesta aula. pessoal! Agora. Com a utilização do componente Panel. Sua utilização. assim como a classe Frame. 24 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . inclusive outros painéis. que consiste em um painel que. Esta consiste em um tipo de container. Os maiores objetivos desta nova metodologia consistem em aumentar a produtividade do programador. ou seja. 2005). 2. iremos. 2. Assim. pessoal. que colaboram com a construção de interfaces e aplicações mais ricas e que apresentam características para uma melhor interação entre usuário e sistemas. agora.1. além de acelerar todo o processo de desenvolvimento com componentes prontos. conhecer o componente Panel. empolgados com a programação visual? É claro que sim. pode agregar a seu escopo outros componentes. conheceremos outros componentes visuais. juntamente com os gerenciadores de layouts. é possível se obter uma maior versatilidade para a disposição de outros componentes gráficos nas interfaces criadas na aplicação (DEITEL. amplia as possibilidades de uso desta classe. continuar o trabalhalho com os componentes básicos mais importantes.

um maior detalhamento será realizado quanto à utilização do gerenciamento de layout.add(painelEsquerda.add(painelCentro.CYAN). Assim. Panel painelEsquerda = new Panel().BLUE).LEFT)). janela.*. 100). painelBaixo.awt.RED).WEST). uma vez não definido o layout para os componentes instanciados do tipo Panel. na 3ª aula. por meio do método add().java import java.setBackground(Color. Porém. public class NovaJanela{ public static void main(String[] args) { Panel painelTopo = new Panel().add(painelDireita. BorderLayout. BorderLayout. bem como dos componentes que podem estar contidos dentro destes. 300). BorderLayout. estes automaticamente assumirão um layout default.setSize(100.NORTH). Frame janela = new Frame(“Painel”). notando a distinção dos painéis por meio das diferentes cores. Pensando sobre o assunto Assim como já mencionado para a classe Frame.GREEN). janela. painelDireita. Panel painelBaixo = new Panel(new FlowLayout(FlowLayout. janela. Panel painelDireita = new Panel(). janela.setLocation(300. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 25 .setBackground(Color.SOUTH). } } Executando o exemplo anterior. painelCentro. Panel painelCentro = new Panel(new FlowLayout(FlowLayout. sendo utilizados como container para os nossos componentes. Deve ser observado que os painéis são agregados ao container de componentes. janela. no caso a janela.add(painelBaixo. vamos ao próximo componente da biblioteca AWT. janela.add(painelTopo. painelEsquerda.setBackground(Color. BorderLayout. Nossos exemplos de agora em diante sempre farão uso dos painéis. janela. BorderLayout. definido pela própria maquina virtual. janela.CENTER).setBackground(Color. ficam claras as possibilidades de disposição dos painéis em uma janela. painelTopo.EAST).aUla 2 • PROgRaMaçãO //NovaJanela.setBackground(Color.setVisible(true).CENTER)).ORANGE).

NORTH).setBackground(SystemColor. BorderLayout. botao. import java. p. colunas ou mesmo a barra de rolagem (FLANAGAN. } } 26 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .1.setLayout(new FlowLayout()). texto. vejamos o exemplo abaixo com a utilização deste componente visual. 2006).addWindowListener(new WindowAction()).aUla 2 • PROgRaMaçãO 2. como linhas.awt.getText()). foi apresentado o componente TextField que apresenta uma caixa de texto de linha única. botao = new Button(“Inserir”).2 Componente textArea Na aula anterior.*. p. Agora.add(botao).add(texto).addActionListener(this). p. setSize(300. f. O componente TextArea assim como o TextField possuí os mesmos métodos. add(multTexto. permite a criação de uma área que aceite a entrada e edição de textos de múltiplas linhas. public static void main(String args[]) { NovaJanela f = new NovaJanela().getSource()==botao) { multTexto. p.addActionListener(this). } public NovaJanela() { super(“TextArea”). add(p. private TextField texto. } texto.setVisible(true).java import java. Assim. public class NovaJanela extends Frame implements ActionListener { private TextArea multTexto. iremos conhecer outro de caixa de texto.control).event. // NovaJanela. 300). porém esta ainda disponibiliza alguns métodos para o manuseio de suas particularidades. BorderLayout. porém este componente que muito contribui para as diversas aplicações que podem ser desenvolvidas. private Button botao. } public void actionPerformed(ActionEvent e) { if (e. uma vez que são derivados da mesma classe pai a TextComponent.append(texto.CENTER).*.setText(“”).awt. Panel p = new Panel(). texto = new TextField(20). multTexto = new TextArea(). f.

Para criarmos nosso próximo exemplo de utilização do componente List. } public void actionPerformed(ActionEvent e) { if (e.*. Este possui diversas características e comportamentos.. private TextField texto. finalizamos esta seção e vamos conhecer agora outro objeto para programação visual. substitua apenas as linhas referentes a instanciação do objeto TextArea do exemplo da seção anterior pelo código apresentado a seguir. 2005). lista = new List(). Outro detalhe consiste na utilização dos métodos append() e insert() para a inserção de texto no componente.3 Componente list Nesta seção. sendo que tais operações podem ser ativadas e desativadas.1. 2.awt. ou seja. public class NovaJanela extends Frame implements ActionListener { private List lista. . add(lista. sendo que os itens desta lista não podem ser editados diretamente pelos usuários. podem ser acrescentadas ações ao evento de seleção sobre os itens da lista através da utilização das interfaces ItemListener e ActionListener. } } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 27 . BorderLayout. como apresentado anteriormente para o componente Panel.getText()). um TextField. criamos um janela com três componentes.aUla 2 • PROgRaMaçãO Neste exemplo. } texto.awt. agora. Porém.. para realização de operações sobre o componente TextArea..CENTER). Um detalhe que deve ser observado neste exemplo consiste na alteração de nosso método actionPerfomed().add(texto. private Button botao.setText(“”). public NovaJanela() { .java import java. A classe TextArea disponibiliza operações sobre textos como copiar e colar. começamos a dispor nossos elementos utilizando os gerenciadores de layout.*.getSource()==botao) { lista. import java. um Button e um TextArea. .event. além de ser sensível à seleção. Assim.. // NovaJanela.. será apresentado o componente List que permite a exibição de uma lista de itens. que são acionados quando um objeto é selecionado e quando ocorre um duplo clique sobre algum item respectivamente (DEITEL..

Este consiste no famoso combobox das demais linguagens de programação gráficas. utilizando os conhecimentos adquiridos até aqui. Para qualquer ação que queira ser desempenhada sobre os eventos deste componente. conforme demonstrado no exemplo anterior. mas. este por sua vez implementa uma lista de itens onde somente um item pode ser exibido. Desta forma. construa uma janela por meio da utilização da classe Frame.aUla 2 • PROgRaMaçãO Como resultado. A seleção dos itens que compõem um objeto Choice é disponibilizada para que apenas um destes seja selecionado. 28 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . consiste em uma boa prática de programação. sugerimos a leitura do javadoc para enriquecer suas interfaces. assim como no objeto List apresentado na seção anterior. para adicionarmos texto a um objeto List é utilizado o método add(). Para tanto. Acrescente o código abaixo nos locais indicados nos comentários e execute o programa para visualização do componente Choice. temos uma lista de itens. Assim como realizado na classe Frame e na Panel. sugerimos a leitura de material relacionado a este assunto. e crie um painel para receber seus componentes (DEITEL. a disponibilização dos javadoc para todas as classes desenvolvidas. 2. Assim como nos demais componentes. Então. não havendo seleção múltipla. devem ser implementados os métodos referentes à interface ItemListener. ao invés de um texto contínuo que pode ser digitado ou mesmo alterado. pode ser verificado que. Saiba mais Javadoc consiste na documentação disponibilizada juntamente com cada classe. teremos uma janela muito semelhante à apresentada no exemplo da seção anterior. 2005). consiste na Choice. detalhando o funcionamento e as funcionalidades de atributos e métodos. A própria máquina virtual disponibiliza um recurso para a geração automática do javadoc.1.4 Componente Choice Outro componente muito utilizado em aplicações gráficas com a utilização do pacote AWT. observando seu funcionamento.

. combobox. além de uma caixa de seleção. quando o componente está marcado.add(“C++ Builder”).getSelectedItem()).add(“Delphi”).aUla 2 • PROgRaMaçãO //Crie sua janela e seu painel conforme demonstrado nos exemplos anteriores import java.5 Componentes Checkbox Vamos ao próximo componente da biblioteca AWT: uma instância da classe Checkbox cria graficamente.setText(“Selecionado:”+combobox.awt. sendo verdadeira. Um detalhe interessante deste componente consiste no fato de mesclar.. da mesma forma como as classes List e Choice. combobox. Todos os objetos criados por meio da utilização da classe Checkbox. . conforme pode ser observado no exemplo anterior. combobox. } Assim como nos demais casos apresentados até o momento. caixas de opção..*. 2.awt. ou falsa quando estiver desmarcado.1. . //Crie o método que reage ao evento public void itemStateChanged(ItemEvent e) { if (e. consiste no itemStateChanged(). Sugerimos que sejam realizadas alterações..*. combobox.event. Este componente é geralmente utilizado para representar que uma opção deve ser escolhida. import java. nos programas visuais. O método que trata os eventos que ocorrem sobre um objeto Choice. fazem uso da interface ItemListener para tratar eventos..getSource()==combobox) { texto. é utilizado o método add(). //Transcreva o código abaixo no metodo construtor combobox = new Choice(). para que sejam acrescentados itens ao componente Choice.addItemListener(this). um componente Label para descrição textual deste. conforme é apresentado a seguir. } . bem como a criação de novas interfaces para a fixação dos conhecimentos vinculados a este componente.add(“Java”). Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 29 .. public class Janela extends Frame implements ItemListener { private Choice combobox.

getState()) { texto.setText(“Selecionado:”+checkCorreio. } if (checkEmail. checkEmail = new Checkbox(“Email”).addItemListener(this).*.setText(“Selecionado:”+checkEmail.setVisible(true). } } Diversos Checkboxs podem ser criados. setSize(800. public class JanelaCheck extends Frame implements ItemListener { private Checkbox checkEmail. } } public static void main(String args[]) { JanelaCheck janela = new JanelaCheck().getLabel()).add(checkEmail). } public void itemStateChanged(ItemEvent e) { if (checkCorreio. janela.getLabel()). Panel p = new Panel().add(checkCorreio).getState()) { texto. quando isto é necessário. public JanelaCheck() { super(“Checkbox”). 30 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . texto = new Label(“Indique os meios de envio:”). } if (checkEmail.setText(“Selecionado:”+checkEmail. para tanto. utilizamos uma instância da classe CheckboxGroup para que seja realizado um agrupamento de componentes Checkbox. p.awt. checkCorreio.addItemListener(this).add(texto). checkCorreio = new Checkbox(“Correios”). 200). private Label texto.getLabel()).getLabel()+” e “ +checkCorreio. janela. p. BorderLayout. add(p. checkEmail. sem que exista referência entre estes componentes.getState()&& checkCorreio. p.NORTH).setLayout(new FlowLayout()).addWindowListener(new WindowAction()). p.aUla 2 • PROgRaMaçãO //Classe JanelaCheck import java. private Checkbox checkCorreio.getState()) { texto.

porém garante que apenas uma seja a escolhida. disponibilizam que apenas um item seja selecionado.grupo. 2005). checkCorreio = new Checkbox(“Correios”. devido à sua estrutura e recurso. senão o mais importante de todos.*.awt. e com isto fazendo com que uma única opção seja escolhida. Alterando o exemplo anterior. Agora iremos finalizar nossa 2ª aula com a apresentação de um importantíssimo componente. No caso. public JanelaCheck() { . este tipo de componente visual é mais conhecido como radiobuttons em outras linguagens de programação. para que este só permita apenas uma opção. Certo. apenas crie uma instância do componente Checkboxgroup e nos construtores de cada objeto Checkbox criado.. tornando-se um único componente visual no qual seja capaz de selecionar apenas um item dentro deste componente. garantindo uma escolha única (DEITEL. o componente Checkboxgroup realiza o agrupamento de diversos objetos da classe Checkbox. } O último parâmetro passado nos construtores dos objetos Checkbox consiste na definição de qual será apresentado como verdadeiro. deve ser implementada a interface para tais. conforme é apresentado abaixo.1. apenas faz vinculação entre os itens criados com o Checkbox.. private Label texto. associe ao grupo. grupo = new CheckboxGroup()..6 Componente Checkboxgroup Conforme mencionado.true). private CheckboxGroup grupo. } . pessoal? Conforme pode ser observado no exemplo anterior. . além do fato deste ser composto por um ou mais Checkbox para que os eventos sejam tratados neste. private Checkbox checkCorreio. Igualmente aos outros componentes da biblioteca AWT que trabalham com itens..grupo. sendo que associados estes. isso torna esse componente uma forma de disponibilizar diversas opções. vale ressaltar que o componente Checkboxgroup não apresenta nenhuma interface.. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 31 . public class JanelaCheck extends Frame implements ItemListener { private Checkbox checkEmail. Porém. //Classe JanelaCheck import java.false).aUla 2 • PROgRaMaçãO 2. checkEmail = new Checkbox(“Email”..

awt.aUla 2 • PROgRaMaçãO 2. new MenuShortcut(KeyEvent.*. O componente Menu conforme mencionado. agora. Menu menuSobre = new Menu(“Sobre”). diversos componentes que são necessários para a criação de menus nas aplicações gráficas.add(itemAjuda). sendo que um deve conter o outro. //Adicionando eventos aos componentes itemSair. MenuItem itemNovo = new MenuItem(“Novo”). deve ser atribuído à barra de menu. 400). além de uma melhor disposição das funcionalidades. fazendo com que as aplicações fiquem mais profissionais.addActionListener(this). MenuItem itemAjuda = new MenuItem(“Ajuda”). Vamos a um exemplo no qual criamos um menu. barra. aumentando o poder de interação em nossos sistemas. MenuBar barra = new MenuBar().add(menuArquivo). itemNovo. WindowListener{ //metodo construtor public JanelaMenu(){ super(“Menus”). Inicialmente.7 Componentes para criação de menus Vamos conhecer. menuSobre. //Agregando os itens ao menu e a barra menuArquivo. E. 2005).awt. //JanelaMenu. import java. menus suspensos. e esta barra deve sempre ser associada ao objeto Frame. no caso a janela. setSize(400.1. para que seja acrescentado o menu.event. Para a criação de menus suspensos utilizando esta biblioteca é necessária a utilização de três classes: MenuBar. Este três componentes são hierarquicamente organizados. A AWT disponibiliza suporte para a criação das famosas barras de menu ou. MenuItem itemSair. o componente MenuBar cria uma barra de menu. Desta forma. finalizando nossa organização.add(itemNovo).java import java. então transcreva o código abaixo e o execute.addActionListener(this). public class JanelaMenu extends Frame implements ActionListener. Menu e MenuItem (FILHO. barra. } 32 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . as instâncias da classe MenuItem devem ser agregados ao menu. Menu menuArquivo = new Menu(“Arquivo”). conseguiremos construir menus.*. setMenuBar(barra).VK_R)). itemSair = new MenuItem(“Sair”. menuArquivo.add(menuSobre). addWindowListener(this).add(itemSair). como também são conhecidos.

add(itemNovo). e uma barra de menu contém diversos menus. sendo que esta deriva da classe Frame. com isto explicitando que estamos criando uma nova janela.exit(0).add(menuArquivo).getLabel(). Tudo acontece da mesma maneira como nos exemplos das outras seções. Menu e MenuItem. entender o que foi realizado no exemplo anterior. . } if(item. temos o método construtor que é o responsável por inicializar todos os componentes que farão parte de nossa interface visual. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 33 . } } } } Certo.add(menuSobre). ou seja.. barra.setVisible(true). pessoal? Vamos.getSource() instanceof MenuItem) { MenuItem item = (MenuItem) e. quanto ao conteúdo do método construtor.add(itemAjuda). Inicialmente. da mesma maneira como nos outros exemplos. nenhum segredo. janela.getSource(). setMenuBar(barra). menuSobre..equals(“Sair”)){ System. public void actionPerformed(ActionEvent e) { if (e. if(item. Note o agrupamento hierárquico que é realizado. barra. } .. //Agregando os itens ao menu e a barra menuArquivo.equals(“Novo”)){ Frame novaJanela = new Frame().. no qual um menu contém vários itens.aUla 2 • PROgRaMaçãO //metodo executável public static void main(String[] args) { JanelaMenu janela = new JanelaMenu().. pessoal.add(itemSair). Até aqui. ou mesmo aula. agora. consiste na instanciação dos objetos que compõem um menu. O único detalhe a ser mencionado. conforme é destacado no quadro abaixo.setVisible(true).exit(0). sendo que esta barra é associada a nossa janela.getLabel(). menuArquivo. } //métodos listeners public void windowClosing(WindowEvent e){ System. . criamos nossa classe. Continuando. novaJanela. componentes do tipo MenuBar..

Com isto. é uma janela. .equals(“Novo”)){ Frame novaJanela = new Frame(). utilizando a biblioteca AWT. Este por derivar da classe Frame.getLabel(). note que no método actionPerformed() estamos tratando o evento de maneira diferente ao que vínhamos trabalhando. 34 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . A partir deste ponto somente verificamos qual dos itens foi invocado para reagir a interação. assim finalizamos nossa 2ª aula e também a apresentação dos componentes gráficos para a criação de programas com interfaces visuais. conforme é apresentado no quadro logo a seguir. novaJanela.. finalizando. mencionamos que a fonte de nosso evento consiste em um componente do tipo MenuItem. com a utilização do método construtor para a definição deste.. ... conforme mencionado.getLabel(). } } } . new MenuShortcut(KeyEvent. são criados os métodos exigidos pelas interfaces que nossa classe implementa a ActionListener e WindowListener.getSource() instanceof MenuItem) { MenuItem item = (MenuItem) e. no qual é instanciado um objeto de nossa classe JanelaMenu.. apresentado no início desta seção. Porém. if(item...exit(0). desta forma façam todos os exercícios.setVisible(true). } if(item. new MenuItem(“Sair”. . temos nosso método executável main. pessoal. Muito bem. Outra característica que enriquecerá as aplicações com menu consiste na utilização de teclas de atalhos para acelerar o processo de acesso às funcionalidades do sistema definidas nos itens.getSource(). Esperamos que vocês tenham tirado o máximo de proveito. Com tal tratamento por meio do comando instaceof conseguimos lidar com todos os atributos e métodos que venham a ser necessários.equals(“Sair”)){ System.aUla 2 • PROgRaMaçãO Após isto.. Um exemplo desta possibilidade está disponível em nosso exemplo completo. por meio da classe MenuShortcut(). public void actionPerformed(ActionEvent e) { if (e.VK_R)). Desta vez.

Dentre estas técnicas. para utilização desses componentes. David. Os menus auxiliam na organização e acionamento das funcionalidades do sistema. Porto Alegre. Choice. que define as regiões: Norte. TextArea. Qual o gerenciador default do compenente Panel? 2. 2005. Java: como programar. podemos destacar as teclas de atalho. ed. foi necessário que detalhes como layout e tratadores de eventos fossem incorporados a estes. Desenvolva aplicativos com Java 2. Harvey M. Java: o guia essencial. que deve ser definido no momento da instanciação dos itens do menu.aUla 2 • PROgRaMaçãO Síntese da aula Nesta aula. 2005. List e Menu. São Paulo: Pearson Prentice Hall. uma vez que. FLANAGAN. Renato Rodrigues. foram vistos conceitos e classes necessárias para um melhor entendimento de tais componentes. Já na atividade 2. o gerencidor de layout default consiste no BorderLayout. referências DEITEL. as teclas de atalho podem ser definidas a um menu com a utilização do componente MenuShortcut(). Leste. Bookman. usuários mais avançados podem fazer uso de técnicas que acelerem o processo de acesso às fucionalidades. Sul. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 35 . Para tanto. Oeste e Centro em uma janela para que sejam adicionados outros compoentes. Assim como são definidas as teclas de atalhos em um menu? Comentário das atividades Na atividade 1. FILHO. 6 ed. como mencionado em nossa aula. 5. 2006. Atividades 1. São Paulo: Érica. foram apresentados os principais componentes da programação visual Java como. Além disto. utilizando a biblioteca AWT. além de definidas quais serão as teclas utilizadas para acionar cada item.

aUla 2 • PROgRaMaçãO na próxima aula Continuaremos a relembrar e explorar mais a fundo conceitos vinculados ao gerenciamento de layout. Anotações 36 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . bem como o tratamento de eventos para os componentes.

iremos rever conceitos relacionados aos tratadores de eventos. ao final desta aula. uma interface amigável não garantirá o sucesso do sistema se este não desempenhar suas funções da maneira correta. reagindo a ações dos usuários. onde nos atentaremos a conhecer as interfaces que podem ser utilizadas para o tratamento dos principais eventos. para a definição de uma interface mais amigável através da disposição dos componentes. porém desta vez de maneira isolada. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 37 . interfaces mais amigáveis proporcionam uma melhor aceitação por parte dos usuários. que você já tenha fixado os conceitos expostos nas aulas 1 e 2. Além disso.Aula 3 gerenciadores de layout e tratadores de evento Objetivos Esperamos que. uma boa aula e tentem aproveitar ao máximo. nesta aula. pessoal. Pré-requisitos É de fundamental importância. uma vez que. com a utilização de teclas de atalho definidas junto ao sistema. localização de componentes ou mesmo agilizam os trabalhos para os usuários mais avançados. bem como as interfaces necessárias para a implementação dos tratadores de evento. Desta forma. uma melhor organização dos componentes visuais de maneira mais eficiente auxilia a reduzir dificuldades de entendimento. Então. além dos aspectos estéticos. sendo o ponto central de nosso estudo. introdução No desenvolvimento de aplicações gráficas. para um melhor desenvolvimento e entendimento desta aula. você seja capaz de: • relembrar e compreender conceitos relacionados aos gerenciadores de layout para aplicações visuais e os tratadores de eventos. É importante também conhecer os componentes da biblioteca AWT.

qualquer que seja o sistema operacional que esteja executando. sendo que estes podem assumir posições relativas em uma janela. Porém.1 gerenciador flowlayout Vamos iniciar esta seção. dispor os componentes na interface gráfica. todos os componentes são dispostos da esquerda para a direita. 2005). estes funcionam de maneira diferente nas demais linguagens de programação quanto à definição de posições na janela. determinando como os componentes presentes em um container são ordenados e posicionados.1 gerenciamento de layouts Como visto nas aulas anteriores. no qual podem ser especificadas ecoordenadas para sua definição. quando criamos uma interface em Java podemos utilizar componentes no qual devem ser incorporados a outros componentes. Os gerenciadores de layout são classes especiais que realizam a implementação de interfaces. BorderLayout. A linguagem Java fornece os gerenciadores de layout. GridLayout. o gerenciador FlowLayout consiste no mais simples dos gerenciadores. Devido ao fato de tentar se obter o máximo do conceito de portabilidade.aUla 3 • PROgRaMaçãO 3. sendo eles: FlowLayout. A seguir iniciaremos uma maior explanação dessas classes. padrão para os applets e painéis. A biblioteca AWT disponibiliza alguns gerenciadores de layout. Neste tipo de gerenciador. Segundo Deitel (2005). os objetos podem ser dispostos dentro de janelas e painéis.1. Como visto na disciplina anterior. essa aplicação seja interpretada da mesma forma. 2005). e até mesmo com exemplos práticos nas aulas desta aula. conforme visto. bem como definidos os gerenciadores para os componentes que serão agregados aos painéis. evitando surpresas quanto a disposição dos elementos na janela (DEITEL. responsáveis por. Ele obedece a ordem como os objetos são adicionados ao contai- 38 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . containers Frame e o Panel. então sugerimos uma rápida observação sobre eles para então percebemos a utilização do gerenciador FlowLayout. criou-se o conceito de gerenciadores de layout. tudo definido pelos gerenciadores de layout. CardLayout e GridBagLayout (DEITEL. podem ser definidos gerenciadores para os painéis que irão compor uma determinada janela. 3. Desta forma. relembrando os exercícios feitos nas seções e aulas anteriores. para que. de forma simples.

cria-se uma seqüência de componentes. Outro tipo de gerenciador muito utilizado na construção de aplicações gráficas consiste no GridLayout. setLayout(new FlowLayout()). conforme mencionado. // GerenciadorLayout. setSize(200. pessoal? Vamos a mais um exemplo para que sejam apresentadas a disposição dos componentes por meio da utilização do gerenciador FlowLayout.awt. Certo. for (int i=1. sendo que os componentes são apresentados em uma mesma linha até que não exista mais espaço nela. import java.aUla 3 • PROgRaMaçãO ner. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 39 .*. que. public class GerenciadorLayout extends Frame { // método construtor public GerenciadorLayout() { super(“Gerenciador Layout”). } } class EventosWindows implements WindowListener{ public void windowClosing(WindowEvent e){ System. então vamos a ele.addWindowListener(evt). } public void windowClosed(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} } Como pôde ser observado no exemplo anterior. EventosWindows evt = new EventosWindows(). i<7. 115).awt.java import java. gerente. isto obedecendo ao tamanho do container.*. gerente. i++) add(new TextField(“Texto “+i)). é realizada uma quebra de linha a cada momento em que não existe mais espaço para novos objetos na linha.event.exit(0).setVisible(true). } // método executavel public static void main(String args[]) { GerenciadorLayout gerente = new GerenciadorLayout(). criando-se uma nova linha logo abaixo para a disposição dos outros componentes.

. } 40 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . . sendo que todos os componentes adicionados aos containers ocupam todo o espaço da celula do qual fazem parte.. setLayout(new GridLayout(2. substituindo pelo código no quadro a seguir e execute o programa.*. seja ocupada (DEITEL. } } class EventosWindows implements WindowListener{ .. Utilize este método sempre que necessário para a redefinição da disposição dos objetos em sua janela. Esse gerenciador permite que os componentes sejam arrumados em uma grade formada por células de igual tamanho até que toda a área do container. import java. } // método executavel public static void main(String args[]){ . 3.1..2 gerenciador gridlayout Conforme mencionado. 2005). no caso o Frame ou o Panel. outro gerenciador de layout trata-se da classe GridLayout. // GerenciadorLayout.... vamos a um exemplo para que seja observada a disposição dos componentes visuais utilizando este tipo de gerenciador. automaticamente.awt.event.aUla 3 • PROgRaMaçãO Pensando sobre o assunto Como mencionado na aula anterior.awt. Com isto.. altere apenas a linha que é responsável pela definição do layout no método construtor do exemplo anterior. Assim como em vetores. todos os tipos de containers da linguagem de programação Java derivam da classe Container. public class GerenciadorLayout extends Frame{ // método construtor public GerenciadorLayout(){ . podem ser especificadas as quantidades de linhas e colunas.*.java import java. Para tanto.3)). sendo que alterações quanto à sua dimensão são repassadas. para as células e obviamente para os componentes que as ocupam. sendo que esta disponibiliza o método setLayout() para a definição do gerenciador de um componente do tipo container.

3 gerenciador borderlayout Assim como em uma bússola. Assim. 2005). A linguagem Java ainda dispõe do gerenciador BorderLayout. estes são muitas vezes ineficientes para resolver alguns problemas. que trata os componentes presentes no container como uma pilha de cartas (FILHO. sul e centro. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 41 . Saiba mais Conforme mencionado.aUla 3 • PROgRaMaçãO Se tudo ocorreu como o esperado. por sua vez. provavelmente você deve ter percebido a mudança na disposição dos objetos na tela de seu programa. sendo elas: east.4 Cardlayout A partir desta seção. 2005). CardLayout e GridBagLayout. south e center. consiste no fato de que a ordem como os componentes são adicionados não afetará o resultado final da tela: eles devem ser adicionados explicitamente a uma região fixa do gerenciador.1. sendo que uma vez adicionado um componente. é o gerenciador padrão para o container Frame da API (Application Program Interface) AWT. a classe CardLayoout é responsável por gerenciar um layout mais incrementado. cada região definida pelo gerenciador de layout só pode ser ocupada por apenas um componente. respectivamente. sendo que este é redimensionado ocupando-a toda. uma vez que dois ou mais elementos forem inseridos na mesma região um sobrescreverá o outro. No caso. 2005). Um detalhe interessante. o gerenciador de layout BorderLayout executa a disposição de componentes em um container dividido em cinco regiões.1. Tudo isso foi demonstrado no exemplo utilizado para a apresentação do container criado por meio da utilização da classe Panel. e que foge do que foi visto até agora para os demais gerenciadores já apresentados. sendo que o primeiro não estará disponível para visualização ou mesmo acesso (DEITEL. norte. revisem o exemplo mencionado. trabalharemos com gerenciadores de layout diferenciados frente aos demais apresentados.1. 3. Isto tudo com apenas a redefinição do gerenciador de layout. no caso direita. na aula 2 na seção 2. bem como JFrame do pacote Swing.1. Desta forma. esquerda. Embora bem mais flexíveis. conforme foi visto na aula anterior (DEITEL. Este. west. ele ocupará toda a região. 3. north.

p2. porém. uma vez que exige que mais código seja necessário.*. Panel p2 = new Panel(). p2. setSize(250.aUla 3 • PROgRaMaçãO Este gerenciador disponibiliza formas de acesso aos diversos componentes que podem ser “empilhados” no container. private Button anterior. p2. Isto.add(anterior).addActionListener(this). 2005). // método executável.*. p2. painel1.control). import java. então os reutilize. // GerenciadorLayout.add(proximo = new Button(“Proximo”)). // Painel Lateral de Controle Panel lateral = new Panel().add(p2). sendo que estes podem conter diversos outros tipos de componentes. } // método construtor public GerenciadorLayout() { super(“Janelas”).setLayout(new GridLayout(2. lateral). ficando livre a navegação entre estes (FILHO. painel1. Assim. public class GerenciadorLayout extends Frame implements ActionListener { private Panel windows.add(new Label(“Segundo Painel”)). pois não sofrem alteração do último exemplo apresentado. 100). add(“East”. Panel painel1 = new Panel().. é possível navegarmos em diversos componentes Panel ou mesmo Frame. conseguimos obter o aspecto de aplicações com diversas janelas. é mais trabalhoso.setBackground(SystemColor. lateral. proximo.add(anterior = new Button(“Anterior”)). mas os resultados compensam todo o trabalho.control). 1)). Alguns pontos do código foram suprimidos.setBackground(SystemColor. sendo que estas podem ser acessadas a qualquer momento por componentes como os Menus. Desta forma.. reutilize o código do outro exemplo public static void main(String args[]) { .java import java. conforme demonstrado nas aulas anteriores. anterior.awt.addActionListener(this).event.awt. lateral. sendo que este permite a exibição do primeiro componente ou mesmo o último. 42 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . O exemplo a seguir demonstra a utilização deste gerenciador visual. proximo.

sendo que um componente pode ocupar mais de uma linha ou coluna (FILHO. mas também o que mais dispõe de funcionalidades dentre os gerenciadores. por sua vez.5 gridbaglayout Finalizando os gerenciadores de layout.getSource()==anterior) { janelas. o GridBagLayout.next(windows). } if (e.. if (e. windows. O GridBagLayout. definir a posição de componentes em uma tabela com linhas e colunas. consegue-se criar diversos painéis. construíndo o efeito de que existem diversas janelas que são executadas ao clicar sobre os botões.getLayout(). devido a esta flexibilidade. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 43 . “Janela2”). 2005). diferentemente do gerenciador GridLayout. } } } class EventosJanela implements WindowListener{ . Assim como o CardLayout. Nosso último gerenciador consiste no mais complexo. permitindo que os componentes sejam adicionados em qualquer ordem. windows.setLayout(new CardLayout()). além de poder variar o tamanho das células. } Note que.previous(windows). windows. permite.. windows). apresentaremos o mais flexível dentre todos os apresentados.aUla 3 • PROgRaMaçãO // Painel Múltiplo windows = new Panel(). Isto tudo é possível devido às características da classe CardLayout. add(“Center”. Porém. “Janela2”). este torna-se o mais complexo de todos os gerenciadores (FILHO. este é bem mais tratável.add(painel1. 3. neste exemplo. assim como o GridLayout. sendo que tais funcionalidades o diferenciam dos demais.getSource()==proximo) { janelas. } public void actionPerformed(ActionEvent e) { CardLayout janelas = (CardLayout) windows. 2005).add(new Label(“Primeiro Painel”).1.

*. sugerimos leituras complementares para que sejam conhecidas todas as características que podem ser manuseadas através de uma instância desta classe.600). 44 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .setSize(600. tamanho e.add(new Button(“Direita”). c. Saiba mais Para uma melhor utilização da classe GridBagConstraints. cons). c. Container c = this.*. enriquecendo suas interfaces através do gerenciamento de layout flexível com a classe GridBagLayout.getContentPane(). porém este também pode ser utilizada pelos componentes AWT.add(new Button(“Esquerda”). cons).aUla 3 • PROgRaMaçãO Este gerenciador é mais utilizado por programas que utilizam a API Swing. a posição.setVisible(true). import javax. A utilização deste gerenciador consiste na definição de um objeto para a caracterização.awt. } public static void main(String[] args ) { ExemploGridBag exe = new ExemploGridBag(). Vamos a um pequeno exemplo para fixação. através da classe GridBagConstraints. criado um objeto da classe GridBagConstraints que será o responsável pela redefinição das características da interface como os componentes devem ser apresentados. estes devem ser associados à janela através do método add(). c. GridBagConstraints cons = new GridBagConstraints().setDefaultCloseOperation(EXIT_ON_CLOSE). por exemplo. public class ExemploGridBag extends JFrame { public ExemploGridBag { super(“Exemplo1”). // ExemploGridBag. Assim finalizamos nossa seção de gerenciamento de layout e agora iremos trabalhar mais a fundo com os tratadores de eventos.swing. na qual podem ser definidas a quantidade de células. this.setLayout(new GridBagLayout()). } } Conforme mencionado. this.java import java. se o componente deve ocupar todo o espaço da celular. exe.

O modelo de eventos da AWT é o responsável por este serviço. cada tipo de componente pode disparar certos tipos de eventos que podem ser “escutados” por mais de um listener. conforme é apresentado na Tabela 1 (FLANAGAN. Os eventos são objetos de uma classe. 2006). evento ActionEvent AdjustmentEvent ComponentEvent ContainerEvent FocusEvent ItemEvent KeyEvent interface ou aDaptaDor ActionListener AdjustmentListener ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter ItemListener KeyListener KeyAdapter métoDos actionPerformed adjustmentValueChanged componentMoved componentHidden componentResized componentAdded componentRemoved focusGained focusLost itemStateChanged keyPressed keyReleased keyTyped mousePressed mouseReleased mouseEntered mouseExited mouseClicked mouseDragged mouseMoved MouseEvent MouseListener MouseAdapter MouseMotionListener MouseMotionAdapter Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 45 . chamando determinadas tarefas (DEITEL.aUla 3 • PROgRaMaçãO 3. escutando as mensagens do sistema operacional mais conhecidos como listeners. mais especificamente os objetos receptores são os responsáveis por além de receber. processar os eventos reagindo a interação realizada pelos usuários. 2005).2 tratadores de eventos Assim como vimos em diversos exemplos até aqui. os sources e os que atuarão como receptores. enquanto os listeners são interfaces que implementam os métodos que tratam estes eventos. os eventos ocorrem quando existe uma interação dos usuários por meio de operações com o mouse (pressionar um botão ou arrastar) ou através do teclado (pressionando alguma tecla). Usualmente. identificando os objetos em que ocorreram as interações. Neste modelo de eventos.

aUla 3 • PROgRaMaçãO

TextEvent

TextListener

textValueChanged windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated

WindowEvent

WindowListener WindowAdapter

Alguns destes eventos, interfaces e métodos foram implementados nos exemplos desta disciplina. Assim, vamos finalizar nossa 3ª aula falando de uma maneira mais simples de tratar os listeners. Como ficou claro no decorrer desta disciplina, ao implementarmos uma interface todos os métodos nela declarados deverão ser redefinidos na classe que a implementa. Conforme pôde ser observado nos diversos exemplos que fizemos até o momento, ou mesmo na Tabela 1, muitas vezes somente um dos métodos nos interessa. Por exemplo, isto acontece quando uma classe implementa a interface WindowListener, sendo que assim é necessário que se declarem todos os sete métodos que estão definidos na interface. Mas se quisermos tratar somente um determinado evento, quando este ocorre ignorando o restante, sem precisar ficar reescrevendo os métodos que são desnecessários, como podemos agir? Para podermos fazer isso, apenas redefinimos somente o método que se necessita, ignorando os demais, para tanto utilizamos as classes adaptadoras, que também foram apresentadas na Tabela 1, juntamente com as interfaces. As classes adaptadoras são classes que já implementam as interfaces listener para os eventos, redefinindo todos os seus métodos (DEITEL, 2005). Porém, os métodos definidos na classe adaptadora não possuem corpo ou funcionalidade, fazendo com isto que tenhamos que utilizar o processo de herança, criando uma subclasse das classes adaptadoras e nela redefinirmos ou implementarmos somente o método que nos interessa. Desta forma, vamos a um exemplo que demonstra tudo o que mencionamos: para fechar uma das janelas de nossos exemplos, era necessário declarar, nada mais, nada menos, que sete métodos da interface WindowListener.

46

3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS

aUla 3 • PROgRaMaçãO

// GerenciadorLayout.java import java.awt.*; import java.awt.event.*; public class GerenciadorLayout extends Frame{ // método construtor public GerenciadorLayout(){ ... setLayout(new GridLayout(2,3)); ... } // método executavel public static void main(String args[]){ ... } } class EventosWindows extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } }

Note que apenas alteramos nossa classe EventosWindows e, considerando o código apresentado e qualquer outro exemplo, fica claro que as classes adaptadoras reduzem, consideravelmente, o trabalho, sendo apenas necessário que sejam implementados os métodos listerner que realmente serão necessários. Isto não é possível quando temos uma classe que já herda de alguma outra classe. Bom, pessoal, assim chega ao fim nossa 3ª aula, espero que todos tenham conseguido sanar qualquer dúvida sobre os conceitos aqui tratados, de suma importância para aplicações visuais.

Síntese da aula
Nesta aula, foram apresentados os conceitos relacionados aos métodos construtores, responsáveis por inicializar o espaço de memória de uma instância de uma classe, bem como realizar operações e inicializar atributos e variáveis com valores, tornando possível o perfeito funcionamento da funcionalidades da instância da classe. Da mesma maneira que existem os métodos construtores, existem os métodos destrutores, sendo responsáveis por colocar ordem na casa, liberando espaços de memória e finalizando operações da instância. Porém, diferentemente das outras linguagens de programação, em Java não é necessário se preocupar com a liberação do espaço de memória: Java possui um coletor de lixo automático, que se responsabiliza pela liberação de memória para o bom funcionamento do programa. Finalizando, apresentamos os conceitos vinculados ao encapsulamento, que tem por objetivo, além da segurança evitando acesso direto aos atributos, esconder detalhes de implementação do usuário, fornecendo somente a real função da classe, sem que os detalhes de como isto ocorrer fiquem explícitos.

Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO

47

aUla 3 • PROgRaMaçãO

Atividades
1. Quais são os gerenciadores de layout definidos pela biblioteca AWT? 2. A implementação de interfaces listener são responsáveis por interpretar os eventos oriundos da interação do usuário com o sistema. Estas, muitas vezes, se tornam dispendiosas devido a obrigar que todos os métodos da interface sejam declarados na classe que implementa a interface. Dessa forma, qual a outra possibilidade fornecida pela linguagem Java para tratar os eventos?

Comentário das atividades
Na atividade 1, os gerenciadores de layout definidos pela biblioteca AWT consistem nas classes FlowLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout, sendo que este podem ser definidos a qualquer componente que seja um container. Já na atividade 2, a outra possibilidade fornecida pela linguagem Java para tratar os eventos de um sistema consiste nas classes adaptadoras, que implementam as interfaces, e desta forma fornecem a possibilidade de que outras classes derivem destas classes adaptadoras e assim, deixa de ser obrigatória a definição de todos os métodos das interfaces listener, sendo somente redefinindo os métodos que realmente serão utilizados pelo sistema.

referências
DEITEL, Harvey M. Java: como programar. 6 ed. São Paulo: Pearson Prentice Hall, 2005. FILHO, Renato Rodrigues. Desenvolva aplicativos com Java 2. São Paulo: Érica, 2005. FLANAGAN, David. Java: o guia essencial. 5. ed. Porto Alegre. Bookman, 2006.

na próxima aula
Serão expostos os conceitos sobre conexão de aplicações Java com banco de dados, possibilitando a construção de programas que realizem as operações básicas com o manuseio de dados, além de, com isto, enriquecê-los.

48

3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS

ter assimilado todo conhecimento referente às aulas anteriores. permitindo uma padronização no acesso a distintos bancos de dados. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 49 . é importante ter concluído a disciplina de banco de dados já apresentada e. Pré-requisitos Para iniciarmos esta aula. você seja capaz de: • compreender os conceitos relacionados à conexão de aplicações gráficas com banco de dados. além disso. ao final desta aula. introdução Uma funcionalidade primordial em qualquer sistema. Sendo mais específico: serão necessários. Esta API é a Java DataBase Connectivity (JDBC).Aula 4 trabalhando com banco de dados Objetivo Esperamos que. é a habilidade para comunicar-se com um repositório de dados. além de dominar os conceitos quantos aos componentes da linguagem de programação Java para aplicações visuais. conhecimento básico de SQL (Structured Query Language). A Linguagem Java possui uma Application Programming Interface (API) que possibilita o acesso a repositórios de dados através de um modelo de conexão uniforme.

2002). 50 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . a API JDBC utiliza-se de diversos tipos de drivers que possibilitam a conexão de aplicações com banco de dados.1. pode ser que sejam necessários que outras soluções e aplicativos estejam instalados nas máquinas clientes.1. Os principais drivers são apresentados a seguir.1 jdbC A API JDBC consiste em uma biblioteca. Assim como o driver JDBC-ODBC. Este tipo de conexão geralmente é usado quando não há um driver “puro-java”.1. 4.1. devido ao fato de se utilizar de protocolos que não se prendem a um determinado banco de dados.1 jdbC-OdbC Também conhecido como Ponto JDBC-ODBC.4 logo a seguir. Desta forma. fazendo com que os dados sejam traduzidos para o protocolo do banco de dados. para um determinado banco de dados (THOMPSON. que será descrito na seção 4.2 driver APi-nativo Este é o responsável por traduzir as chamadas realizadas com o JDBC para realizadas com a API cliente do banco de dados utilizado. 2002).1. é restrito à plataforma Windows. convertendo métodos JDBC em chamadas às funções do ODBC. convertendo a chamada por meio do JDBC para um protocolo de rede. deve haver uma implementação (também chamada de driver) dessas interfaces. implementada em Java. este tipo utiliza ODBC para conectar-se com o banco de dados. Para cada banco de dados. para que a conexão possa ser estabelecida (THOMPSON. este consiste no modelo de conexão mais flexível e abrangente (THOMPSON.1. 4.3 driver de Protocolo de rede A utilização do driver de protocolo de rede funciona.aUla 4 • PROgRaMaçãO 4.1. 4. 2002).1. que disponibiliza classes e interfaces para o acesso ao banco de dados.1 tipos de drivers jdbC Conforme mencionado. 2002). levando em consideração as suas particularidades (THOMPSON.1. que independe do banco de dados que está sendo utilizado. 4.

sql O pacote java. os drivers são os responsáveis pela maneira como a aplicação realizará a comunicação com o banco de dados.4 driver nativo Este drive. • Connection. Saiba mais Conforme mencionado. que é implementado na linguagem Java. Com isto. que tornam possível o armazenamento e recuperação de informação em base de dados. As principais classes e interfaces do pacote java. 4. É o tipo mais recomendado para ser usado e mais utilizado no mercado (THOMPSON. classe responsável por manter uma conexão aberta com o banco. uma vez que este pode fornercer uma interface que otimize essa comunicação.1. gerencia e executa instruções SQL.1. como por exemplo. responsável por criar uma conexão com o banco de dados. com o banco de dados Oracle. 2005): • DriverManager. gerencia e executa instruções SQL. responsável por receber os dados obtidos em uma pesquisa ao banco. 2002). é interessante ficar atento aos drivers disponíveis para o banco de dados que estamos utilizando. utilizando a linguagem de programação Java.sql é o responsável por fornecer a API para acesso e processamento de dados armazenados em uma fonte de dados. • Statement. serão descritas e exemplificadas cada uma dessas principais classes e interfaces. por sua vez. permitindo também a passagem de parâmetros em uma instrução.1. • PreparedStatement.sql são (DEITEL. • ResultSet. é escrito pelos próprios desenvolvedores. tornando o muito flexível.2 Pacote java. Este. geralmente em uma base de dados relacional. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 51 . converte as chamadas JDBC diretamente no protocolo do banco de dados. Prosseguindo nos tópicos seguintes.aUla 4 • PROgRaMaçãO 4. normalmente independe de plataforma.

• close(). desfaz qualquer alteração feita com o banco de dados pela atual transação.Driver”). “conta”. primeiramente um driver é carregado em tempo de execução para que seja possível a tentativa de estabelecer conexão com o banco de dados. quais gramáticas de SQL são suportadas pelo banco. Tal objeto é capaz de proporcionar informações sobre as tabelas do banco. 52 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . então vamos a ela? 4. • rollback(). // Tentando estabelecer conexão com o Banco de Dados Connection conn = DriverManager. libera o recurso que estava sendo utilizado pelo objeto. 2007).forName(“org. capacidades de sua conexão. // Carregando um driver em tempo de execução Class. Todas as operações executadas entre a aplicação Java e o banco de dados ocorrem dentro do contexto desta interface (SUN. um objeto da interface Connection (conn) recebe a conexão estabelecida com o banco de dados através da classe DriverManager.aUla 4 • PROgRaMaçãO 4. entre outros. 2002).gjt.getConnection(“jdbc:mysql://localhost/ aula04?autoReconnect=true”. “senha”). No código apresentado. executa todas as alterações feitas com o banco de dados pela atual transação. 2007): • commit().4 Connection A interface Connection representa a conexão com o banco de dados.mysql. Esta classe também proporciona o estabelecimento de conexões a bancos de dados (THOMPSON. Este método retorna uma implementação para a interface Connection.3 drivermanager A Classe DriverManager é a responsável pelo gerenciamento de drivers JDBC.1. Estes são métodos desta interface freqüentemente utilizados (SUN.mm. por meio do método getConnection() da classe DriverManager.1. No código exibido no tópico anterior.

a partir do método executeUpdate(). sem passagem de parâmetros. 4. stmt. • close(). // Instanciando o objeto statement (stmt) Statement stmt = conn. método utilizado para atribuir valores do tipo Alfa Numéricos.createStatement(). executa instruções SQL do tipo: INSERT. setInt(). porém que os métodos fornecidos pela interface Connection não trabalham diretamente com os dados.aUla 4 • PROgRaMaçãO Note. do objeto conn da interface Connection. ‘Pedro da Silva’)”). libera o recurso que estava sendo utilizado pelo objeto. executa instruções SQL de busca de dados do tipo SELECT. método utilizado para atribuir um valor do tipo Data. setString(). Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 53 . acrescentando a utilização de parâmetros em uma instrução SQL. Os principais métodos da interface PreparedStatement são (SUN. é executada uma instrução SQL de inserção em uma tabela de um banco de dados. 2007): • executeUpdate().5 Statement O objeto desta interface fornece métodos para executar uma instrução SQL estática. 4.6 PreparedStatement A interface PreparedStatement possui todos os recursos da interface Statement. setDate().1. Os principais métodos da Interface Statement são (SUN. 2007): • • • • execute(). lidando somente com características de como o banco irá se comportar.executeUpdate(“INSERT INTO ALUNO VALUES (1. Após a instância do objeto stmt. O código acima mostra a instância de um objeto do tipo Statement (stmt) através do método createStatement(). UPDATE e DELETE.1. • execute(). utilizado para atribuir valores do tipo inteiro. consolida a instrução SQL informada. // Executando uma instrução SQL.

2007): • next(). da linha atual do conjunto de dados recebidos pelo objeto ResultSet. realizada ao banco de dados. // Setando o valor ao parâmetro pstmt. entre outros. 54 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . é possível recuperar os valores dos campos selecionados com métodos como o getInt(). recupera o valor da coluna informada como parâmetro. o cursor que indica qual linha de dados do conjunto está em evidência. Alguns dos métodos desta interface frequentemente utilizados (SUN. • getString(String columnName). String nome = rs. O código acima apresenta a instância do objeto pstmt da classe PreparedStatement.prepareStatement(“UPDATE ALUNO SET NOME = ?”). Com o método next(). Assim. nome FROM ALUNO”). recebendo um conjunto de dados retornados pela consulta SQL. getString(). caso esta retorne algo. Esta consulta contém a seleção de dois campos: id e nome. através do método prepareStatement().next()) { // Recuperando os dados retornados pela consulta SQL int id = rs. } Este código exibe uma instância da interface ResultSet (rs).7 resultSet Esta interface permite o recebimento e gerenciamento do conjunto de dados resultante de uma consulta SQL. libera o recurso que estava sendo utilizado pelo objeto. Após a instância.executeQuery(“SELECT id. //Recebendo o conjunto de dados da consulta SQL ResultSet rs = stmt. move o cursor para a próxima linha de dados.1.getInt(“id”).aUla 4 • PROgRaMaçãO // Instanciando o objeto preparedStatement (pstmt) PreparedStatement pstmt = conn. é apontado para a próxima linha. • close(). do objeto conn da classe Connection. Ela proporciona métodos capazes de acessar os dados provenientes da consulta SQL.setString(1. o objeto pstmt utiliza o método setString() para passar o valor do parâmetro criado na instrução SQL anteriormente. caso haja resultados. // Se houver resultados. “MARIA RITA”). já que o conjunto de dados retornados pela consulta SQL é armazenado como em uma lista. posiciona-se o cursor na próxima linha de dados while (rs. 4.getString(“nome”).

java.sql. } catch (SQLException e) { e. java. mostrando as importações necessárias para a aplicação funcionar. java.awt. mãos à obra. public class Aula04 { private Connection conn. Essa aplicação contém tudo o que foi mostrado nos tópicos anteriores. “”).List.Connection.close().gjt. Além desses atributos. os quais serão necessários para a interação com o banco. transcreva o código a seguir.Driver”). java.printStackTrace().ResultSet. Após as importações. } catch (SQLException e) { e.aUla 4 • PROgRaMaçãO 4. } } public void close() { try { if (stmt != null) stmt.DriverManager. } catch (ClassNotFoundException e) { e. } } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 55 . private Statement stmt.close().mysql.Frame. java. import import import import import import import import java. esta aplicação contém sete métodos apresentados logo a seguir.SQLException. private ResultSet rs. java.PreparedStatement. conn.awt. O código abaixo mostra o início de uma classe chamada Aula04.sql.2 Exemplo de uma aplicação O exemplo contido nesta seção apresenta uma aplicação com uma base de dados MySQL. java. private PreparedStatement pstmt.printStackTrace().sql. foram declarados quatro atributos.mm.sql. “root”.sql.forName(“org. java. Então. public void open() { try { Class.Statement.sql. conn = DriverManager.getConnection( “jdbc:mysql://localhost/aula04?autoReconnect=true”.printStackTrace().

O próximo método.executeUpdate( “INSERT INTO ALUNO VALUES (1. e.prepareStatement(“UPDATE ALUNO SET NOME = ? Where id = 1”). “MARIA RITA”). Ao final foi fechada a conexão com o banco. passando como parâmetro uma instrução SQL de inserção de dados. ‘Pedro da Silva’)”). } } 56 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . somente fecha a conexão com o banco. close(). teremos que possuir uma tabela Aluno.printStackTrace(). // Instanciando o objeto preparedStatement (pstmt) pstmt = conn. Logo a seguir é instanciado um objeto conn da interface Connection. através do método open().createStatement(). } catch (SQLException e) { // Fechando a conexão com o banco close(). ou seja. // Fechando a conexão com o banco pstmt. // Fechando a conexão com o banco close(). id e nome. passando como parâmetro o tipo de driver. O método open() atribui a string de conexão do banco em questão (MySQL). contendo duas colunas. // Executando uma instrução SQL. o usuário e senha. } } O método inserir() utilizou a interface Statement para adicionar um aluno ao banco.aUla 4 • PROgRaMaçãO Para esta aplicação. public void alterar(){ try { // Abrindo a conexão com o banco open().setString(1. Este objeto executou um método chamado executeUpdate(). Observe que para rodar esta aplicação. logo após criou-se uma instância da interface Statement (stmt). o local do servidor. close().execute(). } catch (SQLException e) { // Fechando a conexão com o banco close(). e. // Instanciando o objeto statement (stmt) stmt = conn. foi utilizado o Tipo de driver 4 (drive nativo). A intenção deste método é apenas abrir uma conexão com o banco. stmt. // Setando o valor ao parâmetro pstmt. public void inserir(){ try { // Abrindo a conexão com o banco open(). faz exatamente o contrário do método open().printStackTrace(). Neste método foi aberta uma conexão com o banco.

que significa a criação de um parâmetro.rs = aula.aUla 4 • PROgRaMaçãO O método alterar() é bem parecido com o inserir().setSize(300. logo após o nome. inserido no método anterior. Apenas foi utilizada outra classe para a execução da instrução SQL. } catch (SQLException e) { close(). utilizamos a interface PreparedStatement. public ResultSet buscarAlunos(){ try { open(). mas possui a grande vantagem de se passar parâmetros a uma instrução SQL.createStatement().add(“Id: “ + aula.rs. Nesta mesma instrução.setVisible(true).next()) listAlunos.setLocation(300.“ + “Nome: “ + aula. espera-se alterar o nome de um aluno que possui o id igual a “1”. para fazer uma pesquisa ao banco. Aula04 aula = new Aula04(). contendo os dados selecionados da tabela Aluno. Repare que são informados dois valores: qual o parâmetro e o seu devido valor. é informada a instrução SQL. Se houvesse mais parâmetros.getInt(“id”) + “ . Neste caso. buscarAlunos(). e. consolidando a alteração no banco. public void imprimirAlunos() throws SQLException{ List listAlunos = new List().printStackTrace(). o objeto pstmt utiliza o método setString() para atribuir o valor ao parâmetro em questão. return rs.add(listAlunos). Na instância da interface PreparedStatement (pstmt). janela. janela. Na próxima linha. Frame janela = new Frame(“Janela”).rs. como só existe um parâmetro. 300). Este método será utilizado logo a seguir para imprimir os dados na tela. foi utilizado o caractere “?”. } return null.executeQuery(“SELECT id. que funciona de forma semelhante à interface Statement.buscarAlunos(). Este retorna um objeto do tipo ResultSet ao objeto rs. Logo após informar o valor do parâmetro. através do método executeQuery(). } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 57 . aula. stmt = conn. janela. é executado o método execute() do objeto pstmt. nome FROM ALUNO”). “3” etc. foi informado o número “1”.getString(“nome”)).rs. while (aula. rs = stmt. janela. 300). seriam informados na seqüência: “2”. utiliza o Statement. } O método seguinte. Neste caso. Nesta instrução.

imprimirAlunos(). aula. diversos outros componentes poderiam ter sido utilizados. de execução padrão de uma classe Java.printStackTrace(). atribuindo valores de posição e tamanho. Foram feitas instâncias das classes List e Aula04. aula. apenas se instância o objeto da classe Aula04 e executa os métodos explicados anteriormente. Inicialmente foram apresentados os tipos de conexão JDBC possíveis. 58 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . O objeto aula faz uma pesquisa no banco. foram apresentados os conceitos relacionados à conexão de aplicações Java com banco de dados. a qual é exibida na tela. e logo a seguir é feito um laço de repetição para adicionar os valores ao objeto listAlunos. aula. apresentado sua utilização.alterar(). try { aula. Pensando sobre o assunto Assim como foi utilizado um objeto do tipo List para a exibição dos valores obtidos junto ao banco de dados. sugerimos testes e uma leitura mais detalhada sobre quais componentes podem receber valores de uma consulta a um banco de dados. Assim finalizamos nossa 4ª aula. refaçam todos os exemplos para um melhor aproveitamento dela. Finalmente. além de detalhar cada um destes.inserir(). Depois. através de seu método buscarAlunos(). Dentre esses podemos citar o componete Jtable da biblioteca Swing. } } Finalmente. } catch (SQLException e) { e.rs = aula. Logo após. foram consideradas as classes que fazem parte de uma conexão nativa do Java. é criado o objeto janela do tipo Frame. é adicionada a lista de alunos à janela.aUla 4 • PROgRaMaçãO O método imprimirAlunos() utilizou componentes do pacote AWT para a impressão dos alunos na tela.buscarAlunos(). Depois disso. Com isto. public static void main(String[] args ){ Aula04 aula = new Aula04(). foi criado um exemplo que fizesse uso de todos os conceitos vistos anteriormente. explicado anteriormente. o código acima apresenta o método main(). Síntese da aula Nesta aula. Nele.

Java Technology. 6 ed. close(). 2007. Já a interface PreparedStatement. MicroSystem.com. Java 2 & banco de dados. rollback(). Marco Aurélio. os métodos que são implementados pela interface Connection. que libera o recurso que estava sendo utilizado pelo objeto. 2005. que executa todas as alterações feitas pela atual transação. São Paulo: Érica. THOMPSON. referências DEITEL. fornece suporte à passagem de parâmetros para as claúsulas que esta executa.aUla 4 • PROgRaMaçãO Atividades 1. Disponivel em http://java. Harvey M. constem em: commit(). além de possuir todos os métodos disponibilizados pela primeira interface. a primeira consiste em uma interface que disponibiliza métodos para a execução de claúsulas SQL. São Paulo: Pearson Prentice Hall. que desfaz qualquer alteração feita pela atual transação. para controle da conexão com um banco de dados e qual o objetivo destes? 2. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 59 . Acessado em 12 out. Qual a diferença entre as interfaces Statement e PreparedStatement? Comentário das atividades Na atividade 1. Já na atividade 2. na próxima aula Serão apresentados os conceitos relacionados a construção de aplicações utilizando a classe Applets Java. SUN. Java: como programar. quais são os métodos implementados pela Interface Connection. sem a passagem de parâmetros. 2002. fornecendo suporte para que possamos disponibilizar aplicações visuais Java para a WEB.sun. Levando em consideração os tópicos apresentados nesta aula. no caso estáticos.

aUla 4 • PROgRaMaçãO Anotações 60 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .

Pré-requisitos Para começar os estudos sobre a tecnologia de programação Applet Java. sendo que este têm um ciclo de vida diferente dos programas executável. você seja capaz de: • desenvolver programas Java para WEB utilizando Applets. vistos nas aulas anteriores. Esse conhecimento é importante para uma melhor compreensão dos conceitos desta aula. é importante conhecer os conceitos de programação Java. introdução Um Applet consiste em um trecho de código Java que pode ser integrados a páginas WEB. imagens entre outros conteúdos típicos da rede. esta aula irá apresentá-lo e prepará-lo para compreender e aplicar os conceitos da tecnologia Applets Java. Se destinam a ser utilizado pelos navegadores. Bons estudos! Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 61 . ao final desta aula. Assim. bem como conceitos relacionados à orientação ao objeto. significando que será transportado pela Internet tal como documentos HTML.Aula 5 Applets java Objetivo Esperamos que.

no caso. Inicialização – (init). pois podem ser incorporadas a documentos HTML e executadas usandose navegadores que sejam compatíveis com Java. Finalização ou destruição – (destroy). O seu funcionamento se baseia em um modo particular de programação. é interessante conhecermos qual a função de cada um destes métodos que determinam a vida de um Applet. 5. 2005): 1. necessariamente. Parada – (stop).aUla 5 • PROgRaMaçãO 5. 4. 2. Instanciação – (create). 3. Início – (start).1 funcionamento das Applets As classes Applets são muito úteis para escrever aplicativos para a Internet. Dessa forma. Execução e renderização – (paint e outros métodos). Figura 1 .Ciclo de vida das Applets Todos as classes Applets devem. seguir este ciclo de vida. 62 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . que suportem os plugins disponibilizados para a execução do código pela JVM. 6. que consiste em (DEITEL. Os programas construídos com Applets são construídos de forma idêntica aos programas gráficos Java. o entendimento da forma do seu ciclo de vida auxilia bastante na compreensão de sua estrutura.

Este pode ser utilizado para iniciar outros métodos e executar animações gráficas ou mesmo arquivos de som (DEITEL. 5. antes que o Applet seja apresentado (DEITEL. apresentado o resultado ao usuário (DEITEL.1. chegamos ao método destroy.4 método stop Outro método que sempre deve ser considerado na implementação de um Applet consiste no stop(). 5. 2005). Muito parecido com o método stop. sendo invocado pelo navegador. ou seja.3 método paint O paint é um método executado toda vez que a área de exibição da Applet precisa ser novamente renderizada. este é invocado pelo browser toda vez que o Applet se torna visível. 2005). no entanto este é executado Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 63 . este deverá ser invocado. toda vez em que houver a necessidade de uma nova apresentação do conteúdo do Applet. 2005). através das JVM encarregada pela execução das Applets. receber parâmetros de execução e realizar outras atividades de preparo.aUla 5 • PROgRaMaçãO 5. no caso.1.1 método Init É executado uma única vez. ou minimização da janela ou qualquer outra operação em que a janela não for mais a principal.2 método start Seguindo o ciclo de vida apresentado anteriormente. 5.1. este método deverá ser chamado explicitamente para que seu código seja executado e. 2005). é executado logo após o método init() o start(). quando o Applet deixar de ser visível (DEITEL.5 método destroy Finalizando os métodos de ciclo de vida de um Applet. Após o Applet ser carregado pela primeira vez. assim. 5. ou seja.1. assim que a página que executa o Applet está sendo carregada pela primeira vez. Através desse método é possível adicionar componentes. conforme mencionado. Ele é executado sempre que houver uma mudança da página atual que contém o Applet.1.

} } Este exemplo é interessante. conforme é apresentado no exemplo anterior na assinatura da classe MetodosApplet. 45). g. g. 30).Graphics. iremos. 5. 60). 5. explicitando todas as características mencionadas.aUla 5 • PROgRaMaçãO após todos os recursos da página serem utilizados. entender como esses métodos são utilizados em uma classe Java e depois utilizados pelos navegadores. 5. // MetodosApplet.applet. 2005). } public void stop(){ stop++. private int stop = 0. 5. de invocá-lo.drawString(“O método Stop: “+stop. assim liberando todos os recursos alocados durante a sua execução.Applet. ou seja. a seguir. havendo uma comunicação com outras classes Applets ou conexões de rede que serão finalizadas (DEITEL.awt.drawString(“O método Paint: “+paint. 15).drawString(“O método Start: “+start. devido ao fato de demonstrar a quantidade de vezes que os métodos essenciais do ciclo de vida de um applet são invocados no momento de sua execução.java import java. O trecho de código logo abaixo exemplifica. Não há a necessidade de explicitá-lo. private int paint = 0. no caso. g. 64 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . herdar da classe Applet. Bom. depois de tantos conceitos. public class MetodosApplet extends Applet{ private int init = 0. public void init(){ init++. } public void paint( Graphics g){ paint++. import java. dando uma noção de como uma classe Applet Java é implementada. pessoal.drawString(“O método Init: “+init. private int start = 0. g. Outro detalhe que deve ser mencionado consiste no fato de que as classes que se propõem a implementar um Applet devem derivar. } public void start(){ start++.

iremos nos aprofundar neste conceito. import java. O código a seguir ilustra a classe responsável por isto. } } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 65 . public class PrimeiroApplet extends Applet{ public void paint(Graphics g){ g. Abaixo segue um trecho de código que exemplifica essa afirmação. iremos apresentar um programa simples que escreverá na página HTML a mensagem “Olá Mundo !!!”. Um detalhe que temos de nos atentar consiste na necessidade da compilação do código Applet como as demais classes Java apresentadas até aqui. agora.class width=”220” height=”100”> </applet> </BODY> </HTML> Pronto. abrindo um grande leque de possibilidades para as aplicações Java. realizaremos a chamada de um Applet por meio de um arquivo html. uma página WEB que serão apresentados por navegadores. depois de alguns conceitos básicos na seção anterior. 50.aUla 5 • PROgRaMaçãO Saiba mais As classes Applets passaram a ser um diferencial da linguagem Java. revolucionou o conteúdo e a forma de apresentação na WEB em meados dos anos 90.drawString(“Oi Mundo!!!”. uma vez que é utilizado o arquivo .Graphics. que. ou seja. O conceito de Applets foi o responsável pelo crescimento exponencial vivido pela tecnologia Java.2 rodando Applets java em uma Página WEb É isso. em conjunto com o navegador Netscape. 25).awt. Para carregar um Applet Java em uma página HTML (HyperText Markup Language). devemos especificar sua utilização através da tag Applet. porém.class. 5. <HTML> <HEAD> <TITLE>Primeiro Programa Applet</TITLE> </HEAD> <BODY> <applet code= MetodosApplet. pessoal. agora que já sabemos como apresentar nosso Applet em um navegador.

existe um programa denominado appletviewer. 2005): 66 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . mas. para que o Applet inserido no navegador possa funcionar corretamente. 2005). na maioria das vezes.aUla 5 • PROgRaMaçãO Conforme já mencionado. como qualquer código. Sendo assim.java A partir disso. javac PrimeiroApplet. Porém. após a criação de nossa classe Applet. apagando ou acessando informações indevidas armazenadas dentro do sistema (DEITEL. fazendo com que apenas a área onde o Applet é executado. é comum dizer que as Applets são como crianças que estão sempre sob a vigilância de um adulto. que causa uma interrupção no applet. Para isso. utilizado para verificar a consistência dos Applets. que deve indicar qual arquivo html deve ser apresentado. antes que a página seja disponibilizada. caso este tente violar as regras de segurança determinadas. o byte-code deve ser adicionado a um código HTML como demonstrado no exemplo de código inicial desta seção. Algumas restrições impostas aos applets que são (DEITEL. Para compilar nossa classe é necessário digitar o comando javac. ou seja.3 restrições das Applets Vimos que as Applets podem ser incorporadas às páginas WEB. uma vez que a maioria dos navegadores atuais já possui plugins para suporte a tecnologia Applet. 5. appletviewer index. conforme é realizado com qualquer classe. O trecho de código a seguir exemplifica a utilização desta ferramenta. Para a apresentação de nossa nova classe em um navegador. que é disponibilizado pela JDK.html Este aplicativo é. seja apresentada. é necessário que o código de nossa classe seja compilado. deve-se ficar atento para que nenhuma classe Applet desconhecida possa prejudicar o sistema onde está sendo executada.class que é um bytecode da Applet. há um sistema de monitoramento de segurança denominado applet security manager. será gerado um arquivo PrimeiroApplet. Alguns navegadores não suportam Java e obviamente não conseguem disponibilizar a visualização do Applet inserido no código HTML de uma página.

Como vimos anteriormente. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 67 . A quantidade de parâmetros não é predefinida em uma Applet. Pensando sobre o assunto Na maioria das vezes. 2. se encontra disponível para ser utilizado.4 Parametrizando Applets Assim como programas podem receber argumentos vindos das linhas de comando. Programas localmente instalados não podem ser executados. Só podem obter informações do sistema sobre a JVM a qual operam. podendo ser utilizados quantos forem necessários desde que uma ou mais tags <PARAM> sejam incluídas dentro das tags <APPLET> e </APPLET>. Essa tag possui alguns parâmetros dos quais dois são aplicáveis unindo-os a tag <APPLET> que são o NAME e o VALUE. pode ser realizada com o uso da tag especial <APPLET> em conjunto com a tag denominada <PARAM>.aUla 5 • PROgRaMaçãO 1. sendo que essa então realiza os acessos necessários. 4. 2005). que é lido pelo navegador ou pelo appletviewer. 5. O exemplo a seguir demonstra esse tipo de código. não é necessário se preocupar com estes detalhes. para que possam ter uma maior versatilidade de sua utilização. um determinado parâmetro especificado. visto que as classes Applets são utilizadas apenas para a disponibilização e apresentação de conteúdo de outra classe. Não há permissão de leitura e escrita no sistema de arquivo local. neste caso. possibilitando a criação de um código mais genérico (DEITEL. 3. Assim sendo. Exceto no host de origem não há comunicação com outros hosts. cujo nome está definido no campo NAME e cujo valor está definido no campo VALUE. evitando que a classe Applet desempenhe diretamente estas funções. A passagem de parâmetros. fazendo alterações que os ajustem com esses parâmetros. as applets não são executadas através de uma linha de comando e sim através de um arquivo HTML. Estes são então lidos pela Applet Java. as Applets podem ser parametrizadas.

// processamento dos parâmetros . As aplicações feitas através de applets são úteis em situações em que devem ser utilizadas tanto localmente quanto em conexões de rede. Agora no sentido inverso é de certa forma possível. 16)))..parseInt(aux. 68 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .. 5.setText(aux) } . O código a seguir exemplifica a afirmação sendo utilizado o método em uma classe Applet. Com isso. Para tanto..5 Applets que são Aplicações Dependendo de como os programas Java forem carregados.class” height=115 width=115> <param name=”cor” value=”FFF000”> <param name=”valor” value=”10”> </applet> . A idéia principal dos parâmetros consiste na troca de informação com as classes applets.aUla 5 • PROgRaMaçãO . ao passo que o parâmetro valorInicial é utilizado diretamente para apresentação por um componente. <applet code=”param.. é possível recuperar valores de parâmetros especificados como argumentos. é exigido pelo método setBackground(). Portanto. com a utilização do método getParameter(). logo após. if (aux!=null){ tfEntrada. Se o método getParameter() retornar um valor null. 2005). o valor é convertido para o tipo desejado. significa que o nome especificado não contém valor definido ou o parâmetro especificado é nulo... no caso. este está realizando o tratamento para criar uma aplicação (DEITEL. eles podem se portar como aplicativos ou como Applets. No exemplo acima. quando adicionamos o método executável (main) a uma aplicação Applet. é logo após convertido para um valor inteiro com base hexadecimal. String aux = getParameter(“corFundo”). embora algumas restrições impostas a este funcionamento sejam feitas. if (aux!=null){ setBackground(new Color(Integer. sendo que.. o parâmetro corFundo teve seu valor de String recuperado. é possível se passar valores para a tag HTML <PARAM>.. } aux = getParameter(“valorInicial”). os valores recuperados têm como retorno objetos do tipo String.

para criar novas janelas ou mesmo exibir um novo documento em uma janela já existente. Requisita ao navegador que substitua a página atual pela contida na URL dada na janela especificada como alvo. Retorna uma referência para a tag <APPLET> no documento atual. String) Descrição Lista as applets contidas na exibição do documento.6 O Contexto das Applets Uma das principais e mais importantes características de um Applet é a forma como ele interage com o navegador no qual está sendo executado. áudio e vídeos dentre outros. obtendo informações sobre o ambiente em que são executados utilizando-se da interface AppletContext.aUla 5 • PROgRaMaçãO 5. pode-se verificar que suas funcionalidades apresentadas auxiliam no trabalho com Applets. no qual pode-se gerenciar um navegador. Tabela 1 . através de páginas WEB. com este importante conceito da tecnologia Java. Requisita ao navegador que substitua a página atual pela contida na URL dada. A URL retorna uma imagem. foram apresentados os conceitos de Applets. Assim finalizamos nossa 5ª aula. Um dos métodos mais importantes em uma classe Applet é o showDocument().Métodos da Interface AppletContext Nos métodos citados acima. a forma como é feita a programação do código para que esses Applets possam funcionar nos documentos HTML e alguns métodos para auxiliar na criação de Applets mais sofisticadas. bem como o seu funcionamento para criação de programas. Um clip de áudio da URL solicitada é retornado. cujos métodos são relacionados na tabela a seguir (DEITEL. Síntese da aula Nesta aula. A string será fornecida na linha de status ou na janela. 2005). métoDo getApplets() getAudioClip(URL) getApplet(String) getImage(URL) showDocument(URL) showStatus(String) showDocument(URL. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 69 . além possibilitar o trabalho com imagens. conseguindo executar até mesmo referências a outras classes Applet.

referências DEITEL. 6. Um Applet consiste em uma classe com características e comportamentos que a diferem das demais classes conhecidas. existe o ciclo de vida. Uma classe Applet. No caso. uma classe Applet possui um ciclo de vida pré-determinado. Java: como programar. sendo que o primeiro é o responsável por obter o conteúdo de um parâmetro definido em uma tag HTML e o segundo por estabelecer valores que podem ser utilizados pela página. pode ser executado dentro de uma página HTML que pode conter parâmetros. que deve ser obedecido e definido pelos métodos init(). 70 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . Harvey M. na próxima aula Apresentaremos os conceitos relacionados à criação de relatórios em aplicações Java com a utilização do framework jasperReport. Já na atividade 2.aUla 5 • PROgRaMaçãO Atividades 1. processado com paint() e stop() e logo após este tem um fim com o método destroy(). paint(). um Applet tem um processo que é iniciado com os métodos init() e start(). conforme pôde ser observado em nossa aula. Dentre os comportamentos de um Applet. ed. 2005. start(). stop() e destroy(). sendo que este não necessita ser explicitamente invocado. No que consiste o clico de vida de um Applet? 2. bem como a apresentação de ferramentas que auxiliem neste processo. Quais são os métodos que possibilitam a interação entre a claase Applet e a página HTML? Comentário das atividades Na atividade 1. os métodos que disponibilizam uma interface entre a Applet e a página HTML consistem nos métodos getParameter() e setParameter(). São Paulo: Pearson Prentice Hall.

Apesar de sua importância e sua presença em. todos os sistemas computacionais. Esse conhecimento é importante para uma melhor compreensão das aulas desta aula. muitas vezes este módulo do sistema não tem seu devido reconhecimento. contendo parte desses dados armazenados no sistema para um determinado fim específico. Em resumo. auditoria ou apenas de conferência. basicamente. ao final desta aula. Um de seus objetivos é a geração de relatórios. como a ferramenta proprietária Crystal Reports e as ferramentas de código aberto JasperReports e iReport que serão tratadas nesta aula. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 71 . Essa necessidade de criação de relatórios fez com que surgissem diversas ferramentas especializadas neste assunto. introdução Todo sistema é criado com a finalidade de organizar. podemos dizer que o processo de geração de relatórios consiste na criação de um layout e na seleção dos dados que irão compor o corpo do relatório. seja ele de gerência.Aula 6 relatórios Objetivo Esperamos que. guardar e recuperar dados. é importante conhecer os conceitos de programação Java. bem como conceitos relacionados à XML (eXtensible Markup Language). Pré-requisitos Para começarmos os estudos sobre a geração de relatórios. você seja capaz de: • criar relatórios de aplicações Java utilizando ferramentas livres. vistos nas aulas anteriores.

com pouco esforço. os frameworks fornecem uma solução para uma família de problemas em comum. WEB ou mesmo distribuído. disponibilizando bibliotecas ou mesmo softwares que acelerem o processo de desenvolvimento de aplicações.1 Xml a chave do funcionamento Aqui. pessoal. Estes se diferenciam das bibliotecas de classes convencionais fornecidas. aumentando o poder de reutilização de código. Ele consiste em um arcabouço de soluções. 6. Como não podia deixar de ser. e a Figura 1 tem como objetivo nos mostrar como se dá este processo. JasperReports é uma das ferramentas (framework) de código aberto (open-source) que nos auxilia na criação de relatórios. Logo. vamos ao que interessa! Começaremos a nossa aula falando sobre o JasperReports.1 jasperreports Como dissemos anteriormente. essa ferramenta é escrita em Java e alguns de seus pontos fortes são a organização e apresentação de conteúdo. gerando de forma dinâmica seus relatórios em vários formatos: XML. pois. 6.1. podemos utilizá-la em qualquer aplicativo feito em Java.JasperReports . diferentemente destas. E como todos nós já sabemos.Processo para gerar um relatório 72 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . temos que compreender como o processo funciona.aUla 6 • PROgRaMaçãO Agora que já tivemos a idéia da finalidade dos relatórios. HTML e CSV (HEFFELFINGER. Saiba mais Um framework consiste em uma estrutura de software muito utilizada na linguagem Java. indo de desktop. XLS. é onde começamos o processo de criação dos nossos relatórios. Figura 1 . PDF. 2006).

Com o uso do XML. Dessa forma. por sua vez. ele precisa passar por uma compilação que gerará um arquivo de formato . mas as tags do XML. que serão apresentadas na Tabela 5. 2006). o código Java ali contido será verificado e compilado neste processo. As etapas de geração de relatório são representadas utilizando diferentes objetos do JasperReports. obedecem a um padrão de estrutura e vocabulário com suas restrições. Objeto final. Na introdução da aula falamos que o processo de criação de relatórios consistia basicamente em definir um layout e filtrar (selecionar) os dados que irão fazer parte de seu conteúdo. iremos falar sobre isso agora.org/XML/. Objeto de compilação do JasperDesign. ou seja. objeto JasperDesign JasperReport JasperPrint Descrição Objeto de definição do relatório é criado a partir do template XML. Segue uma boa referência: http://www. Após a fase de definição dos elementos que compõem o layout do arquivo XML.dtd (HEFFELFINGER. Todos esses elementos contêm uma localização específica dentro do relatório. é criado a partir de um JasperReport e contém o relatório preenchido. Calma. Pensando sobre o assunto A XML é uma metalinguagem utilizada para intercâmbio de informações e criação de estruturas de arquivos. imagens e textos padronizados estaticamente e/ou principalmente dinamicamente.aUla 6 • PROgRaMaçãO Você deve estar se perguntando: “Qual o objetivo do arquivo XML?”.1. Tabela 5.w3. sugerimos a leitura de obras relacionadas ao assunto e que colaborem com o seu aprendizado. é criado após o processo de compilação e verificação do layout do relatório. Pois bem! O arquivo XML é quem vai definir tanto o layout quanto a localização e os nomes dos campos dos dados a serem preenchidos. Este processo se dá por meio das tags. cujos valores são declarados em um arquivo chamado jasperreports. não as tags de Java.jasper. que. através dos campos definidos para tal fim. tendo o seu conteúdo buscado em uma base de dados. o layout poderá ser definido com formas geométricas.1 – Objetos do JasperReports para criação de relatórios Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 73 .

fazendo com que o relatório seja preenchido. conforme apresentado na 3ª aula. parâmetros e expressões. Na maioria esmagadora das vezes. utilizamos como padrão a linguagem SQL. no arquivo XML. podem ser recuperados de arquivos XML. devemos definir. conforme foi visto na aula 4. As variáveis podem referenciar. como segue abaixo: ..lang.. também. mas.2 dados.1. Os campos (field) servem para entrada direta de dados no relatório. Outro ponto forte do JasperReports é o suporte a muitos tipos de fonte de dados (datasources). Quando queremos recuperar os dados de um SGBD relacional. utilizamos as variáveis (variable) e através delas podemos definir apenas uma expressão que será repetida freqüentemente e. Para mapearmos esse dado. a alma do conteúdo Nesta parte. Parâmetros e Expressões Dando seqüência ao conteúdo. O responsável por isso é a interface JRDataSource.. no decorrer do design do relatório. 2006). quando este for à fonte de dados. um campo com o nome ‘matricula’..1. <field name=“Matricula” class=“java. tipos de cálculos como 74 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . O ResultSet deve conter todas as colunas que serão mapeadas para seus campos correspondentes no relatório. que será lido pelas classes do Jasper. esses dados são recuperados de algum SGBD (Sistema Gerenciador de Banco de Dados). pegaremos os dados da coluna ‘Matricula’ com o tipo ‘Integer’ de uma tabela ‘aluno’. a coluna referenciada deve conter o mesmo nome do campo do relatório (HEFFELFINGER. para realizar e retornar os dados da consulta. internamente. JRResultSetDataSource é uma implementação padrão para objetos ResultSet para a interface JRDataSource (HEFFELFINGER.Integer”/> . 6. pessoal. cujo resultado irá gerar um objeto ResultSet. variáveis. 2006). para a geração de relatórios. trataremos do preenchimento com os dados necessários para a criação do conteúdo do relatório. Variáveis.3 Campos. Podemos inserir o código de consulta SQL ao código do XML ou utilizar uma classe Java já definida para esse fim. Como exemplo. falaremos sobre o que são os campos. quando se fizer necessário.aUla 6 • PROgRaMaçãO 6. Para a simplificação do projeto do relatório.

Quando não podemos encontrar os dados na fonte de dados que estamos usando para o preenchimento do relatório.2 – Níveis de reinicialização de variáveis (FURUTANI.. níveis None Report Page Column Group Default Descrição Este nível indica que a variável nunca é inicializada com o valor inicial da expressão. poderíamos utilizar as variáveis para realizar o cálculo da média das notas dos alunos como é demonstrado abaixo.Double” calculation= “Average”> <variable expression> ${Nota} </variable expression> </variable> . pois. existem vários níveis de reinicialização.. Este nível indica que a variável será inicializada no início de cada página do relatório.lang. <variable name=“ValorMedia” class=“java. COLUMN_COUNT. ela apenas guarda o valor obtido pela expressão principal. A ordem de declaração de variáveis no relatório tem muita importância. Para isso. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 75 . 2007) A ferramenta também oferece variáveis pré-definidas para uso nas expressões regulares. sum (realiza a soma de itens). Este nível indica que a variável será inicializada no início de cada coluna. sendo elas: PAGE_NUMBER. average (realiza a média aritmética de itens) entre outros. usamos os parâmetros (parameter) para nos auxiliar nesse objetivo. Seguindo o exemplo anterior. desde que elas tenham sido pré-definidas. em uma expressão. . GroupName_COUNT. Este nível indica que a variável será inicializada quando o grupo especificado pelo atributo de resetGroup for modificado. Quando usamos variáveis para a realização de cálculos. Este nível indica que a variável somente será inicializada no inicio do relatório e terá seu valor acumulado até o término do mesmo.aUla 6 • PROgRaMaçãO count (realiza uma contagem de itens). Tabela 5. assim temos. podemos definir quando elas devem ser reinicializadas.. uma variável pode referenciar outras variáveis. REPORT_ COUNT. COLUMN_NUMBER.2. PAGE_COUNT.. O valor padrão do nível é Report. que são apresentadas na Tabela 5.

. tendo como exemplo. contêm em sua sintaxe campos. por motivos de melhor organização e definição de seu design.put( “Aluno”. conforme é demonstrado a seguir. pois é ela quem representa a estrutura visual do documento gerado. normalmente. variáveis e parâmetros de relatório.1. para obtermos dados em bases de dados.. columnFoter.. daí a necessidade de ferramentas que auxiliem na criação de layout dos relatórios. detail..4 layout . param.format($F{DataVencimento}) + “. Favor passar na secretaria.. O layout do JasperReports. <parameter name=“Titulo” class= “java. pageHeader..lang.. ..... . utilizamos as expressões (expression) e essas expressões são feitas em código Java e. “Vinny Coelho Frota” ). 2007).String”/> . Assim. . através da classe HashMap. está dividido em algumas áreas pré-definidas que chamamos de seções. pageFooter. 6. Porém. que freqüentemente são usados. Map param = new HashMap( ). columnHeader. são elas: title. veja este exemplo.aUla 6 • PROgRaMaçãO ... a criação de relatórios diretamente em XML não é uma tarefa simples e fácil.” </textFieldExpression> . SELECT * FROM aluno WHERE matricula=$P{Matricula} . via código Java. Para podermos especificar o conteúdo de campos de texto. os dados contidos no relatório serão apenas aluno cuja matrícula foi passada por parâmetro. 76 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . summary (FURUTANI.(a) ” + $F{Aluno} + “ seu pagamento está em atraso no valor de: R$ “ + $V{ValorTotalDevedor} + “ referente à data de vencimento: “ + (new SimpleDateFormat(“dd/MM/yyyy”)). A definição da posição do conteúdo do relatório é essencial para a criação do mesmo. Então passados... como resultado desta consulta. Outra forma muito importante de utilização de parâmetros é no uso do SQL do relatório.. groupHeader. groupFooter. <textFieldExpression> “Sr.

e a segunda um executável.aUla 6 • PROgRaMaçãO 6. uma vez que o iReport consiste em um programa Java. é necessário que estejam definas as variáveis de ambiente.org/sf/projects/ireport.Tela inicial do iReport Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 77 . reune todos os recursos da biblioteca Jasper para a criação de relatórios apresentados até aqui. Para tanto. Uma vez que todo o processo de instalação tenha acontecido da maneira desejada. O iReport está disponível para download gratuitamente na internet. Pensando sobre o assunto Existem diversas publicações que auxiliam o processo de instalação do iReport disponíveis na WEB.2 ireport O iReport. Figura 2 . Um detalhe que dever ser citado é que. uma ferramenta que automatiza e torna mais intuitiva a criação dos layouts dos relatórios. baixe o arquivo que mais lhe convier no endereço: http://www. Constituído de ambiemte gráfico. assim como para o funcionamento de nossos exemplos em Java. auxiliando na construção de layouts mais elaborados e de maneira rápida. Este é disponibilizado de duas formas: a primeira consiste em um arquivo para descompactação. pois evita que o usuário perca tempo escrevendo linhas de código em XML.jasperforge. teremos como resultado da execução do iReport a tela apresentada na Figura 2. mas não nos apegaremos aos detalhes de instalação dessa ferramenta.

para obter mais conhecimento dos elementos que a compõe. iremos colocar a mão na massa. essas mudanças devem ser refletidas. XML DataSource. no exemplo. e preencha sua tabela com dados. Certo. definir qual mais satisfaz as necessidades de seu projeto. execute ou crie uma tabela com a estrutura: ‘nome’ e ‘descricao’. 78 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . com a utilização do iReport. significativamente. 2006). Agora. adapte ao banco de dados que melhor lhe convier.1 fonte de dados Suportadas O iReport suporta diversos tipos de conexões para a recuperação de dados para a construção de relatórios: conexões ODBC. JavaBeans Set DataSource. JFreeStudio e FOP. JFreeReports.aUla 6 • PROgRaMaçãO Familiarize-se com todos os componentes desta ferramenta e. ela ainda traz diversos atalhos para testes. seu relatório com o layout.3 Um estudo de caso Agora. crie. 6. mas estas não fazem parte do escopo desta aula. pessoal: vamos criar um relatório que nossa aplicação irá executar. conforme é demonstrado na Figura 3. familiarize-se com a ferramenta. JDBC. se necessário. acrescente novos elementos como Fields e Texts. construa seu layout conforme a necessidade. Com isso. assim. 6.2. a ferramenta acelera. Sugerimos leituras complementares para conhecer essas fontes de dados (HEFFELFINGER. Apenas certifique-se de que não ocorreram erros na criação. OracleReports. Saiba mais Existem outras ferramentas com o mesmo objetivo do iReport. Para tanto. Custom DataSource e Empty DataSource. a fim de se ter uma visão geral destas e. Para tanto. Segue uma lista delas: iText. como compilação e visualização de como está ficando o relatório a ser gerado. Todo código XML é gerado automaticamente pela ferramenta. o processo de desenvolvimento do relatório. com isto. Fica aqui a sugestão para que sejam realizados estudos correlatos. porém note que.

Porém. setLocation(300. public class Report extends Frame implements ActionListener{ public Report(){ super(“Relatórios”).addActionListener(this).sf. Porém.jrxml e verifique que na pasta onde foi salvo o arquivo jrxml foi criado também um arquivo jasper. } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 79 .aUla 6 • PROgRaMaçãO Figura 3 .*.jasper. um arquivo do iReport. como o iReport consiste em um framework externo devemos ter acrescentado as bilbiotecas ao repositório java. iremos criar nosso programa Java que irá realizar a chamada a nosso relatório. Button botao = new Button(“Relatório”). import java.*.jasperreports. para isso. consiste em uma arquivo XML.java import java. Certo.jrxml. com a extensão . //Report.mysql.awt. Agora. 300).*. setLayout(new FlowLayout()).event.awt.sf. add(botao). botao. import java.*. addWindowListener(new Eventos()). import net. setSize(200. import com.*.jrxml. no próprio iReport compile o programa . import net.util. Isto já deve ter sido realizado no processo de instalação do iReport.engine. nosso programa Java utiliza o arquivo . quando salvo.view. Então transcreva o código abaixo e execute-o.Criação do layout do relatório Conforme já mencionado. 60).jdbc.sql.*.*. import java. Este deve ser nomeado como curso. Então.jasperreports.

jasper”. } catch (Exception e1) { e1.pdf”.printStackTrace(). e esperamos que você já saiba criar suas aplicações gráficas com relatórios. // HashMap de parametros utilizados no relatório. // Preenche o relatorio e o salva diretamente em arquivo PDF. // Preenche o relatório com os dados. SQLException { . através do botão “Relatório”. /* Visualiza o relatório em formato PDF */ JasperViewer. String query = “select * from Curso”. } // método que cria o relatório public void geraRelatorio() throws JRException. Sempre instanciados Map parameters = new HashMap(). } // listener que reage ao evento public void actionPerformed(ActionEvent e) { try { geraRelatorio(). Statement stm = (Statement) con.createStatement(). // implementação da interface JRDataSource para DataSource ResultSet JRResultSetDataSource jrRS = new JRResultSetDataSource(rs). ResultSet rs = (ResultSet) stm. false).. programa. parameters. } } } // Eventos da Janela class Eventos extends WindowAdapter{ .setVisible(true). utilize o iReport e crie seus novos relatórios para seus programas.executeQuery(query). Assim. Adapte o exemplo para novos exemplos. 80 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . Gera o arquivo curso. Exception { Connection con = getConnection(). } Se tudo correu como esperado. return con. realizamos a execução de nosso relatório.fillReportToFile( “curso. JasperRunManager. parameters. jrRS ).printStackTrace(). } catch (JRException e1) { e1.jasper”.aUla 6 • PROgRaMaçãO // Cria método de conexão com o banco de dados // da mesma forma como apresentado na aula 4 private static Connection getConnection() throws ClassNotFoundException.viewReport( “curso. jrRS)..runReportToPdfFile(“curso. } // método de execução public static void main(String[] args) { Report programa = new Report().. finalizamos nossa aula 6.jrprint JasperFillManager..

2006. Como criar relatórios Java para Web com JasperReports e iReport. Constituido de ambiemte gráfico. Porque o arquivo XML é tão importante para a criação de relatórios? 2. foram apresentados os conceitos fundamentais do JasperReports para a elaboração e criação de relatórios práticos de aplicações Java e a interação do JasperReports com o iReport. 2007. David. as características do iReport é ser uma ferramenta open-source que automatiza a criação dos arquivos XML e torna mais intuitivo a criação dos layouts dos relatórios. sabemos que o arquivo XML é o responsável por gerenciar os dados que serão exibidos no relatório a ser gerado. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 81 . Quais as principais características do iReport? Explique. Finalizando com os conceitos da ferramenta gráfica open-source iReport e suas fontes de dados suportadas. Todos esses elementos terão uma localização específica dentro do relatório.pdf> Acessado em 12 out. Além disso. HEFFELFINGER. referências FURUTANI.furutani. Foram expostôs as principais características de como criar relatórios usando XML e recuperar dados de SGBDs. para a criação de relatórios mais elaborados e de forma rápida. o layout poderá ser definido com formas geométricas. para geração dos relatórios. Comentário das atividades Na atividade 1. outro aspecto fundamental do Reports foi a ênfase na criação do layout dos relatórios e seus tipos.aUla 6 • PROgRaMaçãO Síntese da aula Nesta aula. Agosto.br/tutoriais/Mini-Tutorial_ Relatorios_Java_JasperReports_e_iReport. Atividades 1. Roberto J. Com o uso do XML. pois evita que o usuário perca tempo escrevendo inúmeras linhas de código em XML. imagens e textos. reune todos os recursos da biblioteca Jasper. <http://www. Na atividade 2. através dos campos mapeados a uma base de dados ou datasource.eti. JasperReports for Java Developers.

aUla 6 • PROgRaMaçãO na próxima aula Continuaremos com a apresentação dos fundamentos do paradigma de Programação Orientada a Objetos. mencionando os conceitos de métodos construtores e encapsulamento. Anotações 82 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .

uma pequena aplicação. visando a demonstrar que são de fundamental importância. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 83 . ao final desta aula. introdução Iremos.Aula 7 Estudo de Caso Objetivo Esperamos que. utilizando um banco de dados. criando. você seja capaz de: • utilizar todos os conceitos aprendidos durante toda a disciplina. criar um estudo de caso. Pré-requisitos Para esta aula é necessário que os conceitos apresentados no decorrer desta disciplina tenham sido assimilados. assim. no qual utilizaremos todos os conceitos apresentados em nossas aulas. e que estejam muito claro o conceito e orientação a objetos que foi visto na disciplina de Programação anterior: eles serão utilizados na construção do estudo de caso. para construção de aplicações por um programador Java. agora. relacionados ao processo de construção de aplicações visuais com a linguagem Java.

Assim.aUla 7 • PROgRaMaçãO 7. defina. no caso.awt. exec. Prosseguindo com nosso exemplo. 600). public class AppCadastro extends Frame{ //método construtor public AppCadastro(){ super(“Aplicação de cadastro”). salve-o e execute. devemos definir uma tela inicial com um menu. } //método executável public static void main(String[] args) { AppCadastro exec = new AppCadastro(). Então vamos ao que interessa. em nosso método executável instanciamos um objeto da classe que estamos construindo. utilizaremos a estrutura de banco de dados criada na aula 6. no qual deverá ser oferecida a possibilidade de abrir a tela de cadastro ou mesmo sair. 84 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . //AppCadastro. } } Note que. iremos agora utilizar todos os conceitos apresentados. transcreva o código a seguir. também definiremos o método executável. Para tanto. conseguimos visualizar os resultados de nossa aplicação. 100). Para isso. iremos acionar um relatório através de nossa aplicação. setLocation(200. Além disso. com nome e descrição. Além disso. vamos criar uma aplicação que interage com um banco de dados. setSize(600.1 Definição do problema Como estamos no final de nossa disciplina.java import java. no mesmo arquivo. 7. na construção de relatórios. que serão acionados com os eventos sobre esta. será criada uma janela na qual iremos definir através de seu método construtor o tamanho e a localização da tela.setVisible(true). uma nova classe que será responsável por definir as funcionalidades da janela. Dessa forma.Frame. Nosso estudo de caso consiste na criação de uma pequena aplicação para cadastro de cursos de uma universidade. bem como relembrar outros que nos foram colocados na aula passada. no caso o listener.2 implementação do estudo de caso Iniciaremos nosso estudo de caso criando uma classe que deriva da classe Frame. A tela de cadastro deve possibilitar que diversos cursos sejam acrescentados. então.

Assim. public class AppCadastro extends Frame{ . setMenuBar(barraMenu). sendo que é declarado apenas o método que utilizaremos. um listener. Porém.add(itemSair)..*. } .aUla 7 • PROgRaMaçãO //AppCadastro. } class EvtJanela extends WindowAdapter{ public void windowClosing(WindowEvent e){ System. Note que. para que sejam executadas as funcionalidades de acionar a tela de cadastro e sair.exit(0)..java import java.. Neste. acrescente o próximo código ao método construtor. é necessário que este evento seja associado à janela.. transcreva as linhas de código a seguir no método construtor. import java. como nos exemplos anteriores. . EvtJanela evt = new EvtJanela(). ao final da apresentada no exemplo anterior..add(itemCadastro). instanciamos. MenuBar barraMenu = new MenuBar().*.. fazendo com que obrigatoriamente tivéssemos de declarar sete métodos. MenuItem itemCadastro = new MenuItem(“Cadastro de Curso”).... public class AppCadastro extends Frame{ //método construtor public AppCadastro(){ ..awt.. } .event. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 85 . . derivamos da classe WindowAdapter. menuArquivo. menuArquivo. ao invés de implementarmos a interface WindowListener.. addWindowListener(evt). } .. para tanto. no caso um escutador que é o responsável por reagir à interação dos usuários com a janela.. } } Verifique que apenas foram adicionados um import e a nova classe. } ... Menu menuArquivo = new Menu(“Arquivo”). sendo que neste definiremos dois itens. MenuItem itemSair = new MenuItem(“Sair”). Vamos agora definir nosso menu. barraMenu.add(menuArquivo)..awt.. public class AppCadastro extends Frame{ //método construtor public AppCadastro(){ .

.. Então vamos a eles..control). } if(item.addActionListener(this).control). public class AppCadastro extends Frame implements ActionListener{ Panel geral. if(item.. pilha. itemCadastro. geral = new Panel(). public void actionPerformed(ActionEvent e) { .setBackground(SystemColor. public class AppCadastro extends Frame implements ActionListener{ //método construtor public AppCadastro(){ . public void actionPerformed(ActionEvent e) { if (e. Panel painelCadastro = new Panel(). geral. precisamos definir o listener de nosso menu.. 86 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS ...”J1”). add(“Center”. Então vamos criar três painéis que serão nossas telas. geral.. devemos mencionar que nossa classe AppCadastro implementa a interface ActionListener e. termos o efeito de novas janelas que serão trabalhadas.add(painelApp. Para tanto.next(geral). .”J2”). } .aUla 7 • PROgRaMaçãO Agora. painelCadastro.geral).exit(0). sendo que utilizaremos o gerenciador de layout CardLayout..equals(“Novo de Curso”)){ CardLayout pilha = (CardLayout) geral.getLabel().addActionListener(this)..getSource().. Continuamos nosso estudo de caso definindo os containers de componentes de nossa aplicação. painelApp..getSource() instanceof MenuItem) { MenuItem item = (MenuItem) e. para assim. } . com isso nos obriga a também implementar o método ActionPerformed.. Panel painelApp = new Panel().getLabel().add(painelCadastro.setBackground(SystemColor.. if(item. //método construtor public AppCadastro(){ .equals(“Sair”)){ System...setLayout(new CardLayout()).equals(“Novo de Curso”)){ } } } } ..getLayout(). itemSair. .. geral.getLabel(). } … } } .

painelButton.. painelButton. Deve-se. Button limpar = new Button(“Limpar”). por meio do qual conseguimos acessar os demais. public class AppCadastro extends Frame{ . no caso outros componentes para nosso cadastro. Label result = new Label(). painelCadastro. painelCadastro.. podem ser instanciadas diversas classes que derivam da classe Frame.add(descricao). painelCadastro..add(nome). e realizando assim a chamada.add(limpar). String[] colunas = {“NOME”. } .add(sair).. ao final o método construtor adicione as linhas de código a seguir descritas. através do método setVisible(). //método construtor public AppCadastro(){ . Object[][] conteudo = {{“”.*. Button salvar = new Button(“Salvar”). isso com a utilização do método setEnable(). painelCadastro.. import javax. Button report = new Button(“Relatório”).. painelButton. painelCadastro. informar que a janela que está realizando a chamada não é mais a janela ativa. painelCadastro. TextField descricao = new TextField(68). JTable tabela = new JTable(10. TextField nome = new TextField(71).add(new Label(“Nome:”)). painelButton. . .setPreferredScrollableViewportSize(new Dimension(560. O componente painelCadastro consiste em nosso container que possuirá todos os demais campos. antes de invocar novas janelas.2).aUla 7 • PROgRaMaçãO Criamos três painéis sendo que um consiste no mestre. criando como mencionado o aspecto de janelas.swing.add(new Label(“Descrição:”)). Então.add(new JScrollPane(tabela)). Porém.. painelCadastro. “DESCRIÇÃO”}.add(salvar). painelButton).. tabela. } .. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 87 . 120)).add(result). denominado geral.. Panel painelButton = new Panel(). Pensando sobre o assunto O efeito de janelas criado pela utilização de painéis é muito útil para a construção de aplicações visuais..add(“South”.. “”}}.setLayout(new FlowLayout()). Button sair = new Button(“Sair”).

porém. try { Class.mysql.sql. Pensando sobre o assunto Geralmente é necessário que realizemos o import dos drivers de conexão para um determinado banco de dados. Os SGBDs fornecem estas APIs junto com sua distribuição.*. import com. } catch (InstantiationException e) { e.. adapte a string de conexão para que seu banco de dados. public class AppCadastro extends Frame implements ActionListener{ . inicialmente iremos criar nosso método que irá realizar a conexão com o banco de dados. } public Connection connection() { Connection connection = null.jdbc. Por exemplo. public void actionPerformed(ActionEvent e) { . } return connection.Connection”. de forma que este seja acessado. import java..getConnection(con).jdbc. realizamos o import da classe “com. consulte o manual de seu banco de dados e verifique o driver para conexão Java. Dessa forma. } } . possibilitando a inserção e consulta a seu seus dados.printStackTrace()... 88 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .. } catch (IllegalAccessException e) { e.newInstance(). ainda temos de adicionar as funcionalidades aos eventos que nossos botões reagirão. } catch (ClassNotFoundException e) { e.. } catch (SQLException e) { e...forName(“com.Connection.jdbc. temos nosso layout de nossa aplicação concluído.printStackTrace(). abrindo espaço para que possamos criar outros métodos para inserção de novos elementos. String con = “jdbc:mysql://localhost:3306/aula07?user=root&password=root”. Note que. utilizamos o driver jdbc para o banco de dados MySql.printStackTrace(). } try { connection = (Connection) DriverManager.aUla 7 • PROgRaMaçãO Com isso. Desta forma.Driver”).mysql.. porém.printStackTrace().mysql. . em nosso método de conexão. ..

id = id. } public void setId(Integer id) { this. com seus atributos e métodos. } class EvtJanela extends WindowAdapter{ .. public class AppCadastro extends Frame{ . transcreva o código abaixo para sua classe e execute-a. no caso a classe Curso. } public String getNome() { return nome. Com isso. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 89 . private String nome = new String(). Note que são disponibilizados os métodos get e set garantindo que os atributos não são acessados diretamente. criaremos nosso “modelo” de um curso. } class Curso { private Integer id = new Integer(0). //AppCadastro.nome = nome. private String descricao = new String().. Assim. } public void setNome(String nome) { this..java . nos restara apenas fazer com que estes métodos sejam acionados por eventos em nossos botões. } public void setDescricao(String descricao) { this...descricao = descricao. } public Integer getId() { return id. } } Nosso próximo passo consiste na criação dos métodos que serão responsáveis por incluir e consultar dados em nosso banco de dados.. private public String getDescricao() { return descricao. Então. transcreva a classe Curso para dentro do arquivo.aUla 7 • PROgRaMaçãO Levando a tona todo o conceito de orientação a objetos.

statement. import com..close(). Curso c = new Curso(). connection(). String consulta = “Select * from Curso”. public void incluir(){ try { Statement statement = connection(). } public void limpar(){ nome. } return resultadoBanco. result. import java. descricao. evita um processo trabalhoso manual e.setText(“OCORRERAM ERROS NA CONSULTA!”).jdbc. \’”+c.jdbc.setText(“OCORRERAM ERROS NA INSEÇÃO!”).sql.ResultSet.executeQuery(). } catch (SQLException e) { e. surpresas na construção dos relatórios. } } Nos resta.. . ainda. com isso. Vamos ao que interessa: copie o código a seguir. } } public ResultSet consultar(){ ResultSet resultadoBanco = null. import com. é interessante que seja utilizada uma ferramenta para criação dos relatórios.printStackTrace(). conforme exemplificado. 90 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . public class AppCadastro extends Frame{ . e assim temos somente que criar um método que execute a invocação de nosso relatório.. import com..mysql. Pensando sobre o assunto Conforme exemplificado na aula 6.Connection.. Utilizaremos o arquivo jasper desenvolvido nesta aula.setText(“CURSO INSERIDO COM SUCESSO!”). gerar nosso relatório.Statement. result.getDescricao()+”\’)”. além de acelerar todo o processo de desenvolvimento. \’”+c.jdbc. resultadoBanco = comandoBanco.java .*.aUla 7 • PROgRaMaçãO //AppCadastro.executeUpdate(sql). na classe AppCadastro.setText(“”).mysql. String sql = “Insert into Curso VALUES (null.. } catch (Exception Erro) { result. try { PreparedStatement comandoBanco = connection(). pois.mysql.prepareStatement(consulta).getNome()+ “\’.createStatement().setText(“”). conforme exemplificado na aula 6.

. } catch (JRException e) { e.pdf”). Como mencionado. JasperPrint print.JASPER_PRINT..engine. net.printStackTrace(). JRResultSetDataSource jrRS = new JRResultSetDataSource(rs). fos). } public void gerarReport() { try { Connection con = connection()..jasperreports. Para que nosso código funcione.view. Statement stm = (Statement) con.sf..jasperreports. net. certifique-se que o arquivo Curso. } } } . jrpdf. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 91 .*. jrpdf..close(). jrpdf.executeQuery(query).sf.OUTPUT_STREAM. class AppCadastro extends Frame implements ActionListener{ Panel geral. print).export. jrRS). } catch (SQLException e) { e.*. //método construtor public AppCadastro(){ .\\reports\\Curso.printStackTrace(). public void actionPerformed(ActionEvent e) { .fillReport(“.viewReport(print). fos. } . assim como nos exemplos. OutputStream fos = null.. Então.exportReport(). String query = “Select * from Curso”.. ResultSet rs = (ResultSet) stm..engine. net. copie o código e verifique o resultado. JasperViewer.. null.createStatement().jasperreports. jasper está no “report” dentro do diretório em que nossa classe AppCadastro está.*.io.aUla 7 • PROgRaMaçãO .. } catch (IOException e) { e.*.setParameter(JRExporterParameter. executem nossos métodos. JRExporter jrpdf = new JRPdfExporter().\\reports\\Curso. fos = new FileOutputStream(“. e apresentem os resultados na tabela.setParameter(JRExporterParameter.sf. import import import import public java.jasper”. print = JasperFillManager. iremos fazer com que nossos botões.printStackTrace(). assim que acionados.

No quadro a seguir.jdbc. salvar.ResultSet..mysql.addActionListener(this).setNome(nome.exit(0).sql.addActionListener(this). 92 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS .addActionListener(this).*. import javax..jdbc.sf. import net. sair.Statement.event..getSource()==sair){ System.setDescricao(descricao.java import java.java //AppCadastro. incluir().*.getText()). //método construtor public AppCadastro(){ . import net.jasperreports.getSource()==salvar){ c..awt. auxiliando numa visão mais macro do exemplo apresentado. } .. } if(e. import com.mysql. AppCadastro. } } } .jasperreports. if(e.*.*. limpar.jasperreports. } if(e. import java.getSource()==report){ gerarReport(). import net. limpar().getSource()==limpar){ limpar()..jdbc. import com. public class AppCadastro extends Frame implements ActionListener{ Panel geral. report..io.*.mysql..aUla 7 • PROgRaMaçãO .getText()). Chegamos ao fim de nosso estudo de caso. } if(e.Connection.addActionListener(this). import com.*.engine.sf.export.swing. c.*.awt. public void actionPerformed(ActionEvent e) { .. é apresentado todo o código de nossa classe.view. import java..*. import java.sf.engine.

itemCadastro. painelCadastro.add(report). Panel painelCadastro = new Panel().addActionListener(this). Menu menuArquivo = new Menu(“Arquivo”).setLayout(new CardLayout()).VK_R)). EvtJanela evt = new EvtJanela().addActionListener(this). setMenuBar(barraMenu). Label result = new Label(). Button sair = new Button(“Sair”). sair.addActionListener(this).add(menuArquivo). painelButton.add(new Label(“Descrição:”)). MenuBar barraMenu = new MenuBar().addActionListener(this).setLayout(new FlowLayout()).addActionListener(this). Button salvar = new Button(“Salvar”).add(new Label(“Nome:”)). painelCadastro. painelButton.add(salvar). painelCadastro. 100).control).geral).addActionListener(this).120)).add(new JScrollPane(tabela)).add(painelCadastro.add(descricao).add(itemCadastro).add(“South”. public AppCadastro(){ super(“Aplicação de cadastro”). geral. MenuItem itemCadastro = new MenuItem(“Novo de Curso”).add(nome). Panel painelApp = new Panel().aUla 7 • PROgRaMaçãO public class AppCadastro extends Frame implements ActionListener{ TextField nome = new TextField(71).setBackground(SystemColor. JTable tabela = new JTable(conteudo. MenuItem itemSair = new MenuItem(“Sair”. new MenuShortcut(KeyEvent. Button report = new Button(“Relatório”). Button limpar = new Button(“Limpar”).add(limpar). “DESCRIÇÃO”}. painelApp. Panel painelButton = new Panel(). geral. Curso c = new Curso().add(sair). painelButton). Panel geral. painelButton. menuArquivo. salvar.add(painelApp. setLocation(200. colunas). geral = new Panel(). geral. limpar. TextField descricao = new TextField(68). setSize(600.”J2”).setPreferredScrollableViewportSize(new Dimension(560. add(“Center”. painelCadastro.”J1”). painelButton.add(itemSair). } Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 93 . itemSair. painelCadastro.setBackground(SystemColor. painelCadastro. painelCadastro. painelCadastro. painelButton. tabela. 285). Object[][] conteudo = {{“”. addWindowListener(evt). “”}}.add(result). barraMenu. String[] colunas = {“NOME”. menuArquivo.control). report.

aUla 7 • PROgRaMaçãO

public static void main(String[] args) { AppCadastro exec = new AppCadastro(); exec.setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() instanceof MenuItem) { MenuItem item = (MenuItem) e.getSource(); if(item.getLabel().equals(“Sair”)){ System.exit(0); } if(item.getLabel().equals(“Novo de Curso”)){ CardLayout pilha = CardLayout) geral.getLayout(); pilha.next(geral); } } if(e.getSource()==salvar){ c.setNome(nome.getText()); c.setDescricao(descricao.getText()); incluir(); limpar(); } if(e.getSource()==limpar){ limpar(); } if(e.getSource()==report){ gerarReport(); } if(e.getSource()==sair){ System.exit(0); } } public void gerarReport() { try { Connection con = connection(); Statement stm = (Statement) con.createStatement(); String query = “Select * from Curso”; ResultSet rs = (ResultSet) stm.executeQuery(query); JRResultSetDataSource jrRS = new JRResultSetDataSource(rs); JRExporter jrpdf = new JRPdfExporter(); JasperPrint print; OutputStream fos = null; print = JasperFillManager.fillReport (“.\\reports\\Curso.jasper”, null, jrRS); fos = new FileOutputStream(“.\\reports\\Curso.pdf”); jrpdf.setParameter(JRExporterParameter.OUTPUT_STREAM,fos); jrpdf.setParameter(JRExporterParameter.JASPER_PRINT,print); jrpdf.exportReport(); fos.close(); JasperViewer.viewReport(print); } catch (IOException e) { e.printStackTrace(); } catch (JRException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }

94

3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS

aUla 7 • PROgRaMaçãO

public void incluir(){ try { Statement statement = Statement) connection().createStatement(); String sql = “Insert into Curso VALUES (null, \’”+ c.getNome()+”\’, \’”+ c.getDescricao()+”\’)”; statement.executeUpdate(sql); result.setText(“CURSO INSERIDO COM SUCESSO!”); } catch (SQLException e) { e.printStackTrace(); result.setText(“OCORRERAM ERROS NA INSEÇÃO!”); } } public void consultar(){ ResultSet resultadoBanco = null; String consulta = “Select * from Curso”; try { PreparedStatement comandoBanco = connection().prepareStatement(consulta); resultadoBanco = (ResultSet)comandoBanco.executeQuery(); connection().close(); } catch (Exception Erro) { result.setText(“OCORRERAM ERROS NA CONSULTA!”); } } public void limpar(){ nome.setText(“”); descricao.setText(“”); } public Connection connection() { Connection connection = null; try { Class.forName(“com.mysql.jdbc.Driver”).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { connection = (Connection) DriverManager.getConnection (“jdbc:mysql://localhost:3306/universidade?user=root&password= root”); } catch (SQLException e) { e.printStackTrace(); } return connection; } } class EvtJanela extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0); } }

Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO

95

aUla 7 • PROgRaMaçãO

class Curso { Integer id = new Integer(0); String nome = new String(); String descricao = new String(); public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

Se tudo ocorreu como o esperado, teremos, como resultado final, nossa aplicação, na qual poderemos realizar um novo cadastro, bem como gerar o relatório destes cadastros. Assim finalizamos nossa 7ª aula e logo nossa disciplina. Esperamos que todos tenham tirado o máximo de proveito e que agora todos sejam capazes de criar programas visuais, utilizando a biblioteca AWT, bem como gerar relatórios. Boa sorte a todos!

Síntese da aula
Nesta aula, aplicamos todos os conceitos e componentes apresentados durante esta aula, além de utilizar o paradigma de orientação a objetos, criando um estudo de caso, no qual pode ser realizado o cadastro em um banco de dados, geração de relatório e trabalhar com diversas janelas e componentes, fixando todo o conhecimento adquirido e alicerçando a idéia geral, para que novas aplicações possam ser construídas.

96

3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS

é possível criar diversas janelas para aplicações visuais. e com o auxilio de um listener reagir a eventos e efetuar a mudança entre os painéis com a invocação do método next() ou after(). Harvey M. referente aos componentes gráficos apresentados em nosso estudo de caso. Comentário das atividades Na atividade 1. É válido relembrar que pode se trabalhar com outras janelas. finalmente. 6 ed.aUla 7 • PROgRaMaçãO Atividades 1. referências DEITEL. Assinale a alternativa incorreta. c) O componente Button é o responsável por executar as funcionalidades do sistema. uma vez que por meio da classe Frame podemos criar diversas janelas. por meio da instanciação de diversas classes derivadas da classe Frame. 2005. São Paulo: Érica. você acertou. parabéns. é apenas utilizado para passar ao sistema operacional uma mensagem de que um evento foi realizado. sendo que todo o comportamento deve ser implementado nos métodos oriundo dos listeners que são implementados. Renato Rodrigues. Univali/UniTinS • SUPERiOR DE TEcnOlOgia • 3º PERÍODO 97 . Desenvolva aplicativos com Java 2. E. Conforme utilizado em nosso estudo de caso. No caso o botão. é possível se realizar todo o processo de navegação entre painéis. O (b) também está correto. Java: como programar. 2005. d) As classes TextField e TextArea permitem o trabalho com textos. b) Por meio da classe Frame. o item (d) está correto. uma vez que a classe Panel deriva da classe Container. se você respondeu o item (c). FILHO. Na atividade 2. como pode ser realizado o processo de navegação entre painéis em uma aplicação visual Java? 2. utilizando o gerenciador de layout CardLayout. O item (a) está correto. a) A classe Panel consiste em uma classe do tipo container. não executar ou mesmo fazer a chamada a uma funcionalidade do sistema. São Paulo: Pearson Prentice Hall. já que ambos os componentes trabalham com textos.

ed. MANZANO. São Paulo: Érica. 2002. Roberto Affonso da. 2006. David. THOMPSON. Porto Alegre.. Java 2: programação de computadores. Java 2 & banco de dados. São Paulo: Érica. COSTA JR. 2006.aUla 7 • PROgRaMaçãO FLANAGAN. 5. Anotações 98 3º PERÍODO • SUPERiOR DE TEcnOlOgia • Univali/UniTinS . Bookman. Java: o guia essencial. José Augusto Navarro Garcia. Marco Aurélio.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->