linguagens de programaÇÃo ii - unisul - livro completo 2007
TRANSCRIPT
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
1/333
Universidade do Sul de Santa Catarina
Palhoa
UnisulVirtual
2007
Linguagens de Programao II
Disciplina na modalidade a distncia
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
2/333
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
3/333
Apresentao
Este livro didtico corresponde disciplina Linguagens de Programao II.
O material foi elaborado visando a uma aprendizagem autnoma, abordandocontedos especialmente selecionados e adotando uma linguagem que faciliteseu estudo a distncia.
Por falar em distncia, isso no significa que voc estar sozinho. Noesquea que sua caminhada nesta disciplina tambm ser acompanhadaconstantemente pelo Sistema Tutorial da UnisulVirtual. Entre em contatosempre que sentir necessidade, seja por correio postal, fax, telefone, e-mail ouEspao UnisulVirtual de Aprendizagem. Nossa equipe ter o maior prazerem atend-lo, pois sua aprendizagem nosso principal objetivo.
Bom estudo e sucesso!
Equipe UnisulVirtual.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
4/333
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
5/333
Andra Sabedra Bordin
Marcelo Medeiro
Andrik Dimitrii Braga de Albuquerque
Palhoa
UnisulVirtual
2007
Design instrucional
Flavia Lumi Matuzawa
Leandro Kingeski Pacheco
Linguagens de Programao II
Livro didtico2 Edio revista e atualizada
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
6/333
Copyright UnisulVirtual 2007
Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.
Ficha catalogrfca elaborada pela Biblioteca Universitria da Unisul
Crditos
Unisul - Universidade do Sul de Santa CatarinaUnisulVirtual - Educao Superior a Distncia
005.133B72 Bordin, Andra Sabedra
Linguagem de programao II : livro didtico / Andra Sabreda Bordin, MarceloMedeiro, Andrik Albuquerque ; design instrucional Flavia Lumi Matuzawa, Leandro
Kingeski Pacheco. - 2 ed. revista e atualizada - Palhoa : UnisulVirtual, 2007.334 p. : il. ; 28 cm.
Inclui bibliografia.
1. Linguagem de programao (Computadores). 2. Java (Linguagem deprogramao de computador). I. Medeiro, Marcelo. II. Albuquerque, Andrik.III. Matuzawa, Flavia Lumi. IV. Pacheco, Leandro Kingeski. V. Ttulo.
Campus UnisulVirtualRua Joo Pereira dos Santos, 303
Palhoa - SC - 88130-475
Fone/fax : (48) 3279-1541 e
3279-1542
E-mail: [email protected]
Site: www.virtual.unisul.br
Reitor Unisul
Gerson Luiz Joner da Silveira
Vice-Reitor e Pr-ReitorAcadmico
Sebastio Salsio Heerdt
Chefe de gabinete da Reitoria
Fabian Martins de Castro
Pr-Reitor Administrativo
Marcus Vincius Antoles da Silva
Ferreira
Campus SulDiretor: Valter Alves Schmitz Neto
Diretora adjunta: Alexandra Orsoni
Campus Norte
Diretor: Ailton Nazareno Soares
Diretora adjunta: Cibele Schuelter
Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara Roesler
Equipe UnisulVirtual
Administrao
Renato Andr LuzValmir Vencio Incio
BibliotecriaSoraya Arruda Waltrick
Coordenao dos Cursos
Adriano Srgio da Cunha
Ana Luisa Mlbert
Ana Paula Reusing Pacheco
Ctia Melissa S. Rodrigues (Auxiliar)
Charles Cesconetto
Diva Marlia Flemming
Itamar Pedro BevilaquaJanete Elza Felisbino
Jucimara Roesler
Lilian Cristina Pettres (Auxiliar)
Lauro Jos Ballock
Luiz Guilherme Buchmann
Figueiredo
Luiz Otvio Botelho Lento
Marcelo Cavalcanti
Mauri Luiz Heerdt
Mauro Faccioni Filho
Michelle Denise Durieux Lopes Destri
Moacir Heerdt
Nlio Herzmann
Onei Tadeu DutraPatrcia Alberton
Patrcia Pozza
Raulino Jac Brning
Rose Clr E. Beche
Design Grfico
Cristiano Neri Gonalves Ribeiro
(coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves TeixeiraRafael Pessi
Vilson Martins Filho
Equipe Didtico-PedaggicaAngelita Maral Flores
Carmen Maria Cipriani Pandini
Caroline Batista
Carolina Hoeller da Silva Boeing
Cristina Klipp de Oliveira
Daniela Erani Monteiro Will
Dnia Falco de Bittencourt
Enzo de Oliveira Moreira
Flvia Lumi Matuzawa
Karla Leonora Dahse NunesLeandro Kingeski Pacheco
Ligia Maria Soufen Tumolo
Mrcia Loch
Patrcia Meneghel
Silvana Denise Guimares
Tade-Ane de Amorim
Vanessa de Andrade Manuel
Vanessa Francine Corra
Viviane Bastos
Viviani Poyer
Logstica de EncontrosPresenciais
Marcia Luz de Oliveira(Coordenadora)
Aracelli Araldi
Graciele Marins Lindenmayr
Jos Carlos Teixeira
Letcia Cristina Barbosa
Knia Alexandra Costa Hermann
Priscila Santos Alves
Logstica de MateriaisJeferson Cassiano Almeida da Costa
(coordenador)
Eduardo Kraus
Monitoria e SuporteRafael da Cunha Lara (coordenador)
Adriana Silveira
Caroline Mendona
Dyego Rachadel
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni Barbieri
Gislane Frasson de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira CeleghinSimone Andra de Castilho
Vincius Maycot Serafim
Produo Industrial e Suporte
Arthur Emmanuel F. Silveira
(coordenador)
Francisco Asp
Projetos Corporativos
Diane Dal Mago
Vanderlei Brasil
Secretaria de Ensino a Distncia
Karine Augusta Zanoni(secretria de ensino)
Ana Paula Pereira
Djeime Sammer Bortolotti
Carla Cristina Sbardella
Grasiela Martins
James Marcel Silva Ribeiro
Lamuni Souza
Liana Pamplona
Maira Marina Martins Godinho
Marcelo Pereira
Marcos Alcides Medeiros Junior
Maria Isabel Aragon
Olavo Lajs
Priscilla Geovana PaganiSilvana Henrique Silva
Secretria ExecutivaViviane Schalata Martins
Tecnologia
Osmar de Oliveira Braz Jnior
(coordenador)
Ricardo Alexandre Bianchini
Rodrigo de Barcelos Martins
Edio Livro Didtico
Professor ConteudistaAndra Sabedra BordinMarcelo MedeiroAndrik Dimitrii Braga de Albuquerque
Design InstrucionalFlavia Lumi MatuzawaLeandro Kingeski Pacheco
Projeto Grfico e CapaEquipe UnisulVirtual
Diagramao
Rafael Pessi
Reviso OrtogrficaB2B
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
7/333
Sumrio
Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Palavras dos proessores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
UNIDADE 1 Introduo a GUI (Grafcal User Interace) . . . . . . . . . . . . . . . . . . 17
UNIDADE 2 Tratamento de Eventos em uma GUI . . . . . . . . . . . . . . . . . . . . . . .45UNIDADE 3 Componentes de uma GUI (JCheckBox, JRadioButton,
JComboBox e JList) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
UNIDADE 4 Trabalhando com Layoutde Componentes . . . . . . . . . . . . . . . 97
UNIDADE 5 Layout, JTabbedPane e componentes de Menu . . . . . . . . 121
UNIDADE 6 Modelando o Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
UNIDADE 7 Conectando o Java ao Banco Dados . . . . . . . . . . . . . . . . . . . . . . 159
UNIDADE 8 Criando as Classes de Representao . . . . . . . . . . . . . . . . . . . . . 175
UNIDADE 9 Criando as Classes de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
UNIDADE 10 Aplicao Exemplo: Controle de Projetos . . . . . . . . . . . . . . . . 205UNIDADE 11 Introduo ao Desenvolvimento de Aplicaes Web . . . 209
UNIDADE 12 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
UNIDADE 13 Java Server Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
UNIDADE 14 Java Standard Tag Library(JSTL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
UNIDADE 15 Aplicao Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Reerncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Sobre os proessores conteudistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . . . . 319
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
8/333
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
9/333
Palavras dos professores
Ol,
Voc est iniciando a disciplina de Linguagem de ProgramaoII. Para chegar at aqui voc deve ter passado pelas disciplinas deLgica de Programao I e II, Programao Orientada a Objetos,Banco de Dados I e II e Linguagens de Programao I. Isso quer
dizer que voc j tem plenas condies de assimilar o contedo denvel mais aprofundado que ser abordado nesse livro.
Esse livro abordar trs tpicos muito importantes do mundo daprogramao: construo de GUI (Graphical User Interface), Acessoe manipulao de banco de dados e aplicao web.
Primeiramente, sero apresentados para voc os conhecimentosbsicos sobre como construir uma GUI (Graphical User Interface).Uma interface grfica de usurio a tela ou view da aplicao
que voc desenvolve. O enfoque, nesse assunto, ser sobreaplicaes para desktop e utilizaremos para isso um conjunto decomponentes da linguagem Java, denominados componentesSwing. Esse assunto ser abordado ao longo de cinco unidades.
O assunto das quatro unidades seguintes trata da conexo emanipulao de dados em um banco. Voc aprender comoconstruir uma aplicao em Java que faa conexo com um bancode dados e manipule (inserir, atualizar, deletar) dados nesse bancode dados.
A dcima unidade mostrar o desenvolvimento de uma aplicaoexemplo completa, envolvendo a construo de uma GUI paraentrada e sada dos dados e a manipulao desses dados em umbanco de dados.
As unidades finais apresentaro uma introduo aodesenvolvimento de uma aplicao web usando Java Servlets.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
10/333
10
Universidade do Sul de Santa Catarina
Como dito, todos os contedos abordados nesse livro tm umnvel tcnico um pouco mais elevado. Por isso, toda a ateno dasua parte bem-vinda.
Mas voc certamente j sabe que essa ateno ser recompensada medida que voc ver seus programas funcionando.
Boa Sorte!
Professores Andra Sabedra Bordin, Marcelo Medeiros e AndrikAlbuquerque
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
11/333
Plano de estudo
O plano de estudo visa orient-lo/a no desenvolvimento doProjeto Integrador. Nele, voc encontrar elementos queesclarecero o contexto do mesmo e sugeriro formas deorganizar o seu tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual leva
em conta instrumentos que se articulam e se complementam.Assim, a construo de competncias se d sobre a articulaode metodologias e por meio das diversas formas de ao/mediao.
So elementos desse processo:
o livro didtico;
o Espao UnisulVirtual de Aprendizagem - EVA;
as atividades de avaliao a distncia (no sero feitasavaliaes presenciais).
Ementa
Introduo a Java. Programao orientada a objetos.Programao Java: Multitarefa; Cliente/servidor; acesso a bancode dados; interface grfica; APPLETS. JDBC. Deployment.
Aplicaes web com Java. Aplicaes J2ME.
Carga Horria
A carga horria total da disciplina 120 horas-aula, 8 crditos,incluindo o processo de avaliao.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
12/333
12
Universidade do Sul de Santa Catarina
Objetivos
Geral:
Fornecer ao aluno conhecimentos bsicos sobre odesenvolvimento de interface grfica de aplicao, assim comosobre a conexo de aplicao com banco de dados alm dodesenvolvimento de aplicaes dinmicas para web.
Especficos:
Conhecer os principais componentes Swingpara odesenvolvimento de GUI.
Aprender a manipular dados em um banco de dados viaaplicao (software).
Conhecer os fundamentos para o desenvolvimento deuma aplicao web de pequeno porte.
Contedo programtico/objetivos
Os objetivos de cada unidade definem o conjunto deconhecimentos que voc dever deter para o desenvolvimento dehabilidades e competncias necessrias sua formao. Nestesentido, veja, a seguir, as unidades que compem o livro didticodesta Disciplina, bem como os seus respectivos objetivos.
Unidades de estudo: 15
Unidade 1 Introduo a GUI (Grafical User Interface)
Nesta unidade voc ter uma viso geral dos componentesutilizados para a construo de GUI. Ser mostrado o primeirocomponente SwingJLabel e uma introduo ao conceito deinterface.
Unidade 2 Tratamento de Eventos em uma GUI
Nesta unidade voc estudar, essencialmente, como funciona otratamento de eventos em uma GUI.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
13/333
13
Linguagens de Programao I
Unidade 3 Componentes de uma GUI (JCheckBox, JRadioButton,JComboBox e JList)
Nesta unidade voc conhecer outros componentesSwing
.
Unidade 4 Trabalhando com Layoutde Componentes
Na unidade 4 voc aprender a trabalhar com o layout doscomponentes da tela, atravs do uso de outros gerenciadores delayout.
Unidade 5 Layout, JTabbedPane e componentes de MenuNesta unidade voc aprender uma pouco mais sobre layout,conhecer outro componente Swinge aprender a construir GUIcom menus.
Unidade 6 Modelando o Banco de Dados
Na unidade 6 voc relembrar como modelar um banco de dadose como criar o banco modelado em um SGBD.
Unidade 7 Conectando o Java ao Banco Dados
Nesta unidade voc aprender como conectar uma aplicao Javaa um banco de dados, usando um driverJDBC.
Unidade 8 Criando as Classes de Representao
Na unidade 8 voc aprender a criar as classes de representaode dados, de um banco de dados.
Unidade 9 Criando as Classes de Controle
Na unidade 9, voc criar classes que permitam a execuo decomandos SQL e a conexo e manipulao de dados em umbanco de dados.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
14/333
14
Universidade do Sul de Santa Catarina
Unidade 10 Aplicao Exemplo: Controle de Projetos
Nesta unidade ser exibido o cdigo completo de uma aplicao
para Controle de Projetos, que envolver a criao de GUIs e amanipulao de dados no banco de dados.
Unidade 11 Introduo ao Desenvolvimento de Aplicaes Web
Nesta unidade sero apresentados o protocolo HTTP, aplicaesCGI e os conceitos de desenvolvimento de aplicaes web com atecnologia Java.
Unidade 12 Servlets
Nesta unidade voc conhecer o que so os Servlets e utilizaras funcionalidades oferecidas por essa tecnologia para verificar odesenvolvimento de uma aplicao web.
Unidade 13 JavaServer Pages
Na unidade 13 voc conhecer a tecnologia Java Server Pages ecomo ela facilita o desenvolvimento de aplicaes web utilizandoa tecnologia Java.
Unidade 14 JavaStandard Tag Library(JSTL)
Nesta unidade ser apresentada a biblioteca JSTL, para facilitarainda mais o desenvolvimento de aplicaes web de uma formapadronizada.
Unidade 15 Aplicao Web
Nesta unidade ser apresentada uma aplicao completa dandocontinuidade ao projeto iniciado na unidade 10, porm, agora,com o foco no ambiente web.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
15/333
15
Linguagens de Programao I
Agenda de atividades/ Cronograma
Verifique com ateno o EVA, organize-se para acessarperiodicamente o espao da Disciplina. O sucesso nosseus estudos depende da priorizao do tempo para aleitura; da realizao de anlises e snteses do contedo; eda interao com os seus colegas e tutor.
No perca os prazos das atividades. Registre no espaoa seguir as datas, com base no cronograma da disciplinadisponibilizado no EVA.
Use o quadro para agendar e programar as atividadesrelativas ao desenvolvimento da Disciplina.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
16/333
16
Universidade do Sul de Santa Catarina
Atividades
Avaliao a Distncia 1
Avaliao a Distncia 2
Avaliao Presencial 1
Avaliao Presencial 2 (2 chamada)
Avaliao Final
Demais atividades (registro pessoal)
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
17/333
1UNIDADE 1
Introduo a GUI(Grafical User Interface)
Objetivos de aprendizagemEntender o que uma GUI e quais os seus principaiscomponentes.
Obter uma viso geral dos componentes Swingpresentes numa GUI.
Compreender o processo de criao de uma GUI com ocomponente JLabel.
Entender o conceito de interace e suas principaisaplicaes.
Sees de estudo
Seo 1 Entendendo uma GUI (grafcal user interace)
Seo 2 Viso Geral dos Componentes Swing
Seo 3 Criao da Primeira GUI - Componente JLabel
Seo 4 Interace
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
18/333
18
Universidade do Sul de Santa Catarina
Para incio de conversa
Nessa unidade, voc ser apresentado ao mundo da interface
grfica de usurio (GUI). Uma interface representa o meio decampo entre o usurio e a aplicao (software). atravs dainterface que o usurio pode se comunicar com o aplicativo, ouseja, inserir dados, visualizar informaes, etc.
Uma interface pode ser puramente textual ou grfica. Interfacesgrficas j fazem parte do nosso dia-a-dia, desde o surgimento dosistema operacional Windows e, portanto, necessrio que vocentenda os fundamentos bsicos da sua construo.
Seo 1 Entendendo uma GUI (grafical user interface)
Uma interface grfica com o usurio GUI (grafical user interface)apresenta um mecanismo amigvel para interagir com umaplicativo ( a tela do sistema). Uma GUI oferece ao aplicativo
uma aparncia e um comportamento.Observe o exemplo de GUI, a seguir, visualizada atravs dajanela do navegador Internet Explorer com seus componentesGUI rotulados.
Boto
Barra de ttulo
Barra de rolagem
Barra de botes
Barra de menus
FIGURA 1.1 VISO DE UMA GUI
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
19/333
19
Linguagens de Programao II
Unidade 1
Observe que as GUIs so construdas a partir de componentesGUI . Estes componentes podem ser chamados tambm dewidget.
Um componente GUI um objeto com que o usuriointerage na aplicao via mouse ou teclado ou outrotipo de entrada.
A maioria dos aplicativos utilizajanelas (windows) ou caixas dedilogo para interagir com o usurio.
Em geral, as caixas de dilogo so componentes GUI usadas paraexibir mensagens importantes para o usurio ou para, em algunscasos, obter-se informaes dele.
Voc sabe trabalhar com caixas de dilogo?
Lembre-se que na disciplina de Programao Orientada aObjetos (POO), voc utilizou somente este tipo de componente(as caixas de dilogo) para fazer interaes com o usurio(entrada e sada de dados).
Para exibir caixas de dilogo nos programas, use a classeJOptionPane que est no pacote javax.swing da API de Java (nestadisciplina, voc explorar bastante as outras classes desse pacote).
Lembre-se que a linguagem Java possui uma extensa biblioteca
de classes prontas para os programadores usarem. Esta biblioteca chamada deAPI (aplication programming interface). Asclasses nesta biblioteca so organizadas por funcionalidade, emestruturas chamadas pacotes (package).
As classes dos componentes GUI esto nos pacotesjavax.swing e java.awt. Consulte a documentaodesses dois pacotes no seguinte site:
http://java.sun.com/j2se/1.5.0/docs/api/
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
20/333
20
Universidade do Sul de Santa Catarina
At o momento, voc muito provavelmente s utilizou essa classe(JOptionPane) do pacote Swing(ser falado deste modo, daquipara a frente). E, muito provavelmente, somente os mtodos
staticshowInputDialoge showMessageDialogdessa classeforam utilizados.
Porm, a classe JOptionPane oerece diversos tipos de caixas de dilogo e vocpode customizar as existentes. Assim, por exemplo, voc pode mudar o texto dabarra de ttulo, o tipo de cone exibido, o nome dos botes, etc.
Veja, agora, como customizar alguns dos mtodos j conhecidos eapresentar outros mtodos.
showMessageDialogEsse mtodo permite a voc exibir uma caixa de dilogo comuma mensagem e um boto. Ele pode ser customizado, ouseja, voc pode alterar o texto da barra de ttulo e o cone damensagem.
Para isso, voc deve chamar esse mtodo passando algunsargumentos adicionais. A forma abaixo uma das maneiras deinvoc-lo, embora existam outras que podem ser consultadas nadocumentao da API Java:
showMessageDialog(Component parentComponent, Object message,String title, int messageType)
Considere os seguintes parmetros:
parentComponent determina o Frame (este conceitoser aprendido logo) no qual a caixa de dilogo ser
mostrada; se for null, ento o Framedefault(padro) usado.
message mensagem a ser mostrada.
title texto mostrado na barra de ttulo.
messageType determina o tipo de mensagemque aparecer na caixa: ERROR_MESSAGE,INFORMATION_MESSAGE, WARNING_MESSAGE,QUESTION_MESSAGEouPLAIN_MESSAGE (sem
cone). Um cone diferencia o tipo de mensagem.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
21/333
21
Linguagens de Programao II
Unidade 1
De acordo com o tipo de mensagem (messageType) passadocomo argumento, os seguintes cones podem aparecer na caixa dedilogo:
question(cor amarela)
inormation(cor bord)
warning(cor vermelha)
error(cor verde)
FIGURA 1.2 CONES POSSVEIS DE UMA CAIXA DE DILOGO
O cdigo, abaixo, demonstra como customizar o texto da barrade ttulo e o cone dessa caixa de dilogo. Edite, compile e veja oresultado!
import javax.swing.*;
public class GuiCaixaDialogo{
public static void main(String arg[]){
//chamada do mtodo passando somente os dois primeiros argumentos. Mostra a// mensagem e cone deault de inormaoJOptionPane.showMessageDialog(null,Mensagem de Inormao);
// chamada do mtodo passando somente os quatro argumentos explicados acima//ttulo customizado e cone de inormaoJOptionPane.showMessageDialog(null,Mensagem de Inormao,Inormao,JOptionPane.INFORMATION_MESSAGE);
//ttulo customizado e cone de perigoJOptionPane.showMessageDialog(null,Mensagem de Perigo,Perigo, JOptionPane.WARNING_MESSAGE);
//ttulo customizado e cone de erroJOptionPane.showMessageDialog(null,Mensagem de Erro,Erro, JOptionPane.ERROR_MESSAGE);
Parmetro que define o
tipo da mensagem
Parmetro que muda o
texto da barra de ttulo
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
22/333
22
Universidade do Sul de Santa Catarina
//ttulo customizado e cone de questoJOptionPane.showMessageDialog(null,Mensagem de Questionamento,Questionamento,
JOptionPane.QUESTION_MESSAGE);//ttulo customizado e sem coneJOptionPane.showMessageDialog(null,Mensagem simples,Simples, JOptionPane.PLAIN_MESSAGE);}} //fm da classe
Ateno!
Em geral, a barra de ttulo de uma janela adota oestilo que emprega o uso de letra inicial maiscula emcada palavra signifcativa do texto e no termina compontuao.
Veja algumas outras caixas de dilogo:
showOptionDialogCom este mtodo, voc pode mostrar uma caixa com botesespecficos, cone, mensagem e ttulo. Voc pode mudar o textoque aparece nos botes do dilogo e realizar outros tipos decustomizao.
Veja os parmetros necessrios para usar esse mtodo:
showOptionDialog(Component parentComponent, Object message, String title,int optionType, int messageType, Icon icon, Object[] options, Object initialValue)
Acompanhe os parmetros:
parentComponent determina oFrame (vocaprender isto logo) no qual a caixa de dilogo sermostrada; se for null, ento oFramedefault(padro)
usado.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
23/333
23
Linguagens de Programao II
Unidade 1
message mensagem a ser mostrada.
title mensagem de texto mostrada na barra de ttulo.
optionType tipo de opes de boto que aparecero:DEFAULT_OPTION, YES_NO_OPTION,
YES_NO_CANCEL_OPTION OK_CANCEL_OPTION.
messageType determina o tipo de mensagemque aparecer na caixa: ERROR_MESSAGE,INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, ou PLAIN_MESSAGE.
icon cone mostrado na caixa.
options um array de objetos indicando as possveisescolhas que o usurio pode fazer, normalmente umarray de Stringcom os nomes dos botes.
initialValue opo defaultde boto que aparecer nacaixa. Deve ser usado somente se a opo options tambmfor usada. Pode ser null.
Retorno do mtodo:
Um valor inteiro indicando a opo escolhida pelo usurio, ouCLOSED_OPTION se o usurio fechou a janela.
O cdigo abaixo exemplifica a utilizao desse mtodo:
import javax.swing.*;public class GuiCaixaDialogoOptionDialog{
public static void main(String arg[]){
//array de 3 posies, onde cada uma contm o texto de um boto.String[] options = {Sim, por avor, No, obrigada, Cancela};
//compare os parmetros do mtodo showOptionDialog com a explicao dos parmetros acima//parmetro options o array declarado anteriormente. Contm o nome dos botes//parmetro options[0] indica que o primeiro boto estar selecionado//varivel n armazenar o nmero do boto que o usurio clicouint n = JOptionPane.showOptionDialog(null,Confrma o pedido?,
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
24/333
24
Universidade do Sul de Santa Catarina
Confrmao do Pedido,JOptionPane.YES_NO_CANCEL_OPTION, //optionTypeJOptionPane.QUESTION_MESSAGE, //messageType
null, //sem iconoptions,options[0]);
// n pode ser testado em relao aos valores inteiros literais 0, 1 ou 2 (ordem dos botes) ou em relao//aos atributos static fnal da classe JOptionPane: YES_OPTION, NO_OPTION E CANCEL_OPTION.i ((n = = 0) || (n = = JOptionPane.YES_OPTION ))
JOptionPane.showMessageDialog(null,Pedido confrmado);else
i (n= =1)JOptionPane.showMessageDialog(null,Pedido negado);
elsei (n = = 2)
JOptionPane.showMessageDialog(null,Pedido cancelado);else
i (n = = JOptionPane.CLOSED_OPTION)JOptionPane.showMessageDialog(null,Janela echada);
System.exit(0);
// o atributo JOptionPane.CLOSED_OPTION indica que a janela oi echada.}}
showInputDialog
Lembre-se que voc j conhece esse mtodo. Ele permite umaentrada de dados por parte do usurio e algumas customizaes.A novidade, mostrada aqui, que o usurio pode escolher,ao invs de digitar, um entre vrios valores estabelecidospreviamente.
Esse mtodo possui algumas variaes, ou seja, ele pode serchamado passando-se um conjunto reduzido de argumentos
(como foi feito em POO) ou passando-se vrios argumentos, oque possibilita uma customizao maior.
Abaixo apresentada a forma mais completa de chamar essemtodo:
showInputDialog(Component parentComponent, Object message, String title, intmessageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
25/333
25
Linguagens de Programao II
Unidade 1
Veja o significado dos Parmetros (s os parmetros novos soexplicados, pois, para os outros parmetros, aplica-se a mesmaexplicao do mtodo mostrado anteriormente):
icon imagem do tipo Icon pode ser mostrada.
selectionValues array de objetos com vrios valorespossveis de serem escolhidos pelo usurio. Normalmenteum array de String.
initialSelectionValue valor usado para inicializar ocampo de entrada. o valor que aparece no topo docampo.
Retorno do mtodo:
Entrada ou escolha do usurio ou nullse o usurio cancelar aentrada.
O cdigo abaixo exemplifica a utilizao desse mtodo:
import javax.swing.*;
public class GuiCaixaDialogoInputDialog{
public static void main(String arg[]){
//array com as opes de escolhaString[] possibilidades = {eminino, masculino};//nessa chamada de mtodo necessrio azer o cast (converso) para String pois o dado
retornado do tipo ObjectString s = (String)JOptionPane.showInputDialog(null,Escolha a opo:,
Caixa de Entrada Customizada,JOptionPane.PLAIN_MESSAGE,null,possibilidades,
possibilidades[0]);i (s.equals(eminino))JOptionPane.showMessageDialog(null,Feminino);
elseJOptionPane.showMessageDialog(null,Masculino);
System.exit(0);}}
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
26/333
26
Universidade do Sul de Santa Catarina
Existem outros mtodos e variaes desses mtodosalm dos mostrados aqui na classe JOptionPane. Paramaiores inormaes, consulte a documentao da
API Java:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JOptionPane.html
Caro aluno, a idia, aqui, foi introduzir para voc as imensaspossibilidades de uso de apenas uma das classes do pacote decomponentes GUI, chamado Swing.
Seo 2 - Viso Geral dos Componentes Swing
Embora seja possvel voc realizar a entrada e a sada de dadosutilizando as caixas de dilogo JOptionPane, a maioria dosaplicativos GUI exigem interfaces com usurios, mais elaboradase personalizadas, com uma srie de componentes sendo exibidosem uma janela.
Neste sentido, conhea outros tipos de componentes GUI.A tabela, abaixo, mostra alguns dos componentes GUI maisutilizados nas aplicaes:
Componente Descrio
JLabel Exibe texto no editvel ou cones.
JTextFieldPermite ao usurio inserir dados atravs do teclado. Podeexibir texto editvel ou no editvel.
JButton Boto.
JCheckBoxOpo associada a um texto que pode ou no serselecionada. Podem-se selecionar vrias opes de checkbox.
JRadioButtonOpo associada a um texto que pode ou no serselecionada. Seleciona-se uma entre vrias opes de radio.
JComboBoxFornece uma lista de itens a partir da qual o usurio podeescolher um deles ou digitar um valor na prpria caixa.
JListFornece uma lista de itens a partir da qual o usurio podeescolher um ou vrios itens.
JPanel Fornece uma rea (painel, container) onde outroscomponentes podem ser colocados e organizados.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
27/333
27
Linguagens de Programao II
Unidade 1
Observe, a seguir, a interface de uma aplicao com todos oscomponentes listados acima:
J Textfield
J Label
J ComboBox
J List
JFrame
JCheckBox
JRadioButton
JButton
FIGURA 1.3 GUI COM VRIOS COMPONENTES
Swing e AWT
Para construir as aplicaes GUI, voc deve utilizar doisconjuntos de componentes GUI no Java:
Swing.
AWT.
Antes do Swingser construdo no J2SE 1.2, as GUI de aplicaesem Java eram construdas com componentes doAbstract WindowToolkit(AWT), que esto no pacote java.awt.
Quando uma aplicao GUI em Java construda comcomponentes AWT e executada em diferentes plataformas,esses componentes so exibidos diferentemente em cada umadessas plataformas. Alm disso, s vezes, a maneira como umusurio interage com um componente AWT difere entre asplataformas.
Por exemplo, uma aplicao que contm um boto (objeto Buttondo pacote java.awt), ao ser executada no sistema operacional
Windows, ter a mesma aparncia dos botes do sistema
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
28/333
28
Universidade do Sul de Santa Catarina
operacional Windows. Se a aplicao for executada no sistemaoperacional do Macintosh, ento esta aplicao ter a mesmaaparncia dos botes desse sistema.
Saiba Mais!
A aparncia e comportamento do sistema emdeterminada plataorma so conhecidos como lookand eel.
Os componentes Swing(pacote javax.swing) permitemespecificar uniformemente a aparncia e comportamento deum aplicativo em todas plataformas ou utilizar a aparncia e ocomportamento personalizados de cada plataforma.
Ateno!
Os componentes Swing so implementados em Java.Deste modo, tais componentes so mais portveise exveis do que os componentes do pacote AWT.
Estes ltimos so baseados nos componentes GUIda plataorma onde a aplicao executada. Ouseja, os componentes AWT operam tendo por baseas uncionalidades de alguma biblioteca grfca dosistema onde a aplicao executada.
Componentes GUI leves e pesados
Os componentes GUI so classificados como leves e pesados.Os componentes leves no so vinculados plataforma local. Amaioria dos componentes Swingso componentes leves.
Os componentes de peso so vinculados plataforma localporque contam com o sistema de janela desta plataforma paradeterminar sua funcionalidade, aparncia e comportamento. Oscomponentes AWT so componentes pesados. Alguns poucoscomponentes do pacote Swingtambm so.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
29/333
29
Linguagens de Programao II
Unidade 1
Seo 3 - Criao da Primeira GUI - Componente JLabel
Criar uma GUI mais elaborada envolve, primeiramente, a criaode um container, que , por sua vez, um componente que podereceber outros componentes.
Em uma aplicao GUI desktop, normalmente o containerusado umframe(uma janela com barra de ttulo, botes de minimizar,maximizar e fechar a janela).
Uma janela ouframe uma instncia da classe JFrame ouuma subclasse de JFrame. Tal classe fornece os atributos ecomportamentos bsicos de uma janela.
Nesse container(janela ouframe) podem ser adicionados vriosoutros componentes GUI. Na figura anterior, 1.3, voc tem umaidia dos componentes mais usados nas aplicaes.
Bom, comece criando uma aplicao GUI com uma janelae vrios componentes que tm como funo rotular, ou seja,especificar a funo de outros componentes na janela. Essecomponente criado com a classe JLabel.
JLabel exibe uma linha de texto, uma imagem ou tanto textocomo imagem.
Para maiores inormaes sobre a classe JLabel,consulte a documentao da API:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JLabel.html
A aplicao GUI est dividida em duas classes:
A classe GuiJLabel.java cria a janela com oscomponentes JLabel inseridos nela.
A classeTesteJLabel.java possui o mtodo main que criauma instncia (objeto) da classe GuiJLabel.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
30/333
30
Universidade do Sul de Santa Catarina
O cdigo, abaixo, demonstra utilizao do componente JLabel:
0 //Classe GuiJLabel.java
//classe gerenciadora de layout que especifca como os componentes so organizados1 import java.awt.FlowLayout;2 import javax.swing.JFrame; //classe que ornece os recursos bsicos de uma janela3 import javax.swing.JLabel; //classe do componente de rtulo (label). Pode exibir texto e imagem4 import javax.swing.SwingConstants; //classe de constantes usadas pelos componentes Swing5 import javax.swing.Icon; //interace utilizada para manipular imagens6 import javax.swing.ImageIcon; /classe utilizada para carregar imagens
7 public class GuiJLabel extends JFrame{
8 private JLabel label1;
9 private JLabel label2;10 private JLabel label3;
11 public GuiJLabel(){12 super(Exemplo JLabel);13 setLayout(new FlowLayout());
14 label1 = new JLabel(Tecnlogo em Web Design e Programao);15 label1.setToolTipText(Este o rotulo 1);16 add(label1);17 Icon bug = new ImageIcon(metal-Error.gi); //esta imagem pode ser
substituda por outra18 label2 = new JLabel(Rtulo com texto e imagem, bug,SwingConstants.LEFT);19 label2.setToolTipText(Este o rtulo 2);
20 add(label2);
21 label3 = new JLabel();22 label3.setText(Rtulo com imagem e texto embaixo);23 label3.setIcon(bug);24 label3.setHorizontalTextPosition(SwingConstants.CENTER);25 label3.setVerticalTextPosition(SwingConstants.BOTTOM);26 label3.setToolTipText(Este o rtulo 3);27 add(label3);28 }
29 }
Agora, acompanhe a anlise linha a linha do cdigo da classeanterior:
Linha 7 observe que a classe GuiJLabel estende a classeJFrame, ou seja, uma subclasse de JFrame. Logo ela herdar aaparncia e comportamento de uma janela tpica. Dentro destajanela sero adicionados outros componentes, neste caso, algunscomponentes JLabel e imagens (Icon).
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
31/333
31
Linguagens de Programao II
Unidade 1
Linhas 8 a 10 veja que so criados trs atributos do tipo JLabelchamados label1, label2 e label3, que sero os componentesadicionados janela. S foram criadas as referncias para os
componentes. Eles s sero instanciados no construtor dessa classe(lembre-se que todo componente um objeto).
Linha 11 mtodo construtor da classe (lembre-se que todoo construtor tem o mesmo nome da classe e no tem tipo deretorno). Normalmente, no construtor que voc constri a GUIque exibida na tela, ou seja, nele que chamado o construtorda sua superclasse JFrame (esse constri a janela), instancia (cria)os componentes (objetos), os configura e os adiciona janela ou
frame(se GuiJLabel estende JFrame, ento ela um JFrame ou
abreviando, umframe).
Linha 12 chamada ao mtodo construtor da superclasse JFrame(chama-se o construtor de uma superclasse com a palavra super,est lembrado?). Na chamada do construtor da super foi passado oargumento do tipo StringExemplo JLabel. Assim, este texto serexibido na barra de ttulo da janela.
Linha 13 aqui chamado o mtodo setLayout e passado uma
referncia (new) do tipo de layoutdesejado, nesse caso FlowLayout.Ao construir uma GUI, os componentes devem ser adicionados aum container, nesse caso, janela criada com JFrame. Geralmente preciso decidir em qual posio esses componentes seroadicionados e isso pode ser feito atravs de um gerenciador delayout. Existem algumas classes gerenciadoras de layoutque se podeutilizar, mas voc ver isto mais tarde. A princpio, voc utilizar ogerenciador de layoutchamado FlowLayout.
Embora existam IDEs (ambiente de desenvolvimento integrado)
que possuem ferramentas grficas que ajudam a fazer o desenhode uma interface (ou seja, com um simples clicar e arrastar voccoloca e posiciona os componentes na janela), voc no utilizareste recurso neste livro. Tal procedimento tem o intuito defazer com que voc aprenda mais sobre os componentes GUI,suas configuraes e como posicion-los na janela atravs dosgerenciadores de layout. Ou seja, voc aprender a construiraplicaes GUI na mo.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
32/333
32
Universidade do Sul de Santa Catarina
Ao usar o gerenciador de layoutFlowLayout, os componentesso colocados no container(janela) da esquerda para a direita, naordem em que so anexados ao containerno programa. Quando
no houver mais espao para os componentes na mesma linha,eles so colocados na prxima linha, tambm da esquerda paraa direita. Se o containerfor redimensionado, ento o gerenciadorFlowLayout ajustar os componentes novamente.
Linha 14 depois que especificar o layout, voc pode criar oscomponentes, configur-los e adicion-los ao container. Vejaque, nessa linha criado o primeiro componente (objeto) JLabele armazenado sua referncia na varivel label1. Ao chamar oconstrutor dessa classe passado o argumento
StringTecnlogo
em Web Design e Programao, e isto far com que esse textoseja exibido na janela.
Linha 15 o mtodo setToolTipText aqui chamado precedidoda referncia ao componente JLabel recm criado. passadacomo argumento uma String(mensagem de texto) que aparecerquando o usurio posicionar o mouseem cima desse componente.
Linha 16 o mtodo addadiciona o componente recm criado
ao containerGuiJLabel. Esse mtodo herdado da superclasseJFrame (na realidade o mtodo herdado indiretamente da classeContainer) e passado a ele a referncia (label1) do componenteJLabel.
Ateno!
Lembre-se que os componentes sempre devem seradicionados a um container.
Linha 17 Os cones so normalmente utilizados para identificaras funcionalidades de um sistema. Vrios componentes Swingpodem exibir imagens. Primeiramente, voc precisa criar umobjeto do tipoIcon e associar uma imagem (.gif, .png, .jpg) a ele.Depois voc passa esse objeto para o construtor ou mtodo docomponente Swing. Assim foi feito nas linhas 17 e 18. Na linha17, foi criado um objeto do tipo ImageIcon, (pacote javax.swing)que uma classe que implementa a interfaceIcon, passando-se
como argumento o nome e a extenso da imagem.
Esse assunto faz parte dos
conhecimentos de Orientao a
Objetos. Ele muito importante
para o entendimento de vrios
conceitos relacionados ao uso de
componentes GUI e, por isto, ser
dedicada uma seo especial a este
assunto no final desta unidade.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
33/333
33
Linguagens de Programao II
Unidade 1
A imagem deve estar na mesma pasta dos arquivos fonte. Areferncia desse objeto armazenada na varivel do tipoIcon.
Nalinha 18, foi criado o componente JLabel label2 e passados,como argumentos para o seu construtor, o texto a ser exibido, oobjetoIcon criado e uma constante que representa o alinhamentodo texto no componente JLabel, nesse caso esquerda.
Ateno!
A interace SwingContants - que pode ser acessadano endereo http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/SwingConstants.html- possui um
conjunto de atributos que azem a confgurao deposicionamento da tela de vrios componentes Swing.Veja que com essas linhas que um JLabel pode exibiruma imagem (objeto Icon).
Linha 19 e 20 especifica-se aqui o texto de dica do label2 eadiciona-se ele ao container.
Linha 21 cria-se, aqui, um novo componente JLabel e
armazena-se a referncia ao label3. Note que o construtor deJLabel est sem argumentos. Qual texto ser exibido neste label(rtulo)? O texto e imagem sero configurados logo abaixo, commtodos especficos. Existem vrios outros mtodos na classeJLabel que podem ser usados para configurar o componente.
Linha 22 configura o texto a ser exibido no labelatravs domtodo setText();
Linha 23 configura a imagem a ser exibida junto com o textoatravs do mtodo setIcon(). passado como argumento o objetodo tipoIcon, chamado bug, declarado anteriormente.
Linha 24 configurao da posio horizontal do texto no labelatravs do mtodo setHorizontalTextPosition(). passado comoargumento a constante SwingConstants.CENTER. Isto faz comque o texto seja posicionado no centro do labelem relao aoalinhamento horizontal.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
34/333
34
Universidade do Sul de Santa Catarina
Linha 25 configurao da posio vertical do texto no labelatravs do mtodo setVerticalTextPosition (). passado comoargumento a constante SwingConstants.BOTTOM. Isto faz
com que o texto seja posicionado embaixo, dentro do labelemrelao ao alinhamento vertical.
Linha 26 e 27 especifica o texto de dica do label3 e o adicionaao container.
A seguir est o cdigo da classe TesteJLabel.java. Essa classe responsvel por criar uma instncia (objeto) do tipo GuiJLabel,configurar a operao de fechamento da janela, definir seutamanho e torn-la visvel.
0 import javax.swing.JFrame;1 public class TesteJLabel{2 public static void main(String arg[]){3 GuiJLabel guijlabel = new GuiJLabel() ;4 guijlabel.setDeaultCloseOperation(JFrame.EXIT_ON_CLOSE);5 guijlabel.setSize(275,280);6 guijlabel.setVisible(true);7 }8 }
Veja a anlise do cdigo anterior linha a linha:
Linha 0 importa-se a classe JFrame, pois na linha 4 se usa umaconstante dessa classe.
Linha 3 criao do objeto do tipo GuiJLabel, ou seja, criaoda janela. Lembre-se que no construtor de GuiJLabel que ajanela criada e que se adicionam os componentes a ela.
Linha 4 por padro, fechar uma janela a faz ficar oculta. Nestecaso, ao fechar a janela guijlabel voc quer terminar o aplicativo.O mtodo que faz essa configurao setDefaultCloseOperation(). Deve ser passado o argumento constante JFrame.EXIT_ON_CLOSE. ela que indica que o programa deve ser terminadoquando a janela fechar.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
35/333
35
Linguagens de Programao II
Unidade 1
Linha 5 o mtodo setSize () especifica a largura e altura da janela.
Linha 6 o mtodo setVisible(), com o argumento true, permite
exibir a janela na tela.
Agora que voc analisou o cdigo dessas duas classes, edite,compile e teste a sua primeira aplicao GUI. No esquea deolhar a documentao do componente JLabel para explorar seusoutros recursos.
A figura, a seguir, ilustra a aparncia dessa aplicao.
FIGURA 1.4 GUI DA APLICAO TESTEJLABEL
Seo 4 - Interface
Como escrito anteriormente, o entendimento do conceito deinterface importante, e ser estudado antes de voc ver outrosconceitos e componentes GUI.
Uma interace uma espcie de classe ou estruturaque inicia com a palavra-chave interace oupublicinterace e possui somente mtodos que soimplicitamentepublic abstracte/ou atributos que sopublic staticfnal.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
36/333
36
Universidade do Sul de Santa Catarina
Voc lembra que no livro de POO foi visto uma srie demodificadores (palavras usadas na definio de uma classe,atributo ou mtodo)? Revise rapidamente.
Sugesto!
Revise todos os captulos que abordam orientao aobjetos do livro de POO.
Alguns destes modificadores so chamados de modificadores deacesso (public,private, protected), pois sua funo determinar
como (de que lugar) uma classe, mtodo ou atributo pode seracessado.
Outros so chamados modificadores gerais e nessa categoria esto:
static um mtodo com o modificadorstaticpodeser chamado precedido apenas do nome da classe,sem que nenhum objeto daquela classe tenha sidocriado; o atributo staticfaz com o que o atributo sejacompartilhado por todos os objetos criados a partir da
classe onde ele foi definido. Ou seja, o atributo daclasse e no de cada objeto.
final um mtodo com o modificadorfinalno pode serredefinido, sobrescrito em uma subclasse; o atributo final chamado de constante porque o seu valor nunca muda, sempre fixo. O atributo final deve ser inicializado comum valor no momento da sua definio ou no mtodoconstrutor da classe.
abstract uma classe abstractno pode ter objetos criados(instanciados) a partir dela; o mtodo abstractno temimplementao, um mtodo vazio, sem cdigo. Podeser usado num contexto de herana, numa superclasse,quando a lgica do mtodo diferente para cada subclassedesta superclasse. Todo o mtodo abstractdeve serobrigatoriamente redefinido (sobrescrito) por todas assubclasses da superclasse onde o mtodo abstractest.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
37/333
37
Linguagens de Programao II
Unidade 1
Portanto, depois dessa breve reviso, deve ter ficado mais claro oque so atributos static final(com valor fixo) e mtodos abstract(sem implementao). Somente estes itens so colocados numa
interface.
Para qu serve e como utilizada uma interace?
A interface diferente de uma classe porque no se podemcriar objetos a partir de uma interface. A interface utilizada(implementada) por uma classe. Pode ser utilizada nas seguintessituaes (1 e 2):
1) Java no suporta herana mltipla, ou seja, uma classe(subclasse) no pode herdar ou estender mais que uma classe(superclasse). Uma alternativa para essa restrio so as interfaces,pois uma classe pode implementar (implements) vrias interfaces.
Como todos os mtodos de uma interface so abstract, eles devemser obrigatoriamente redefinidos nas classes que implementamesta interface.
Uma classe pode implementar (uma espcie de herana)vrias interfaces, resolvendo, portanto, a restrio de heranamltipla apresentada anteriormente. A indicao que uma classeimplementa outra classe se d pela palavra-chave implements.
Veja o exemplo:
public class Quadrilatero implements CalculoFiguras,.....,.... {}
Observe que CalculoFiguras uma interface e que Quadriltero uma classe que implementa CalculoFiguras e mais outrasinterfaces, se houver necessidade.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
38/333
38
Universidade do Sul de Santa Catarina
J que Quadriltero implementa CalculoFiguras, ela temque redefinir, obrigatoriamente, todos os mtodos abstractdeCalculoFiguras. Se isto no for feito, Quadriltero se torna
uma classe abstracte uma mensagem de erro aparece aps acompilao, indicando que ela deve ser declarada como abstract.
Lembre-se!
Uma classe abstract aquela que no pode ter objetosinstanciados.
Uma interface utilizada quando existe um comportamentoou operao (mtodo) padro, cuja lgica especfica paracada classe e que deve ser executado por classes que no estorelacionadas somente atravs de Herana.
Acompanhe o exemplo:
O comportamento ou mtodo calculaArea() deve ser executadopelos objetos das classes da hierarquia Quadriltero (superclasse),Trapzio e Retngulo (subclasses) - (estas trs classes esto
relacionadas atravs de herana) - e, tambm, pelos objetos daclasse Tringulo que no faz parte desse relacionamento. Noteque a lgica para calcular a rea dessas figuras diferente paracada uma. A primeira soluo seria implementar um mtodoabstract(sem lgica) na superclasse Quadriltero e redefini-locom a lgica apropriada nas subclasses Trapzio e Retngulo.
Porm, se esse mtodo ou comportamento for colocado somentena superclasse Quadriltero, ento s ser visto e redefinido pelassubclasses Trapzio e Retngulo. A classe Tringulo no enxerga
esse mtodo, pois no faz parte da hierarquia de herana. O quefazer, ento?
Uma soluo criar uma interface e inserir esse comportamento(mtodo) calculaArea() l.
Voc pode criar uma interface chamada CalculoFiguras e inseriro mtodo calculaArea(). Lembre-se que mtodos numa interfaceso sempre abstract(sem implementao). Assim, todas asclasses (Trapzio, Retngulo e Tringulo) podero implementar
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
39/333
39
Linguagens de Programao II
Unidade 1
essa interface. Isto quer dizer que tero que, obrigatoriamente,redefinir o(s) mtodo(s) abstractdefinidos nessa interface.
O cdigo, abaixo, demonstra a implementao dessainterface. Esse cdigo deve ser salvo num arquivo chamadoCalculoFiguras.java. Depois de editar, o cdigo deve ser somentecompilado.
public interace CalculoFiguras{public abstract double calculaArea(); //os modicadores public abstract
no so obrigatrios}
Agora, vrias classes podem implementar essa interface.
Seguindo o exemplo, as classes que devem enxergar e redefiniro mtodo calculaArea() so Trapzio, Retngulo e Tringulo.Como Trapzio e Retngulo so subclasses de Quadrilatero, esta superclasse que deve implementar a interface CalculoFiguras.Triangulo tambm deve implementar a interface CalculoFiguras.
Cada classe deve ser editada e compilada em um arquivo.java
separado.No necessrio que voc implemente esse cdigo. A inteno apenas demonstrar a utilizao de uma interface.
//superclasse Quadriltero implementa a interace CalculoFiguraspublic class Quadrilatero implements CalculoFiguras {
//atributos e mtodos..
}//subclasse Trapzio estende a classe Quadriltero
public class Trapezio extends Quadrilatero{//atributos e mtodos..public double calculaArea(){
//...}
}//subclasse Retngulo estende a classe Quadrilteropublic class Retangulo extends Quadrilatero{
//atributos e mtodos..public double calculaArea(){
//...}
}
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
40/333
40
Universidade do Sul de Santa Catarina
Note que somente a superclasse implementa a interface. Comeste procedimento, o mtodo calculaArea() deveria ser,obrigatoriamente, redefinido nesta superclasse.
Caso no seja redefinido nesta superclasse, como ser o caso(porque no existe clculo de rea a ser implementado nasuperclasse Quadrilatero), ento a superclasse Quadriltero devese tornar abstracte este mtodo, por sua vez, repassado atravsda herana para todas as subclasses, devendo ser obrigatoriamenteredefinido em todas elas.
exatamente nas subclasses que deve ser implementado o clculoda rea, j que ele diferente para Trapezio e para Retangulo.
A classe Tringulo no pertence hierarquia de herana dasclasses acima, mas ela tambm possui o comportamento oumtodo especfico para calcular a rea. Ela deve implementara interface CalculoFiguras e, assim, tem que redefinir,obrigatoriamente, o mtodo abstractdessa interface.
Confira no cdigo seguinte:
//Classe Triangulo implementa a interace CalculoFiguraspublic class Triangulo implements CalculoFiguras {
//atributos e mtodos..
public double calculaArea(){//...
}}
Em resumo, a interface utilizada quando classes dspares (no
relacionadas) precisam compartilhar mtodos e atributos emcomum.
Assim, permite-se que os mtodos de objetos (classes)que implementam uma interface sejam processadospolimorficamente (uso de polimorfismo).
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
41/333
41
Linguagens de Programao II
Unidade 1
Ateno!
Polimorfsmo um conceito que voc estudou emPOO, mas no ser abordado neste livro porque eleno necessrio para construir aplicaes GUI.
2) Outra aplicao de interface refere-se possibilidade deutiliz-la como um repositrio de constantes. Ou seja, voc podedeclarar numa interface um conjunto de constantes (valores fixos)
que podem ser usados por vrias classes.
Ateno!
Lembre-se que todo atributo numa interace statice fnal.
Observe o cdigo abaixo:
public interace Constantes{ //esta interace deve ser salva no arquivo Constantes.java
int UM = 1;
int DOIS = 2;
int TRES = 3;
}
public class TesteInterace{ //note que esta classe no precisa implementar a interaceConstantes
public static void main(String args[]){
i (Constantes.UM = = 1) //nome da interace.nome do atributo
System.out.println( igual a 1);}
}
Final do exemplo
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
42/333
42
Universidade do Sul de Santa Catarina
Sntese
Nessa unidade, voc conheceu o conceito de GUI. Portanto, jsabe que uma GUI composta por vrios outros componentes,tambm conhecidos como widgets. A maioria dos componentesusados para construir uma GUI so componentes leves do pacotejavax.swing.
Voc tambm construiu sua primeira GUI. Foi uma GUIsimples, somente com componentes do tipo rtulo ou JLabel, masisto j permitiu que voc tenha uma noo de como uma GUI
pode ser construda.No final da unidade, voc ainda estudou um conceito muitoimportante da orientao a objetos, o conceito de interface.Interfaces so muito utilizadas na construo de GUIs, emborana GUI construda nesta unidade ela no tenha sido utilizada. importante que esses conceitos sejam bem assimilados.
Atividades de auto-avaliao
A partir de seus estudos, leia com ateno e resolva as atividadesprogramadas para a sua auto-avaliao.
1) Escolha alguma aplicao com interace grfca, aa umprint
screen dela e identifque os componentes GUI inseridos nela, maisespecifcamente a classe em Java responsvel pela criao dessecomponente. Alguns componentes podem ser novos para voc.
2) Complete o primeiro exemplo de cdigo que est incompleto naseo 4 Interace. Crie a interace, as trs classes (superclasse e asduas subclasses) e outra classe com o mtodo main() para testar essaaplicao.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
43/333
43
Linguagens de Programao II
Unidade 1
Saiba mais
Voc pode saber mais sobre o assunto estudado nesta unidadeconsultando a seguinte referncia, principalmente os captulos 10,11 e 22:
DEITEL, H. M.; DEITEL, P. J.Java comoprogramar. 6 ed. Porto Alegre: Person, 2005.
Tambm consulte:
SILVA, Ivan Jos de Mecenas. Java 2: fundamentosSwing e JDBC. Rio de Janeiro: Editora Alta Books,2003.
Consulte, tambm, os seguintes sites:
http://java.sun.com/docs/books/tutorial/uiswing/index.html(Creating a GUI with JFC/Swing)
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
44/333
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
45/333
2UNIDADE 2
Tratamento de Eventosem uma GUI
Objetivos de aprendizagem Entender o processo de tratamento de
eventos em uma GUI.
Utilizar os componentes JTextField e JButtonem uma GUI.
Conhecer os principais tipos de eventos esuas interaces.
Sees de estudo
Seo 1 Introduo ao Tratamento de Eventos
Seo 2 Componente JTextField e JButton
Seo 3 Tipos de Eventos GUI e suas Interaces
Seo 4 Entendendo o Tratamento de Eventos
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
46/333
46
Universidade do Sul de Santa Catarina
Para incio de conversa
Nesta unidade, voc aprender o processo de tratamento deeventos de um GUI. Ele importante porque a maioria dosprocessamentos que voc deseja programar na sua aplicao acionado atravs da interao do usurio com algum componentepresente na GUI.
Quando essa interao acontece, eventos so gerados e devemser tratados adequadamente para que o processamento sejaexecutado corretamente. Esse processo ser apresentado emordem de dificuldade crescente durante as sees desta unidade.
importante que voc leia e releia esta unidade, pois dependerdela o entendimento das unidades seguintes.
Nesta unidade, tambm sero apresentados dois componentesnovos: JTextField (campo de texto) e JButton (boto).
Seo 1 Introduo ao Tratamento de EventosAo interagir com os componentes GUI de uma aplicao, ousurio indica a tarefa que deve ser executada pela aplicao.Por exemplo, em uma aplicao qualquer, ao clicar num botocom um rtulo Soma, provavelmente, a tarefa de somar algunsnmeros ser executada. Num editor de texto como o Word, oato de clicar no boto com o cone de um disquete (boto Salvar)indica que a tarefa de salvar o documento ser executada.
Para que voc consiga programar uma tarefa em uma aplicaoGUI necessrio entender como funciona o tratamento deeventos.
Quando o usurio interage com um componente GUI, umevento disparado (um evento tambm um objeto alis, tudo objeto em uma linguagem orientada a objeto).
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
47/333
47
Linguagens de Programao II
Unidade 2
Por exemplo, o clique do mousenum boto dispara um evento;digitar caracteres num campo de texto dispara um evento; passaro mousepor cima de algum componente na tela dispara um
evento; selecionar um item numa caixa de seleo (combobox)dispara um evento; fechar a janela dispara um evento, etc.
Assim, observa-se que a maioria das aes do usurio numa GUIdispara eventos.
Um evento precisa ser tratado, ou seja, a tarefa que voc querprogramar deve ser colocada dentro de uma estrutura que sempre executada quando o evento disparado.
Voltando ao primeiro exemplo, ao clicar no boto Soma umevento ser disparado e as linhas de cdigo associadas a esseevento sero executadas (caso sejam programadas). Nessas linhasde cdigo estar a programao da soma que voc quer queacontea, por exemplo, a soma de, no mnimo, dois nmeros.
Por enquanto, voc fica com essa breve explicao. Logo mais,ver que necessrio que qualquer componente esteja atento ououvindo esses eventos...
A seguir, voc estuda dois novos componentes JTextField eJButton, alm de uma aplicao onde o tratamento de eventosficar mais claro para voc.
Seo 2 Componente JTextField e JButton
A classe JTextField (que faz parte do pacote javax.swing)representa o componente conhecido como campo de texto, ondeo usurio pode inserir texto numa nica linha atravs do teclado.O texto tambm pode ser exibido nesse componente sem que ousurio entre com ele. Para digitar o texto nesse componente necessrio que o foco esteja nele. Um componente recebe o focoquando voc clica nele.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
48/333
48
Universidade do Sul de Santa Catarina
Consulte a documentao dessa classe em:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/
JTextField.html
A classe JButton (que faz parte do pacote javax.swing)representa o componenteboto, que utilizado nas aplicaesGUI para executar uma ao especfica (ao ser clicado), comosomar, salvar dados de um formulrio, deletar dados, etc. Umboto pode exibir texto e imagem (objetoIcon) dentro dele. Otexto chamado de rtulo do boto.
Consulte a documentao dessa classe em:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JButton.html
A aplicao GUI, a seguir, demonstra o uso desses doiscomponentes numa interface onde o usurio deve entrar com dois
nmeros (nos componentes JTextField) e clicar no boto Soma(JButton). Aps o clique, ser exibida a soma dos dois nmerosem outro componente JTextField.
A figura 2.1 demonstra tal aplicao, aps ser executada:
FIGURA 2.1 GUI DA APLICAO TESTEJTEXTFIELD
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
49/333
49
Linguagens de Programao II
Unidade 2
Veja o cdigo da classe GuiJTextField.java onde a GUI montada, e o cdigo da classe TestJTextField.java onde criadoum objeto do tipo GuiJTextField, que por sua vez exibe a
interface:
1 import java.awt.FlowLayout;
2 import javax.swing.JFrame; //classe que ornece os recursos bsicos de uma janela
3 import javax.swing.JLabel; //classe do componente de rtulo (label). Exibe texto e imagem
4 import javax.swing.JTextField; //classe do componente de caixa de texto
5 import java.awt.event.ActionListener; //interace que trata o evento gerado pelo componenteJButton
6 import java.awt.event.ActionEvent; //classe do evento gerado pelo componente de JButton
7 import javax.swing.JButton; //classe do componente boto (button)8910 public class GuiJTextField extends JFrame{1112 private JLabel labelNu1;13 private JLabel labelNu2;14 private JTextField textfeldNu1;15 private JTextField textfeldNu2;16 private JTextField textfeldResult;17 private JLabel labelResultado;18 private JButton button1;19
2021 public GuiJTextField(){22 super(Exemplo JTextField);23 setLayout(new FlowLayout());2425 labelNu1 = new JLabel(Primeiro Nmero);26 labelNu1.setToolTipText(Digite o primeiro nmero);27 add(labelNu1);2829 textfeldNu1 = new JTextField(10);30 add(textfeldNu1);3132 labelNu2 = new JLabel(Segundo Nmero);
33 labelNu2.setToolTipText(Digite o segundo nmero);34 add(labelNu2);3536 textfeldNu2 = new JTextField(10);37 add(textfeldNu2);3839 button1 = new JButton(Soma);40 add(button1);4142 TrataEventoBotao trataevento = new TrataEventoBotao();43 button1.addActionListener(trataevento);44
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
50/333
50
Universidade do Sul de Santa Catarina
45 labelResultado = new JLabel(Resultado);46 labelResultado.setToolTipText(Resultado da Soma);47 add(labelResultado);4849 textfeldResult = new JTextField(10);50 textfeldResult.setEditable(alse);51 add(textfeldResult);525354 }5556 private class TrataEventoBotao implements ActionListener{57 public void actionPerormed(ActionEvent event){58 textfeldResult.setEditable(true);59 textfeldResult.setText(Integer.toString(Integer.
parseInt(textfeldNu1.getText())+ Integer.
parseInt(textfeldNu2.getText())));6061 }//fm do mtodo62 }//fm da classe interna63 }//fm da classe de primeiro nvel
Cdigo da classe TestJTextField.java:
1 import javax.swing.JFrame;
23 public class TesteJTextField{45 public static void main(String arg[]){67 GuiJTextField guijtextfeld = new GuiJTextField();89 guijtextfeld.setDeaultCloseOperation(JFrame.EXIT_ON_CLOSE);10 guijtextfeld.setSize(275,280);11 guijtextfeld.setVisible(true);1213 }14 }
Acompanhe a anlise do cdigo das duas classes, linha a linha:
Linhas 1 a 7 importao de todas as classes que sero utilizadasna aplicao. Note que algumas delas pertencem ao pacote java.awt e outras ao pacote javax.swing.
Linha 10 definio da classe GuiJTextField. Note que estaclasse estende a classe JFrame, logo ela tambm umframe. Isto
faz com que a GUI tenha a aparncia de uma janela.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
51/333
51
Linguagens de Programao II
Unidade 2
Linhas 12 a 18 definio de todos os atributos ou componentesda aplicao. JLabel representa os rtulos, JTextField os camposde texto (onde o usurio entrar com os nmeros e o resultado
da soma ser exibido) e JButton o componente que acionar asoma dos dois nmeros.
Linha 21 incio do construtor da classe GuiJTextField. dentro do construtor que ser montada toda a GUI, ou seja,cria-se os componentes, adiciona-se os componentes aoframe(seGuiJTextField estende JFrame, ele tambm umframe janela),registra-se o objeto que ouve e trata o evento gerado pelo cliqueno boto ao componente JButton, etc. Esse construtor chamadona classe TesteJTextField, quando um objeto desse tipo criado(linha 7 da classe TesteJTextField).
Linha 22 chamada ao construtor da superclasse JFrame.Chamamos o construtor de qualquer superclasse sempre comsuper(). enviado como argumento o texto que aparecer nabarra de ttulo doframe(janela).
Linha 23 os componentes numa GUI so dispostos conformeum layoutpreviamente estabelecido. Existem vrios tipos de
layout. Por enquanto, voc utilizar o FlowLayout, explicadono cdigo da unidade anterior. Para configurar (setar) o layout, usado o mtodo setLayout() e passado como argumento umobjeto do tipo FlowLayout (new FlowLayout).
Linhas 25 a 27 um componente do tipo JLabel criado,configurado o texto que ser exibido quando o mouseestiverposicionado em cima desse JLabel e, logo aps, o componente adicionado ao container(frame).
Linhas 29 e 30 o primeiro componente JTextField (campode texto) criado. Neste componente ser digitado o primeironmero. O nmero de colunas de texto passado comoargumento para o construtor do componente. A largura empixelsde uma coluna de texto determinada pela largura mdia deum caractere, na fonte atual do campo de texto. Quando o textoexibido em um campo for mais longo que o tamanho do campo, aparte direita do texto no ficar mais visvel. Se o texto digitadoexceder a borda direita do campo de texto, ento parte do texto esquerda ser empurrada para fora do lado esquerdo do campo
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
52/333
52
Universidade do Sul de Santa Catarina
e no ficar mais visvel. Use as setas esquerda e direita para selocomover no campo de texto. Na linha 30, o componente adicionado aoframe.
Linhas 32 a 34 criao do segundo componente JLabel e adiodele aoframe.
Linhas 36 e 37 o segundo componente JTextField (campode texto) criado. Neste componente ser digitado o segundonmero. Logo aps, ele adicionado aoframe.
Linhas 39 e 40 o componente JButton criado. O rtuloque ser exibido no boto passado como argumento para oconstrutor. Logo aps, ele adicionado aoframe.
Linha 42 nessa linha comea o processo de tratamento deevento, comentado no incio desta unidade. Ele ser abordadode maneira resumida neste momento, durante a explicao docdigo. Na seo seguinte, aps a explicao de todo o cdigo,abordaremos o processo de tratamento de evento de maneira maisdetalhada.
Saiba mais sobre o Tratamento de Evento
Como escrito anteriormente, a interao do usurio com umcomponente gera eventos variados. Com isto, podemos dizer queum componente (um objeto) onde se origina um evento (outroobjeto). Este objeto de evento armazena inormaes sobre o eventoque aconteceu, como por exemplo, a reerncia ao componente queoriginou o evento e outras inormaes.
No processo de tratamento de um evento, existe um terceiro elementodenominado de objeto ouvinte de evento. Este objeto ouvinte deevento notifcado, avisado quando um determinado evento ocorre emum componente, mas, para isto, ele precisa ser registrado (adicionado)
junto ao componente que gera eventos.
Quando o objeto ouvinte de evento registrado junto ao componenteque gera eventos, o componente avisa ou notifca este objeto ouvintede evento que ocorreu um evento e, ento, esse objeto ouvinte deevento pode executar uma resposta ao evento, ou seja, executar ummtodo com algum cdigo em resposta a esse evento. Esse mtodorecebe como parmetro o objeto de evento.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
53/333
53
Linguagens de Programao II
Unidade 2
Para que esse processo ocorra, os seguintes passos sonecessrios:
1
preciso criar uma classe que trate
o evento desejado. Essaclasse ser criada dentro da classe que cria a GUI. Observe a linha56. A linguagem Java permite que sejam declaradas classesdentro de classes. Elas so chamadas de classes aninhadas.Nesse caso, essa classe chamada tambm de classe interna.Este tipo de classe reqentemente utilizada para o tratamentode eventos.
2 A classe interna, mencionada acima, deve implementaruma interace ouvinte de evento (listener). Voc j aprendeuque uma interace uma estrutura que pode conter somentemtodos abstract(sem cdigo). Existem vrias interacesouvintes de eventos prontas na API do Java. Voc tem que saberqual a interace apropriada para o tipo de evento que ir ocorrer.
3 Um objeto do tipo dessa classe deve ser criado. Esse oobjeto ouvinte de evento mencionado acima. Esse objeto deveser notifcado, avisado quando o evento em um componenteocorrer. Para que ele seja avisado, , ento, necessrio registr-lo
junto ao componente.
Os passos descritos so demonstrados nas linhas 42 (criao doobjeto ouvinte de evento), 43 (registro desse objeto junto aocomponente que dispara o evento, nesse caso JButton button1)e 56 a 62 (criao da classe que trata o evento, da qual o objeto
ouvinte de evento se origina).Na linha 42, um objeto do tipo TrataEventoBotao criado. Esse o objeto ouvinte de evento. TrataEventoBotao classe internamencionada no passo 1.
Linha 43 Registro do objeto ouvinte de evento junto aocomponente JButton button1. Para que o objeto ouvinte de
evento oua e trate os eventos gerados por este componente, eleprecisa ser registrado junto ao componente JButton button1.O objeto ouvinte de evento registrado com o mtodoaddActionListener(). Este mesmo objeto ouvinte de evento,criado na linha 42, passado como argumento.
Linhas 45 a 47 criao do segundo componente JLabel label 3com o rtulo Resultado e adio dele aoframe.
Linhas 49 a 51 o terceiro componente JTextField (campo de
texto) criado. Nesse componente ser exibido o resultado da
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
54/333
54
Universidade do Sul de Santa Catarina
soma. Na linha 50, ele configurado para no ser editvel com omtodo setEditable(false), ou seja, o usurio no poder inserirdados no componente e ele servir apenas para exibir o resultado
da soma. Logo aps, o componente adicionado ao frame.
Linha 54 fim do construtor.
Linha 56 incio da classe interna TrataEventoBotao. Essa aclasse responsvel pelo tratamento do evento que ocorrer quandoo usurio clicar no boto. Note que o modificador de acessoda classe privateporque essa classe ser utilizada para tratareventos gerados pelos componentes definidos na classe principal,tambm chamada de classe de primeiro nvel (GuiJTextField).
Ela pode serpublic, protectedou private.
A classe TrataEventoBotao implementa (implements) a interfacej definida na API do Java chamada ActionListener. Ela deveimplementarexatamente essa interface porque o evento geradopelo clique no boto do tipo ActionEvent (classe ActionEvent).
O que exatamente significa isso?
Revisando!
A interao do usurio (clicar, passar o mouse sobre,digitar caracteres, etc.) com um componente podegerar vrios tipos de eventos (objetos de evento).Uma interao especfca com um componente,como clicar no boto, gera um tipo de eventoespecfco. Cada objeto de evento criado por umaclasse que implementa uma interace especfcadesse tipo de evento.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
55/333
55
Linguagens de Programao II
Unidade 2
Acompanhe o exemplo:
Quando o usurio clica no boto, um objeto de eventodo tipo ActionEvent (classe ActionEvent) gerado.
Quando o usurio pressiona a tecla Enternumcomponente JTextEdit, um objeto de evento do tipoActionEvent tambm gerado.
Quando o usurio digita caracteres em um campo detexto, um objeto de evento do tipo KeyEvent gerado.
Quando o usurio passa o mouse sobre umcomponente, um objeto de evento do tipoMouseEvent gerado, etc.
Perceba que, conforme o tipo de interao com o componente,outro tipo de evento pode ocorrer. Em outras aplicaes, voctrabalhar com outros tipos de eventos.
O objeto de uma classe que implementa a interfaceActionListener somente pode ouvir ou tratar eventos do tipoActionEvent, desde que esse objeto seja registrado junto ao
componente. Lembre-se que o objeto do tipo TrataEventoBotao criado na linha 42 e, na linha 43, ele adicionado (registrado) aocomponente JButton button1.
Assim, quando o usurio clicar no boto para realizar a soma, umobjeto de evento do tipo ActionEvent ser disparado e passadocomo parmetro para o mtodo do objeto ouvinte de evento,que foi registrado junto ao componente JButton button1. Assim,tudo o que foi programado nesse mtodo (linhas 57 a 61) serexecutado.
Que mtodo esse?
Tal mtodo o que est dentro da classe TrataEventoBotao, jque o objeto ouvinte de evento desse tipo. Esse mtodo oactionPerformed(), definido na linha 57.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
56/333
56
Universidade do Sul de Santa Catarina
O que est programado dentro dele?
A soma dos dois valores digitados nos componentes JTextField.
Linha 57 como mencionado na explicao acima, aqui comeaa redefinio do mtodo actionPerformed(). Note que o termousado foi redefinio, pois exatamente isso que est sendofeito, uma vez que esse mtodo est definido como abstractna interface ActionListener. Lembre-se que, quando uma
classe implementa uma interface, ela deve, obrigatoriamente,redefinir (provavelmente com cdigo dentro) todos os mtodosdessa interface. Como esse o nico mtodo da interfaceActionListener, necessrio redefinir somente ele. Note que essemtodo recebe como parmetro um objeto de evento do tipoActionEvent, porque esse tipo de evento que gerado quando ousurio clica no boto.
Linha 58 aqui comea a programao do que voc quer queacontea quando o usurio clicar no boto Soma. Tudo o que for
programado aqui, ser executado nesse momento.
O que voc quer que acontea?
Que os dois nmeros digitados nos componentes JTextFieldsejam somados.
Para isso, nessa linha o componente textfieldResult configuradopara trueatravs do mtodo setEditable(). Com isso, o campotorna-se editvel e armazena-se o resultado da soma dentro dessecomponente.
Linha 59 essa linha programada para armazenar algumvalor no componente textfieldResult. Isso feito com o mtodosetText(). O valor que se quer armazenar o que foi digitado earmazenado nos dois primeiros componentes JTextField. Para
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
57/333
57
Linguagens de Programao II
Unidade 2
isso, so recuperados esses valores atravs do mtodo getText()de cada componente JTextField.
O valor retornado do tipo String; logo, eles precisam sertransformados para intcom o mtodo Integer.parseInt(),somados e o resultado da soma transformado para Stringnovamente, para, finalmente, ser passado como argumento parao mtodo setText(), j que este mtodo aceita somente dados dotipo String.
Linha 61 fim do mtodo actionPerformed().
Linha 62 fim da classe interna TrataEventoBotao.
Linha 63 fim da classe de primeiro nvel GuiJTextField.
O cdigo da classe TesteJTextField, analisado abaixo, possui omtodo main() e dentro dele criado um objeto do tipo da classeGuiJTextField.
Linha 7 Um objeto do tipo GuiJTextField criado. Quando oconstrutor GuiJTextField () desse objeto chamado, a interface exibida porque dentro dele que ela programada.
Linha 9 a 11 configura o modo de fechamento da janela, otamanho da janela e a torna visvel.
Ateno!
Primeiramente, edite e compile a classe querepresenta a janela (estende JFrame, cria oscomponentes e adiciona eles ao rame).
Logo aps, edite e compile a classe que cria um objetodo tipo da classe anterior.
Comando para compilar: javac
Comando para executar: java
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
58/333
58
Universidade do Sul de Santa Catarina
possvel estender o exemplo anterior e criar uma espciede calculadora. Para isso, necessrio adicionar mais trscomponentes JButton na classe GuiJTextField. Os outros botes
representaro as aes de subtrao, multiplicao e diviso.
A figura 2.2 representa essa aplicao:
FIGURA 2.2 GUI DA APLICAO TESTEJTEXTFIELD
O cdigo da classe GuiJTextField mostrado e as alteraes socomentadas no decorrer do cdigo abaixo:
import java.awt.FlowLayout;import javax.swing.JFrame;
import javax.swing.JLabel;import javax.swing.JTextField;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.JButton;public class GuiJTextField extends JFrame{
private JLabel labelNu1;private JLabel labelNu2;private JTextField textfeldNu1;private JTextField textfeldNu2;private JTextField textfeldResult;private JLabel labelResultado;
private JButton buttonSoma;private JButton buttonSubtracao;private JButton buttonMultiplicacao;private JButton buttonDivisao;
public GuiJTextField(){super(Exemplo JTextField);setLayout(new FlowLayout());
labelNu1 = new JLabel(Primeiro Numero);labelNu1.setToolTipText(Digite o primeiro nmero);add(labelNu1);
So criados mais trs
componentes JButton e
modificado seus nomes.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
59/333
59
Linguagens de Programao II
Unidade 2
textfeldNu1 = new JTextField(5);add(textfeldNu1);
labelNu2 = new JLabel(Segundo Numero);labelNu2.setToolTipText(Digite o segundo nmero);add(labelNu2);
textfeldNu2 = new JTextField(10);add(textfeldNu2);
buttonSoma = new JButton(Soma);add(buttonSoma);
buttonSubtracao = new JButton(Subtrao);add(buttonSubtracao);
buttonMultiplicacao = new JButton(Multiplicao);
add(buttonMultiplicacao);buttonDivisao = new JButton(Divisao);add(buttonDivisao);
TrataEventoBotao trataevento = new TrataEventoBotao();buttonSoma.addActionListener(trataevento);buttonSubtracao.addActionListener(trataevento);buttonMultiplicacao.addActionListener(trataevento);buttonDivisao.addActionListener(trataevento);
labelResultado = new JLabel(Resultado);labelResultado.setToolTipText(Resultado da Soma);add(labelResultado);
textfeldResult = new JTextField(10);textfeldResult.setEditable(alse);add(textfeldResult);
}....
63 private class TrataEventoBotao implements ActionListener{64 public void actionPerormed(ActionEvent event){65 textfeldResult.setEditable(true);66 i (event.getSource() == buttonSoma)67 textfeldResult.setText(Integer.toString(Integer.parseInt(textfeldNu1.getText())+
Integer.parseInt(textfeldNu2.getText())));
68 else69 i (event.getSource() == buttonSubtracao)70 textfeldResult.setText(Integer.toString(Integer.parseInt(textfeldNu1.getText())-
Integer.parseInt(textfeldNu2.getText())));71 else72 i (event.getSource() == buttonMultiplicacao)73 textfeldResult.setText(Integer.toString(Integer.parseInt(textfeldNu1.getText())*
Integer.parseInt(textfeldNu2.getText())));74 else75 i (event.getSource() == buttonDivisao)76 textfeldResult.setText(Integer.toString(Integer.parseInt(textfeldNu1.getText())/
Integer.parseInt(textfeldNu2.getText())));77 } //fm do mtodo78 } //fm da classe interna
79 } //fm da classe inicial
Os quatro componentes JButtonso criados e adicionados aoframe um aps o outro
O objeto ouvinte de evento
criado. Logo aps, este mesmoobjeto registrado junto aosquatro componentes JButton.Isto significa que quando umevento for disparado por causada interao do usurio emqualquer dos componentes,o mesmo objeto ouvinte deevento ir tratar esse evento.Voc ver mais detalhes naexplicao do cdigo da classeTrataEventoBotao.
Note que o cdigo do mtodoactionPerformed() foi bastantealterado. Isto aconteceuporque precisamos saber qualo componente que originou oevento. Voc ver mais explicaesaps o cdigo.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
60/333
60
Universidade do Sul de Santa Catarina
O cdigo da classe interna TrataEventoBotao ser explicadoabaixo:
Linha 63 essa numerao sugerida para incio da classeinterna TrataEventoBotao. Voc j sabe que essa classe somentetratar eventos do tipo ActionEvent, pois ela implementasomente a interface ActionListener; dizemos somente porqueuma classe pode implementar mais de uma interface, lembra?
Mas esse no o caso dessa aplicao, pois nela preciso tratarsomente eventos do tipo ActionEvent, que so disparados quandoo usurio clica com o mouseem algum JButton.Como agora existem quatro componentes JButton na aplicao etodos foram registrados com o mesmo objeto ouvinte de evento(objeto do tipo TrataEventoBotao).
Se no se verificar qual o componente que originou o evento, omesmo cdigo programado dentro do mtodo actionPerformed()ser executado quando o usurio clicar no boto Soma,Subtrao, Diviso e Multiplicao. No se quer isto. Quer-seque quando o usurio clique no boto Soma, os dois nmerosdigitados sejam somados, e quando o usurio clicar no botoMultiplicao, os dois nmeros sejam multiplicados, etc.
Linha 64 incio do mtodo actionPerformed(). Esse mtodorecebe como parmetro uma referncia (lembre-se que areferncia o endereo de algum objeto na memria) ao objetodo tipo ActionEvent, gerado quando o usurio clica em algumJButton. Essa referncia armazenada na varivel event. O nomedessa varivel pode mudar.
Esse objeto contm informaes como qual o componente queoriginou o evento. Ento, ele, na verdade, a varivel refernciaque ser usada para saber qual o componente JButton queoriginou o evento.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
61/333
61
Linguagens de Programao II
Unidade 2
Linha 66 para saber qual o componente que originou oevento, preciso obter a referncia do componente que ooriginou, atravs do mtodo getSource() desse evento. Logo,
event.getSource() retornar a referncia do objeto componenteque originou o evento. preciso verificar se essa referncia(endereo) igual (=) referncia armazenada em cada uma dasvariveis que guardam as referncias dos quatro componentesJButton (buttonSoma, buttonSubtracao, buttonMultiplicacao,buttonDivisao). Se forem iguais, porque esse componenteoriginou o evento. Dentro do teste (if) programada a tarefaadequada. Por exemplo, se for o componente buttonSoma, entouma soma programada.
Seo 3 Tipos de Eventos GUI e suas Interfaces
Voc j leu, anteriormente, que existem vrios tipos de eventos(no somente ActionEvent) que podem ocorrer quando o usuriointerage com um componente GUI. As informaes sobre esseevento (objeto de evento) so armazenadas em um objeto (todo oobjeto deriva de uma classe) que estende a classe AWTEvent.
Veja que nas linhas de importao da classe GUIJTextField foiimportado a classe ActionEvent do pacote java.awt.event. Essaclasse estende ( uma subclasse de) AWTEvent.
A figura 2.3, logo a seguir, ilustra a hierarquia de classes a partirda classe AWTEvent.
Todas essas classes representam todos os tipos de objetos deevento que podem ocorrer quando o usurio interage com umcomponente GUI. Nas prximas aplicaes, voc trabalhar commuitos desses eventos.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
62/333
62
Universidade do Sul de Santa Catarina
FIGURA 2.3 HIERARQUIA DAS CLASSES DE EVENTOS
Para cada tipo de objeto de evento, h uma interface ouvinte deevento apropriada. Para tratar esse evento, umobjeto ouvintede evento ou a classe dele precisa implementar a interfacecorrespondente ao tipo de evento que ocorreu.
No caso da aplicao anterior, j se sabia que o evento era do tipoActionEvent. Logo, a interface que a classe do objeto ouvinte deevento teve que implementar foi ActionListener (veja a linha 63).
A figura, abaixo, mostra um conjunto de interfaces definidas nopacote java.awt.event. Outras interfaces so declaradas no pacotejava.swing.event.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
63/333
63
Linguagens de Programao II
Unidade 2
FIGURA 2.4 HIERARQUIA DE INTERFACES
Cada interface ouvinte de eventos especifica um ou mais mtodosde tratamento de evento que devem ser declarados (redefinidos)na classe que implementa a interface. A interface ActionListeners especifica um mtodo, ActionPerformed(), por isso, s preciso redefinir esse mtodo.
Um componente pode ter vrios tipos de objeto ouvinte de eventoregistrados. No caso da aplicao anterior, s tinha um tipode objeto ouvinte de evento registrado para cada componente.
-
8/3/2019 LINGUAGENS DE PROGRAMAO II - Unisul - Livro completo 2007
64/333
64
Universidade do Sul de Santa Catarina
Quando o evento ocorre, o componente GUI que o usuriointeragiu notifica (avisa) todos os seus objetos ouvintes de eventos(se houver mais de um registrado). Estes, depois de notificados,
executam o mtodo apropriado (aquele que foi definido dentro dasua classe).
Na prxima seo, voc entender mais a fundo como essemecanismo de tratamento de evento funciona.
Seo 4 Entendendo o Tratamento de Eventos
Nesta seo, voc ver como funciona internamente, emmemria, o mecanismo de tra