linguagens de programaÇÃo ii - unisul - livro completo 2007

Upload: nando25perj

Post on 06-Apr-2018

214 views

Category:

Documents


0 download

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