Você está na página 1de 316
Oo eclipse pXoM Ola toltol Melo Nol Cao ih ome lo) PIT Taos MIL Coles oa CIENCIA MODERNA PREFACIO (O desenvolvimento da linguagem Java vem sendo cada vez mais presente nos dias Te nreenet io he Coons Ot stk POEESE Wet WoT CFI Cartruto 1-0 que e Java? 13 ara visualizar toda a licenga, use as setas para cima e para baixo do seu teclado. As teclas Page Up e Page Down também podem ser usadas, Ao final vocé verd a pergunta de que accita os termos de licenga “Do you agree to the above licence terms? [yes or no]”. Digite y(Figura 1.14): f rater Car rates of any ortesiction sit aly se mpm eee eae Th apes ater uring iciada, Ao seu término, mova o ditet6rio criado para a raiz ou para um outro diret6rio se desejar (Figura 1.15): shell# my jdk1.5.0_05 / ety Figura 1.15 ‘Apis a instalagio alta apenas configuraras varidveis de ambiente. Faga logout do root (comando exit) ¢ sete as varifveis para o usuério (Figura 1.16): shellf JAVA_HOMEs=/jak1.5.0_05 shelitexportJAVA_HOME, shell PATH=SPATH:SJAVA_HOME/bin shell# export PATH shell# CLASSPATH=SJAVA_HOMEZIib shell#export CLASSPATH shell#MMANPATH-SMANPATH:STAVA_HOME/man shell# export MANPATH. $6 para que voc# entenda 0 que significa cada variéve!: © JAVA_HOME.- Diretério onde a JDK esta instalada © PATH - Diretério dos executiveis, onde inclui o do Java © CLASSPATH - Diret6rio das libs © MANPATH- Diret6riodo manual, acessfvel porman javac, Cartruto 1-0 que Java? 15 Eee bgear 3 Figura 1.16 Para testar seo Java esté corretamente funcionando, digite no terminal o comando Javac (Figura 1.17): Spackty store 40 td vr Cane tite ‘Sreify store ts tna oer ace tee ‘Seciry rare te find igen nore fies 6 Dommsanno 0 Ecurse Para que vocé nio tenha que digitar essas varidveis todas as vezes que estiver no Linux, v4 até o arquivo .bashre, localizado dentro do diret6rio usuario em que voce cesté logado. Como o meu se chama Edson, entdo ficard da seguinte forma: pico /fhome/edson/-bashre No final do arquivo, di JAVA _HOME=/jdk1.5.0_05 exportJAVA_HOME exportPATH=SPATH:SJAVA_HOME/bin No teclado, dé Ctel + X para salvar 0 arquivo. Ue thiesse'it's stresoy sutted un fccroash base ond /te/provives Assim, toda. ver,que voc® efetuar login na sua méquina, esse arquivo écarregado, configurando assim essas varidveis, Capfru.o 2 Instalando o Eclipse Agoraque 0 J2SDK esté pronto para serusadoem suamsquina, voc€iragorabaixar « instalar 0 Eclipse para iniciar o trabalho com a linguagem Java. No momento da edigio deste livro, a versio era 3.1, mas como se trata de um desenvolvimento open source, essas versbes so rapidamente alteradas. ‘Voce pode baixara IDE Eclipse no endereco http://www.eclipse.org/downloads. Embora o Eclipse seja escrito em Java, voc€ deve baixar a versio especifica para ‘sistema operacional, devido ao uso da SWT. © SWT faz.uso de recursos especificos de cada sistema operacional, mais adiante eu explicarei isso. Basicamente, existem quatro tipos de versdes, listadas a seg Release —Umacompilagioestivel do sistema Eclipse foi liberada pela equipe principal de desenvolvimento do Eclipse. Isso indica que essa versio foi testada completamente, Nomomento em que escrevo esse livro, amais recente liberagao € a 3.1, no qual voce estaré aprendendo ao longo deste livro. ‘+ Stable build - Uma compilagio, que conduz até uma liberagio pela equipe de desenvolvimento, foi testada e pode ser relativamente estdvel. Novas carac- terfsticas normalmente aparecem primeio nessas compilagdes intermedi as, Estas compilagdes so equivalentes a versbes betas de produtos de softwares comerciais. 18 Dowinaxoo 0 Ecurst ‘© Integration build - Uma compilagio no qual os componentes individuais do Eclipse slo testados para serem estiveis pelos desenvolvedores do Eclipse. Nao hhé nenhuma garantia que os componentes trabalhario corretamente. Se cles, trabalharembem a0 conjuntocompleto, uma compilagiodeintegraca0 (Integration build) pode ser promovida a estado de compilagao estavel (Stable build). © Nightly build - A mais recente versio do cédigo de fonte. Como voeé pode prever, nao hé absolutamente nenhuma garantia desta compilagio, e se voc ‘utilizar pode ter sérios problemas. v Nota: As versies descritas este Tivro dos respectivos programas se encontram no CD anexo ao livro.O arquivo utilicado para é 0 eclipse-SDK-3.1-win32.2ip (para Windows) ¢ 0 arguivo eclipse-SDK-3.1- Linux), a versdo Release até 0 momento em que o livro & escrito Descompacte no local que vocé dese ux-gtk.targe (para No Winpows Para melhor compreensio do livro, descompacte © arquivo em um diretério temporario, geralmente o Temp no Windows e arraste o diret6rio eclipse para o drive CA, como mostrado na imagem a seguir (Figura 2.1: Carrruto2—Instatanoo o Ecurse 9 Assim como é para instalar, para desinstalar basta remover o diret6rio eclipse. Para iar 0 programa, dé um duplo clique no arquivo nomeado de eclipse.exe, ‘como mostrado na Figura 2.1 ‘Voce vers que funcionou corretamente quando aparecera tela de splash do Eclipse, semelhante A mostrada na imagem a seguir. Figura 2.2 v Nora: Como a instalagie, em Windows, ndo foi feita da forma mais comum, ou sei, com asistente, vocé notard que faliam atalhos. Fasa wm atalho na area de trabalho para ter um aceso mais ripide ao programa No Linux Da mesma forma que havia sido feito com a versio Windows, baixe 0 arquivo ¢ descompacte em um diret6rio temporirio, geralmente o /imp no Linux e mova 0 diret6rio eclipse para o diret6rio que desejar. No meu caso eu movi para Ahome/edson (nome do usurio em que eu estou logado no Linux) (Figura 2.3). me | Dosuma Bove Para descompactar no Linux, execute a sequnci shell# tar -xpvzf /tmp/eclipse-SDK-3.1-linux-gtk.tar.gz v Nora: arquivo em Linsce demonstrado nese exemplo extd no formato tarball. Esse tipo de arquivo foi usado porque voct pode estar usando uma distribuigdo Linux qualquer. Existem outras opgées na hora de fazer 0 download. ee SATE En QQ0G 00 4 3 — aofiaos pEYBco mio a ova $efosee mas tac Yn Figura 2.3 Para iniciar o programa, vi até odiret6rio eclipse no Terminale inicie o executvel ‘chamado de eclipse, como mostrado na Figura 2.3. Novamente, como no meu caso 0 usudrio se chama edson, eu entraria com o seguinte comando: shell#/home/edson/eclipse/ eclipse CapfruLo 3 Conhecendo o Eclipse (O Eclipse é uma IDE de desenvolvimento de programagio, inicialmente desenvol- vida pela IBM, que, segundo noticias, gastou mais de 40 mithdes de délares no seu desenvolvimento antes de transformar essa ferramenta em Open Source para um cons6rcio, chamado de Eclipse.org, que inicialmente incluiu a Borland, IBM, Merant, QNX Software Systems, Rational Software, Red Hat, SuSE, TogetherSofi,e Webgain. (utras companhias se uniram desde entio ¢ algumas também grandiosas como Hewlett Packard, Fujitsu, Oracle e Sybase. No entanto, a IBM continua encabegando ‘desenvolvimento do Eclipse por sua subsididria, Object Technologies International (OTH), com a equipe que iniciou seu desenvolvimento, ‘OTT € uma empresa que desenvolve ferramentas de desenvolvimento de objetos orientados, com uma histéria nos leva 1988, quando a escolha de linguagens de orientagdo a objetos era Smalltalk. OTI foi adquirida pela IBM em 1996, onde a 1BM adquiriuforga em seu ambiente de desenvolvimento de orientagio ao objetoschamado Visual Age Muitos conceitos utilizados pioneiramente em Smalltalk foram aplicados em Java, fazendo da ferramenta Visual Age for Java (VA4J) um ambiente sem igual Eclipse is essentially a rewrite of VA4Java in Java. Eclipse 6 essencialmente uma reescrita de VA4Java em Java. 22 | Doumanno o Bourse (O Eclipse em si fornece apenas o ambiente integrado para a execugo dos plug-ins © uns poucos plug-ins bésicas, como editor de textos ASCII, sistema de ajuda e integragdo ao CVS. Para devem ser instalados plug-ins adicionais. iciaro desenvolvimento, em qualquer linguagem que seja, Isso quer dizer que em si, o Eclipse nflo desenvolve apenas sistemas na linguagem Fava, mas sim em qualquer linguagem que vocé queira desde que esta tenhia um plug- in de desenvolvimento para ela, e se ndo houver, vocé mesmo poder desenvolver, se quiser. A ARQUITETURA DO ECLIPSE Além da pequena runtime, a plataforma do Eclipse consiste do Workbench, ‘workspace, help,eum time de componentes, Outros ply biisico necessério para a cringio de uma aplicagio usdivel ins seajustam ao framework A PLATAFORMA RUNTIME 0 trabalho primario do runtime € descobrir quais plug-ins estdo dispontveis no diret6rio de plug-ins do Eclipse. Cada plug-in tem um arquivo XML (manifesto), que listam as conexGes que o plug-in exige. Estas conexdes ineluem extensbes que apontam para outros plug-ins. Essa extensdo aponta para plug-ins que so requeridos. Por ter um nimero de plug-ins potencialmente grande, muitos nfo sfo carregados até que eles sejam requeridos de fato, minimizando assim tempo de inicializagio © recursos do sistema, O workspace © workspace & responsivel por administrar os recursos do usuério que sio “organizados em um ou mais projetos. Cada projeto corresponde a um subdiretério do Jdiret6rio de workspace do Eclipse. Cada projeto pode conter arquivos e diretérios; rnormalmente cada diretério corresponde a um subdiretério do ditet6rio do projeto, ‘mas um diret6rio também pode ser unido a um diret6rio em qualquer lugar no sistema. Quando voc@ iniciar pela primeira vez 0 Eclipse, vocé vé uma caixa de didlogo como a mostrada na Figura 3.1. Cartruto 3 Constecenpo o Bourse B ‘Voce pode mudar o seu espago de trabalho, clicando em “Browse”, ou aceitar 0 local proposto pelo programa ‘Se vocé desejarna ver mais essa caixade dislogonainicializagdodo Eclipse, basta marcar acaixade checagem “Use thisas the default and do not ask again”, antes de confirmar. Workspace Launche 7 Usetis asthe defo ond ort atk gan Figura 3.1 [io se preocupe, se depois voce quiser alterar isso, mesmo marcando a caixa de ‘checagem dessacaixade didlogo, véaté omenu File cemSwitch workspace voce pode alterar a érea de trabalho do seu Eclipse. ‘A seguir voct tem uma visio da mesma tela s6 que em Linux (Figura 3.2): eee ‘wprduatare tre yr ject nal cates mcapsce ‘Shecse a meaner tome ert enon ed eet arth dena deta as Figura 3.2 24 | Desmunoo 0 Basse O WorkBeNcH © Workbench € a interface grifica do usuario do Eclipse. Além de exibir 0s familiares menus e caixas de ferramentas, € organizados em perspectivas que contém visdeseeditores, Uma dascaracteristicas notdveisdo Workbench, diferente damaioria das aplicagdes Java, o look and feel € como uma aplicagao nativa. Isso ocorre porque cle foi construfdo usando Eclipse’ Standard Widget Toolkit (SWT)eJFace, um toolkit de interface de ususrio construfda em cima do SWT. Diferente dos padres grificos do Java, como AWT ¢ Swing, que emula o ambiente gréfico nativo, o SWT mapeia diretamente os grificos nativos do sistema operacional. ‘SWTéumdosaspectos mais controversos do Eclipse, porque SWT deveser portado para cada plataforma que suporta 0 Eclipse. Isso ndo chega a ser um problema, porque SWT ja foi portado as plataformas mais populares (incluindo Windows, Linux/Motif, Linux/GTK2, Solaris, QNX, AIX, HP-UX, eMac OSX). importante salientar que o Eclipse nfo 0 forgaa raat com seu Toolkit, a menos que voc queira fazer plug-ins, vocé pode continuar programando em AWT € Swing normalmente, quando se tratar de programar em Java, € claro seine |e 0-4 lage. [o4 [7B Ih 0-02 I = Bara States Figura 3.3 Carrruto 3~Coxscenno o Ecurse 25 Asbarrasde titulo, ferramentas, perspectivaestatustendem a ficarnomesmo local de uma perspectiva para outra. Enquanto vocé pode personalizar o aparecimento conteiido das barras, as barras estardo sempre disponiveis € nos mesmos locais. © Barra de Titulo: A barra de titulo sempre exibe o nome da perspectiva atual. © Barrade Menu: Estaéabarra de menu global do Eclipse, que lhe permite fazer todas as tarefas gerais. As op¢des disponiveisem cada menu também mudario dependendo do que estiver selecionado. ‘+ Barra de Ferramentas: Esta éa barra de ferramentas global do Eclipse que também the permite executar tarefas gerais ¢ tarefas especificas para itens selecionados. ‘+ Barra de Status: Esta linha exibe tipicamente informagio sobre o item selecionado, embora possa conter informagies adicionais que dependem da tarefa voct estéexecutando atualmente. Por exemplo, quando voce estiverem um editor de texto, a barra de status poder mostrar sua posigdo atual dentro do documento. ¢ Painel do Editor: exatamenteoque o seu nome dia: 6 uma ferramenta para editar documentos. Esses documentos podem ser qualquer coisa desde fontes de programas ou configurag6es de sistemas. ‘* Views: Views mostram grupos de objetos relacionados. ‘TEAM SUPPORT (© plug-in team support facilita 0 uso do controle da versio (ou configuragio administrativa) do sistema para administra os recursos no projeto do usuério e define ‘workflow necessrio para salvare recuperarum repositério.A Plataforma Eclipseinclut tumcliente paraum Sistemade Versdes Simultineos (Concurrent Versions System -CVS), HELP ‘Como a prépria Plataforma de Eclipse, © componente de ajuda é um sistema de ‘documentagio extensivel. Ferramentas podem adicionar documentagio em formato HTML e, usando XML, define-se uma estrutura de navegagio. Refletindo 0 modo ‘como plug-ins se conectam com outros plug-ins, ferramentas de documentagio podem inserirt6picos em uma drvore de topico preexistente 26 | Dowruoo 0 Bourse MULTIPLATAFORMA, LINGUAGENS DE PROGRAMAGAO E IDIOMA Emboraa Plataforma Eclipse sejaescritana inguagem Javae seu uso mais popular € como sendo um IDE Java, o Eclipse & neutro em linguagem de desenvolvimento. O que o torna mais atrafdo por desenvolvedores Javaé por parte devido aos seus intimeros plug-ins voltados para essa linguagem, mas com plug-ins adicionais, voc® pode Programar em outras linguagens como C/C++, Cobol e até mesmo C #. Eclipse também & neutro com respeito ao idioma. Da mesma forma que vocé pode dara plataforma acapacidade de programarem outra linguagem de programagao,com plug-ins voeé também pode alteraro idioma nativo.A IBM doou um pacote de! que suporta o chines (tradicional e simpli coteano, portugues (brasileiro) ¢ espanhol. mas cado), frances, alemo, italiano, japonés, ‘Vocé pode baixar 6 pacote de idiomas do Eclipse no mesmo site da plataforma, Carfru.o 4 Criando seu primeiro projeto Depois de voc’ ter tido um primeiro contato com 0 Eclipse, agora esté mais que na hora de iniciar um projeto, No menu File, vé até New e clique em Project (Figura 4.1). Figura 4.1 8 Domsaxno o Ecurse Selecione a opgiio Java Project e clique no botio Next Figura 4.2 Digite em Project name: MeuPrimeiroProjeto (Figura 4.3) ¢ clique em Finish. Figura 4.3 CCarrruto 4 Criasoo sev PRNRo PROJETO 2» CRIANDO UM PACOTE ‘Como voe# pode ver, criar um projeto em Eclipse no é complicado. Agora, vocé aprenderé a criar um pacote. Clique em File, New e clique em Package (Figura4.4). Em Name digite onome do pacote Figura 4.4 ¥ Mas 0 Que € rAcoTE? Visando ensinar ndo somente desenvolvedores experientes em Java, ese pequeno quadro std destinado a explicar 0 que € pacote em Jawa para os iniciantes ¢ relembrar os mais “velhinhos" na linguagem. Os pacotes séo estruturas de diretérios utilizadas para organizar classes interfaces. Os pacores fornecem um mecanismo para reutiliagdo de software. Um beneficio dos pacotes & que eles fornecem uma convencéo para nomes de classes tinicas, Iso possbilita a reutilizarho de software. Para que as pessoas fornesam nomes de pacotes rinicos, evitando assim conflitos de nomes, a Sun Microsystems especifica uma convengdo para 50 ||) Deine 6 Beet nomes de pacotes. Cada nome de pacote deve iniciar com seu nome de dominio Internet na ordem inversa. Como 0 nome do dominio que eu tenho na Internet é integeator.com.be: eu inicio na ordem inversa 0 pacote com br.com.integrator. Depois de invertide seu dominio, voce pode escother ‘qualquer outro nome para seu pacote. Como o pacote pertence ao capitulo 4 do livro, 0 final fica com 0 nome cap0s. Assim sendo, 0 nome completo do pacote utilizado foi: br.com.integrator.capO, CCRIANDO SEU PRIMEIRO ARQUIVO JAVA ‘Volte ao menu File ¢ em New clique em Class Em Namedigite OlaMundo. Marque opeao, se nao estiver marcada, publiestatic void main(String{] args) ecliqueem Finish. Cartrui04—Crasnoseurnvemorsoero | 31 Nesse momento voe# terno painel editor o arquivo OlaMundo,javaabertoe jécom alguns eédigos em Java jé escritos, |rs-We RMS -0-4-\aaO-|O¥ [FB |fi-t > alte (Hretare Fon] =) 58 me) {wes seen” Para que voc tenha esse arquivo funcionando com algum contetido, adicione 0 ‘c6digo a seguir em destaque, no local indicado (Figura 4.7): 1 public starte void main(Stringl args) ( a TODO Auto-generated method stub 3 ‘System.out.printIn(“OléMundo!”); 4) 2 Downeanoo 0 Ecurse Dcage Bescon RE ANT wate ease cinta ( + te oe " = gsc statte void saacserseat a8) ( ‘Sheen-ooptati("o Rass)2 Figura 4.7 Note que no topo do painel, onde se encontra no nome do arquivo, aparece um asterisco (*) antes. Isso indica que esse arquivo foi alterado. Para salvar as alteragies, ‘voc8 tem diversas formas, umadelas €clicarcom obotio direitodomouse sobre otexto do editor e selecionar no menu de contexto a opgio Save. Cormo4-CrnivosvmmenorieeT> | 33 (Outra forma seria usando o menu File opco Save ou utilizar 0 atalho Ctrl +S. Para compilare executar o arquivo Java, vocs irdatéo Runena ope Run Asclique em Java A pplication, Note que na View inferior ao editor, apareceré um painel chamado Console (Figura 4.10). (rates ai: [omen = elt let Figura 4.10 Esse resultado seria o da execugio do arquivo Java em um terminal aps sua compilagio ¢ execusio. CapiruLo 5 Aprendendo um pouco sobre Java Se voc® é iniciante na linguagem ¢ escolheu esse livro como seu ponto de partida rnesse mundo fascinante, seja bem vindo, Esse capitulo estard dedicado total e exclusivamente aos conceitos de Java, bem como também na sua utilizagdo com o Eclipse. ‘Agora, se caso vocé seja um desenvolvedor experiente, mesmo tendo bastante conhecimento, no ignore esse capftulo. Os exemplos contidos serio de suma impor- {ncia para 6 seu bom desempenho em Java utilizando a plataforma Eclipse. O pRINCIPIO BASICO DE JAVA Os aplicativos Java automaticamente comegam executando em main, Os parénte- ses depois de main indicam que ele € um bloco de construgo do programa, chamado de método, (Ométodo main éoexecutor Java, e sempre queo seu c6digo tiver queserexecutado ‘como um programa, ele deve constar no cédigo-fonte. Apalavra void indica que esse método executardatarefaaele definido. Os métodos sto capazes de realizar uma tarefa ou retornar informagdes quando completam suas tarefas 36 Dominaxoo © Ecurse ‘A chave esquerda "{", indica o inicio de um bloco,o corpo da definigo do método. [Uma chave direita ")'deve ser entio colocada para finalizar © bloco. System.out.printin('"OléMundo! Instrui a miquina virtual Java que seu programa quer exibir os caracteres que estio entre aspas. Na verdade, esto entre aspas porque sio strings, toda string fica entre aspas Note também que na finalizago de uma linha, voc deve colocar um ponto-e- virgula (;). A linha inteira, incluindo o ponto-e-virgula, é chamada de instrugio. VARIAVEIS E OPERADORES AAs varidveis devem ser sempre declaradas, isso porque cada uma pode conter um tipo de dados, primitivos ou objetos. Otipode dados ¢ importante para que o compilador saiba quantos bytes de memria ‘devem ser reservados & varidvel (0s tipos de dados podem ser primitivos, como os encontrados na maioria das linguagens existentes. Tiros DE DADOS INTEIROS Existem quatro diferentes tipos de dados inteirose podem armazenar valores dentro dos seguintes intervalos numéricos: Tabela de Tipo de Dados Inteiros Tipo Armazenamento_Extensio im bytes 2,147 483,648 & 2,147,483, 647 shot’ 2bytes -32,768 232,767 long 8 bytes -9,223,372,036,854,775,80829,223,372,036,854,775,807 byte__Ibyte 128127 Cartruto $— Artexpespo us rouco some Java 37 Em Java os tipos inteiros silo sempre capazes de armazenar tanto valores positives como negativos. Tiros DE DADOS EM Ponto FLUTUANTE Existem dois tipos de representagdes para valores numéricos em ponto flutuante ‘que se diferenciam pela preciso oferecida. ‘Tabela de Tipo de Dados em Ponto Flutuante Tipo Armazenamento _Extensio float 4 bytes Aproximadamente £3.40282347E+38F (6-7 digitos decimais significativos) double 8 bytes, ‘Aproximadamente + 1,79769313486231570E+308 (15 digi- tosdecimais significativos) Onome double refere-se ao fato de ter os nimeros duas vezes mais preciso que o tipo loa. Tipo DE DADOS DE CARACTERE O tipo de dados char denota caracteres segundo 0 padrio Unicode de representa ‘20. Enquanto uma String ¢representado por valores entre aspas - "valor"; tipo char é representado por valores entre aspas simples - valor. ‘Como o padraio Unicode foi projetado para lidar com todos 0s tipos de earacteres «em todos 0s idiomas, ele tem um cédigo de bytes, ocupando 16 bits, sem sinal, oque Ihe permite representar até 32.768 caracteres diferentes. ‘Alguns caracteres so considerados especiais, pois nfo possuem uma representa- io visual, sendo que em sua maioria sio caracteres de controle e outros so de uso reservado pela linguagem. Esses caracteres podem ser especificados dentro dos programas como indicado na tabela a seguir, precedidos pela barra invertida V': 38 Donmsaxoo 0 Ecurse ‘Tabela de Tipo de dados de Caractere Caractere Nome Signitie wb Backspace Retrocesso w Tab Tabulagio wn Linefeed ou NewLine Nova linha v Carriage return Retorno de carro v Double quote Aspas v Single quote Apostrofo, wv Backslash Barra invertida Tipo DE DADos Locico Em Java tipo I6gico é 0 boolean, capaz de assumir valores como false (falso) ou true (verdadeiro). DECLARAGAO DE VARIAVEIS Uma varidvel € um nome dado pelo programador & uma informagio no qual se deseja armazenar alguma informagio, Essa informagio pode ser definida pelo seu tipo Primitivo, ou seja, caractere ou niio, ou pode ser um objeto. ‘Uma variavel em Java pode ser um caractere ou uma sequéncia de caracteres, que devem seralfabéticos e numéricos, obrigatoriamente iniciado com um valor literal ou por um caractere '_' de sublinhado (underscore) ou'S'(ciftio). Como Java faz diferenga entre letras maidsculas ¢ mindsculas, varidveis como Teste ¢ teste sto consideradas diferentes, Precedendoa variavel,emsuadeclaragio, vocé deve colocar seu tipo. Porexemplo: int teste; double total; (Cartruto 5 Araexpenno un r0uco some Jave 39 Alm dessas regras bésicas, voc8 também deve tomar cuidado com as palavras que so reservadas pela linguagem, que obviamente, sio de uso da linguagem ou se encontrar reservadas para uma futura incluso na linguagem Java, Portanto,evite declarar varidveiscomo:for, new, class, do, final, operador, rest, var. ‘Também ¢ possivel declarar varidveis de mesmo tipo separados por virgula: double total, valor1, valor2; CoMENTARIOS Como toda linguagem de programagio, vocé pode fazer comentérios em seu cédigo-fonte tornando assim uma forma de documentar os e6digos deixados, que poderd ser uilizado por outra pessoa, pela equipe de desenvolvimento ou até mesmo Por voc, afinal, se voe® levar muito tempo para rever um c6digo desenvolvide, pode ser que vocé nem se lembre de como foi desenvolvido, 0 Java aceita ués tipos de comentérios: de linha, representado por duas barras (/ ‘),ode miltiplas linhas, representado por barra asterisco.e finalizado por asteriscobarra (U* *),@ um terceiro que se assemelha a0 comentério de mélkiplas linhas, que tem 0 prop6sito de documentar o programa: 1 Comentério de documentagaio * que pode ser feito em muitas linhas ” © comentério de documenta é posicionado imediatamente antes do elemento a ser documentado e tem seu contesdo extraido automaticamente pelo utiitério javadoc fornecido juntamente com oJDK. Para criar um comentério no projeto, v4 a0 menu Project e clique em Properties. Nacaixade didlogo, véatéacategoria Java Code Style. Em Configuregenerated ‘codeand comments, no item Comments sclecione Types. Clique nobotio Edit, Nacaixa de didlogo Edit Template digite o comentério a seguir: 40 | Dowmanoo 0 Ecurse we * eauthor Ecison Goncalves * para alterar esse comentario v4 em: * Project ~ Properties - Java Code Style - * code Templates - Comments - Types Figura 5.1 ‘Agora, no item Code selecione New Javatfiles. CCartruto 5—ArnespeNoo une rouco Sonne Java 41 Clique no bot Edit. Na caixa de didlogo Edit Template, digite 0 texto a seguir: I * Criado em $(date} + Bese comentario 26 & vAlide para o projeto + € um exemplo de comentarios gerado por template. Para alterar va * Project - Properties - Java Code Style ~ Code Tenplates - Code - New Java files v7 ${package_declaration) ${(typecoment } $(type_declaraticn} Clique no botio Insert Variable para inserir as varidveis que desejar. Note as variaveis existentes, como mostrada na imagem a seguir (Figura 5.3) 2 Downeaxpo o Ecurse Ao iniciar a criago de uma nova classe, marque a opso Generate comments. Which method stubs ou youth to eats? I pub tat ad mahi Ser aos) F constructs fom siperdass trherted abstract methods Do you mat to add commer as corigwod nthe popatisofthe rent ret? Seam, Figura 5.4 ‘Veja como ficou 0 seu cédigo com a geragto dos comentirios adicionados na Figura 5.5 a seguir: Cartruro5Arespevoo um rovensoaarjava | 43 “hoses io cre tages Figura 5.5 OPERADORES A linguagem Java oferece um conjunto muito amplo relacionado a operadores destinados a realizar operagies aritméticas, l6gicas, relacionais ou de atribuigao. Tabela de operadores aritméticos Operadores ‘Significad Exemplo digo ou sinal positive a+bousa Subtragio ou sinal negativo a-bou-a ‘Multiplicagio atb Divisio a/b Resto da division am Incrementovitirio +a ou ate Decrementounitério “ Dommanoo o Ecurse ‘Tabela de operadores relacionals Operadores Significado Exemple = Igual aseb Diferente alsb > Maior que ab < Menor que >= ‘Maiorou iguala Menor ou igual a ‘Tabela de operadores Isgicos Operadores Significado Exemplo ae E6gico (and) a&&b u ‘OU Légico (or) alt ! No (n00) a 0 operador de atribuigdo em Java € 0 sinal de =". EsTRUTURAS DE CONTROLE Em algumas circunstincias, quase que insimeras vezes, voc8 precisa naturalmente cexecutar instrugGes de um programa baseado em condigGes, no qual podem ser baseados para acessar informagSes somente se a condigio for satisfeita ou até mesmo repetir uma ddeterminada quantidade de vezes a mesma instrugio até satisfazer uma condigo. A linguagem Java possui diversas estruturas de controle destinadas ao controle do fluxo de execugto, As estruturas de controle de execugio estio divididas em: © Estruturas de desvio de fluxo ~if..elseif..else; switch * Estruturas de repetico condicional - for, while, do...while © Estruturas de controle de erros - try...catch...finally © Mecanismo de modularizago - métodos CCarfruto 5 Aruenpesoun roven sons Jaen 4s A ESTRUTURA IP...ELSE IF...ELSE A conhecida instrucio de desvio de fluxo de execucio, oif..elseif..else permite aselesio entre dois oumais caminhos distintos emumacxecusio, dependendo sempre do resultado avaliado na estrutura, que retoma verdadeiro ou falso em umaexpressiio Vogica, Crieum segundo projeto, chamado de ConhecendoJava. Crie uma nova classe no Eclipse e coloque onome de EstruturaDeControlelf. Mantenha selecionada a opto ‘Public static vold main (Stringt args). Digite 0 cédigo em destaque a seguir: EstruturaDeControtelt java public class EstruturaDeControleté ( Public static void main(Stringl] args) ( 4f( Integer.parsetnt ( args [0] ) > Intager.parsetnt ( args [1] ) )( System.out.printin("0 valor inicial ¢ maior que o valor final"); d ‘else i£( Integer.parseint( azgs(0] ) < Integer parseInt( args{1] ) )( Systen.out.printin("0 valor inicial menor que o valor final"); y etse( Syaten.out.printin("0 valor inicial @ igual ao valor final"): d Para rodar, no menu Run clique em Run... Em JavaA pplication, clique como botiodireito domousee selecioneaopytio New “no mena de contexto (Figura 5.6). 6 Dowinsnoo o Beurst Figura 56 Ao surgir EstruturaDeControlelf, v4atéaguia Arguments, edigite os aémeros 1 ce depois de um espago, 0 mimero 3, como mostrads na imagem a seguir (Figura 5.2), clique em seguida no botio Run © an sem | me | ct] son PR cree 414] ran wares serena otra Setry om dan tre ery Figura 5.7 (CartruioS ~Amevorsine uit rouco som JAVA 7 Observe o resultado na parte inferior. em Console. Volte novamente em Run € ccoloque outros argumentos para que voce possa testar as outras condigDes. A ESTRUTURA SWITCH A estrutura switeh aceita uma varidvel e a compara com uma lista de constantes, exccutando uma Tinka de eddigo (ou um bloco) guandoencontrar una corresponén- cia. mito empreyad na avalinglo de uma seqiécia de testes, como.ocore com a insiruga0 ets felse Prsm,essaesruura€limitada, poucousadaem um ego save Da mesma forma que no exemplo anterior, erie uma nova.classe, com o nome de EstruturaDeControleSwitch ¢ ailicione o cddigo mostrado a seguir em destague: public clase cot Public static void main (st: int valor; valor = Integer.parseInt ( args{0) ) > auitch( valor )( case 1 case 2: System.out.printin("0 valor 6 1 ou 2") :break; ease 3: System out printla ("0 valor é 3"); break: ‘case 4: System.out.printia("O valor é 4"); break; Gerault: System.out.printin("0 valor @ maior que 4"); ) Executando a mesma sequéncia do exemplo anterior, na caixa de ditlogo Run, ‘idiione na guia Arguments niimero 2¢em seguidaclique no hotdo Run, Execute fovamente com outros niimeros, 48 | Downawno o Eeurse A ESTRUTURA DE REPETIGAO FOR Asestruturas de repeticio condicionais, mais conhecidas como loops, so também muito tteis no desenvolvimento de sistemas, pois permitem que um determinado trecho do seu cédigo seja executado diversas vezes, baseados em uma condigio. © loop for é composto por trés segdes: inicio, onde vocé da ele um valor inicial paracomegaraexecueo, condi, onde feito um teste no qual ele verificara sempre ‘em uma nova repetigio, se foi ou ndo, satisfeta a condigio; ea atualizagio (ineremen- to/ decremento), onde o loop adicionaré ou removers um valor, enquanto a condigio no for satisfeita. Essas segdes so opcionais, ou seja, podem ou nao ser preenchidas. O que normalmente no acontece. EstruturaDeControleFor java public class EstruturaDeControleFor ( Public static void main(String argsf 1) { for (int contar = 0; contar < 10; contart+) { ‘System.out.printin("0 valor da variével contar 6: "tcontar) ; ) ‘Comoesse c6digo de exemplo ¢ bem simples, nio é necessério iraté o menu Run para rodé-lo. Na lateral esquerda, clique sobre o nome da classe com 0 botio di ‘do mouse, em Package Explorer, ena opca0 Run As clique em Java Application, ito O Loop WHILE ‘Acestrutura de repetigdo while ndo possui uma segao para inicializago e nem para atualizago, Esse loop apenas testa a expressio l6giea ¢ executa um comando ou bloco de instrugdes enquanto ela resultar num valor verdadeiro em sua condigio. A inicializagto ea atualizagio da varidvel que controla o loop devem ser feitas uma fora do loop e a outra dentro do bloco de instrugdes respectivamente. Crie uma nova classe e a chame de EstruturaDeControleWhile. CCantruto $~ArnenoeNDO UM POLCO SOBRE JAVA 0 EstruturaDeControleWhile.java public class Estruturabecontrolewnile { public static void main(String args{1) { Ant contador=0; while (contadorInteger.parsernt (args{0])) { Systen.out.printin valor) ; valor ~ , ) catch (ArrayIndexOutofBoundsException erro) { ‘System.cut.printin("Voc8 ndo forneceu um argumento") ; » catch (mberFormatException erro) ( System.out.printin("Vooé no forneceu um numero inteiro") » ) Quando executar, voc8 deverd passarargumentos. Execute com nenhum argumen- to ou uma letra para ver a excegio. (Carfruto5~Araexoenino uM rouco sosne Java st Figura 5.8 v Nota: Para wm iniviante, & muito bom visualizar problemas que ocorrem quando nao existe 0 tratamento de excecbes. Faca 0 teste nos cbdigos feitos anteriormente, onde hd a passagem de argumentos, deixando esses em branco para vocé ver 0 langamento de excegées exeeutadas pelo Java no sole. © formato finally ficaria assim: text //dixetiva normal ? ) finalty( //diretiva de erro ) IETODOS ‘Um método é uma fungo que representa um conjunto de ages que um programa deveexecutar,Criamosummétodo quando desejamos que essasagées sejam reutilizadas ‘em diversas partes do seu programa, Com isso evitamos a repetigfo de um mesmo ‘conjunto de procedimentos sem necessidade. Lic class Desenvetodos | void metodotim( ){ ‘System.out.printin( ) 90 6 um método sem argumento") ; 2 Dowmeanpo o Ecurst Ant metododois( ) { int valor4=10,valor2=13, Ant total = valori*valor2; return total; ) double metodefres(int argi, int arg2)( double total; total= (double) argi/ (double) arg2; return total; ) public static void main(Stringl ] args) ( DesenvMatodos desM = new Desenvitetodos( ): destt.metodoUa( ); System. out. printin (desM.metodoDois ( )) ; double totaladesM.metodoTres (10,5) : System.out.printin(""+total) ; ‘Os métodos sempre slo seguidos de seu tipo, int e double por exemplo, podem passar ou no argumentos, podem retornar ou nio valores. Oprimeiro: inicio do método a palavra void. todo, metodoUm, ndo retorna valor algum, porisso vocé encontrano, (Osegundométodo, metodoDois, retorna um valor, voc® encontra tipo dométodo em seu inicio e a palavra return no final do método. Otterceiro método, metodoTres, também retorna um valor, mas também aceita argumentos, ou seja, vocé pode definir novos valores todas as vezes em que chamar esse método. ‘Carfruto 5 Artexoexpo um rouco sen: JAVA 3 ¥ Onservacio: Tado método que nao for void deve ter 0 retorno de um valor, utlizando a palavra cewurn, Cada método sb pode retornar um valor. A PROGRAMAGAO ORIENTADA A OBJETOS © Java é uma linguagem orientada a objetos, ¢ como tal, voc® nto poderia deixar de ter aqui um pequeno resumo do que seria essa tal orientagio a objetos. Uma grande quantidade de pessoas que desenvolvem em outras linguagens de programacio estio muitas vezes familiarizadas com a orientago de objetos, mas devido a flexibilidade da linguagem, muitas vezes por puro capricho o programador desenvolve de forma procedural, como era feito antigamente. ‘A programagaio orientada a objetos, também conhecida como OOP, € uma maneira de construir programas de computador que espetham 0 modo como os objetos so ‘montados no mundo fisico. ‘Com esse estilo de desenvolvimento, voce poderd fazer programas mais lexiveis, reutilizdveis e inteligentes. OBJETOS E CLASSES A programagiio orientada a objetos & baseada no modo como, no mundo fisico, 0s objetos so constituidos de muitos objetos menores.. Por exemplo, vocé pode observar esse livro que, para t@-o na forma como voc8 © ‘¥, ele primeiro foi uma érvore, que se transformou em celulose, depois em um papel ‘eem uma gréfica, vocé tem 0 livro como 0 vé. E ai? Voce deve estar se perguntando, Bom, primeiramente uma drvore (objeto inicial), pode sertransformadaem diversascoisas, como madeira, paraconstruicasas, ‘em carvio, para um maravilhoso churrasco. 44 quando voc8 transforma em papel, esse pode ter varios tipos, desde para um livro até para um cademo, © importante de tudo isso € 0 conceito de que, voc@ inicia um desenvolvimento sendo uma raiz de tudo, essa € érvore. Depois voc# reutiliza esse arquivo drvore para transformé-lo em diversas coisas, como papel, carvio, lenha, Natransformagao desses 4 Dowuxaxoo 0 Ecurst diversos objetos, voc® pode utiliza-los para diversos fins, o objeto papel, por exemplo, vira livros, cadernos, envelopes ¢ etc. Um outro recurso importante na programagio orientada a objetos sio as classes. Classe é um modelo usado para criar um objeto. Todo objeto criado a partir da mesma classe tera recursos semelhantes, se niio idénticos.. Asclasses incorporam todos 0s recursos de um conjunto especifico de objetos. Em um programa orientado a objetos, voc® no cria objetos individuais. Vocé define, em ver disso, as classes usadas para criar esses objetos.. Uma classe inicial pode servir como um modelo abstrato. Para ter algo realmente concreto, para que possa ser manipulado, voce pode usar essa classe para eriar um objeto, A criagio de um objeto a partir de uma classe ¢ chamado de instanciagio e os objetos criados também so chamados de instdincias. REUTILIZANDO OBJETOS Com a linguagem Java, vocé tem diversos objetos que partem de uma classe com tum modelo abstrato, que instanciado, dio novas caracteristicas a0 objeto. ‘Ao escrever um projeto Java, vocé projeta ¢ constrsi um conjunto de classes. ‘Quando 6 programa ¢ executado, 0s objetos so instancindos a partir dessas classes € usados de acordo com a necessidade. Felizmente em Java nada 6 iniciado do zero. Voc® pode construir diversas classes tilizando um modelo j4 existente. Nesses modelos existentes, voc tem objetos sgrificos, som, objetos de desenvolvimento para a Web e até para aplicativos méveis como celulares ¢ computadores de mio, CarfruLo 6 Conhecendo a interface do Eclipse Quando a plataforma Eclipse foi desenvolvida, seu time de desenvolvedores ) display.dispose( ); Em JFace: Janela.setBlockonopan (true) : Janela.open(): Display. getCurrent () .dispose(); © primeiro método chamado, setBlockOnOpen, se verdadero, chama o préximo ‘método, open, para entrar em umeventoem loop, similarao conhecido eventoem loop usado no SWT. Embora JFace perea um pouco da elegiincia de seu cédigo no uso do terceirométodo.aserchamado, Display.getCurrent( ).isposet ) ainda sim, seucédigo é mais claro de ser usado. “ Downanno o Eeurst Muitos programadores Java se identificam mais com JFace, pois sua similaridade com Java é muito grande. ‘Se voc acha que ¢ 6, ndio se preocupe, mais adiante serio abordadas de forma mais, abrangente essas duas bibliotecas do Eclipse. CapfruLo 7 ‘Trabalhando com o Editor Visual do Eclipse Qualquer um que trabalhe hoje com desenvolvimento vem sempre com a mesma pergunta inicial: onde eu desenvolvo o programa de forma visual? Isso acontece porque muitas outras ferramentas fizeram uma cultura no desenvol- vimento de aplicativos visuais. Apesar de alguns entusiastas do desenvolvimento dizerem que a parte visual “suja ‘0 cddigo”, todos concordam com uma coisa: desenvolver aplicativos em programas deedigao visual € muito mais répido eno mundo como estamos vivendo, tempo é tudo. No fim de 2003, a equipe de desenvolvimento do eclipse.org liberou a primeira verso (0.5) do Eclipse Visual Editor (VE) que, inicialmente 6 havia suporte para design de AWT/Swing Nos dias de hoje, voe8 tem o Editor como em SWT. sual que tanto desenvolve em AWTISwing ‘Uma das caracteristicas principais do VE € que vocé tem a programagto de duas formas: uma que as mudangas no plano visual refletem imediatamente no c6digo Java gerado, ¢ outra que, mudangas no eédigo Java 6 refletido no plano visual, assim que 0 c6digo fonte tenha sido salvo. Pa INSTALANDO O VisuAL Eprror (VE) Para instalar 0 VE do Eclipse antes vocé tem que ter instalado o Eclipse Modeling, Framework (EMF). OEMF pode serbaixadonoendereco http:/www.eclipse.org/emt/ OVE pode ser baixado noenderego http://www eclipse.org/vep/. Depois de ter esses dois arquivos, instalar um novo plug-in no Eclipse é relativa- mente facil. O exemplo a seguir € baseado na versio do Eclipse utilizada na edigo desse livro, ou seja, 3.1 ‘Oarquivo EMF esti compactado, no formato zip, comonomede emf-sdo-runtime- 21.0. Descompacte esse arquivo. Vocé notaré dois diret6rios, um chamado plug-ins & outro features. 0s arquivos do diretério plug-ins devem ser colocados dentro do diret6rio plug- ins dentro do diret6rio raiz do Eclipse. O mesmo se faz.com o diretGrio features. importante que o leitor entenda que deve se movido todo o contesido de dentro desses diret6rios. ‘Omesmo deve ser feito como VE, que esté também compactado, no formato..zip, comonome de VE-SDK-1.1.0.1.zip, Apds ter feito isso, feche a plataforma Eclipse e inicie novamente. Para visualizar os plug-ins instalados, vé ao menu Help e clique em About Eclipse SDK. Clique no botdo Plug-in Details, Em Plug-in Name voc€ verd virios plug-ins e inclusive os que voc instaou. ‘Cartruto7 ~Trannisisxdocom oEprtoR VisuaooEcurse | 67 rere Figura 7.1 ¥ OBSERVACKO: Voce encontrard esses arguivos também no CD que vem anexo ao livro. CRIANDO SUA PRIMEIRA APLICAGAO NO Visual Eprror Gragas aoseueditor WYSIWYG (what you see is what you get),o Visual Editortem um modo facil de desenvolver uma interface. Parainiciar, rie umnovoprojetoem JavaProjectechame-ode ProjetoVVisualEditor. Adicione a biblioteca SWT também (no se esquega de marcar a opgo para incluir 0 JFace). Voc fard nesse capitulo aplicativosusando Swing comotambémoSWT/Face. Para criar sua primeira tela em Swing, vi ao menu File, em New clique em Other. Nacaixa de dislogo New sclecione na pasta Java a opgio Visual Class (Figura 7.2). Clique em Next logo apés. 6 Dowmanpo o Ecurse Figura 7.2 Na proxima tela, voc€ colocard no campo Name o nome da sua classe, MinhaPrimeiraTela Visual. Em Style, selecionenapasta Swing aopgio Application, (Figura7.3). Note queem Superclass vocé verd javax.swing. JFrame, Cliqueem Finish para terminar o assistente. Figura 7.9 (Carfruto7 ~Teanantanoo como Eorror Visuat 00 Ecurse o Voce terd uma tela com varios itens, onde o principal é a janela que é apresentada na imagem a seguir (Figura 7.4), Figura 7.4 ‘Como vocé pode dispor os painéis onde voe® desejar, arraste para a posigo que ‘mais Ihe for confortivel. Para uma melhor compreensio do letor, mostro na imagem a seguir (Figura 75) a disposigio das views que estou usando para editar esse livro, inclusive também, a forma como prefirotrabalhar. 7 Dowananno 0 Ecurse Ao escolher Application, voot teve, através do assistente do Visual Editor, uma pequena janela com alguns elementos pré-configurados logo de inicio. Para que a adaptaco ao VE seja répida, vocé ird comegando a mudar o titulo, Clique no titulo da janela, onde esté escrito Application. Na primeira vez sera apenas para selecionaro local. A segunda indicardao VE que vocé desejaeditaro titulo. Note que vocé ter uma pequena caixa de edigo com 0 titulo atual j& selecionado (Figura7.6). = ea e Figura 7.6 Digitenolocalo texto Minha Primeira Aplicagiono VE epressioneatecla Enter paraconfirmar. Uma outra forma de voc® poder alterar o titulo da sua aplicagao € indo até Properties e em tile alterando titulo da forma desejada e confirmando com a tecla Enter (Figura77). robles Sree: Onder Cee Figura 7.7 [Na view Java Beans voc® tem uma érvore de componentes, onde voeé pode acessar ‘Componentes que voc® tem no seu aplicativo de forma répida, podendo assim alterar suas propriedades. Escrevo isso porque voce ter situagGes em que haverd muitos componentes sobrepostos ¢a tiniea forma acess{vel, de maneira I6gicae répida, serd nessa érvore de componentes. (Carrruto 7 —Trasaustaxoo com o Eorror Visuat 00 Ecurse n Figura 7.8 Voce também tem uma paleta de componentes, onde no desenvolvimento do seu aplicativo visual, voc€ pode adicionar outros itens que niio sejam os ja existentes ‘vindos do seu assistente. n Donmaxoo 0 Beurse Existe também uma view separador, do tipo split, que mostra o c6digo gerado até ‘© momento, da aplicago que voe® ja vé no seu editor visual No local indicado vocé pode ‘maximizar ou minimizar, ou se preferir, arrastar parafazer um ajuste personalzado Figura 7.10 Para que vocé compreenda um pouco do desenvolvimento com 0 VE aqui, na Palette,cliqueemSwing Components. Clique no componente JButton, e com 0 cursor vé até o centro da janela. Note que surgirdo linhas guias que 0 auxiliardo indicando o local onde voc® estaré adicionando © novo componente (Figura 7.11), Figura 7.11 CCarfruto7—Tranatsiaxoo com 0 Eorror Visual D0 Ecurst 2 Assim que vocé clicar no local que desejar, apareceré uma caixa de didlogo, chamada Name, pedindo para que vocé dé um nome ao objeto recém inserido (Figura 7.12), Dé 0 nome de jbSair e confirme, ‘Ao confirmar vocé teré um componente ocupando toda a érea destinada a objetos porcausa do tipo de layout que estésendo usado (voce versisso no préximo capitulo) Clique mais uma vez no componente jbSair, com ele jf selecionado, para colocar 6 r6tulo do botdo (Figura 7.13). Digite a palavra Sair e confirme com a tecla Enter. (eae kel Figura 7.13 7% Dowmnando 0 Ecurse io se preocupe com a aparéncia dada neste exemplo, pois no préximo capitulo vvoo8 seri levado a conhecer os layouts do Java. Falta, antes de rodar 0 aplicativo, a 4 janela quando for clicado. jonar um evento ao bot para que ele feche ‘Como botio direito do mouse, ou 0 inverso do qual vocé usa, vé até o item Events no seu menu de contexto ¢ clique em actionPerformed. Assim que o fizer, note que foram geradas linhas de c6digos no seu aplicativo. Substitua 0 cédigo em destaque a seguir: private JButton getJbSair() | if (bsair == null) { jbSair = new JButton( ); jpsair.setrext ("Saiz"): ‘bSair-addActionListener ( ew java.awt.event ActionListener () { public void actionPerformed (java.aut .event .ActionEvent e) t ‘System. out.printin ("actionPerformed()") , ye , return jbSair; Pelo seguinte e6digo: System. exit (0) ¥ Dic’ Voce pode acionar vérios eventos, entre outros cédigos, no editor pressio- nando a tecla Corl + Barra de espago. Feitaessas alteragdes, salve usandoaseqUénciano teclado Ctrl4S, véaomenu Run em Runs Ascligueem Jaya Application ‘Como resultado voce terd uma janela como a mostrada na Figura 7.14, Clique no botdo criado Sair para fechar a aplicagSo. (Cartruvo7 ~TranatianDo com 0 EoiToR VisUAt bo ECLPse Te al) Figura 7.14 CarfruLo 8 _Oslayouts em Javasio muitoimportantes, poiseles determinam a aparéncianaqual programa vai ter. Osprogramadores de outras linguagens podem estarpensando porque alinguagem ~ Javasepreocupa tanto com gerenciadores de layout. Afinal,na maioriados programas, tum gerenciador de layout nem é uma grande coisa; primero, vocé usa um editor de Ailogos para arrastare colocar seus componentes na superficie do dislogo e depois ‘usam-seferramentas para alinhar, espagare ete Oproblema dessa metodologia é que o layout resultante precisa ser manualmente Tefeito caso 0 tamanho dos componentes mude. Se voc testar, nio importa o sistema onal, existem muitos programas que lidam muito mal com isso, onde se 0 io mudar até mesmo o tamanho de uma fonte no seu sistema operacional, um oto mal planejado pode ndo exibir seu texto, porque a fonte aumenta, mas otto nao. Neste capitulo voc8 conhecersios layouts mais usadosem aplicagdes Javae também layouts do SWT. 78 | - Deswo0 0 Bours TRABALHANDO COM LAYouTS Java (AWT/SWING) Um gerenciador de layout determina como os componentes serio organizados ao serem inseridos em um contéiner. gerenciador de layout padrio para paingis € a classe Flow! permite que 0s componentes fluam da esquerda para a direita na ordem em que sto inseridos em um contéiner. Quando ndo houver mais espago, uma nova linha de ‘componentes seri iniciada imediatamente abaixo da primeira e a ordem da esquerda para a direita continuard. out. Essa classe A linguagem Java inclui outros gerenciadores de layout, onde os principais slo: © GridLayout © BorderLayout = CardLayout © GridBagLayout Para comegar, inicie um novo projeto, chame-o de LayoutsEmJava. Ao clicarem Next, vdatéa guia Librariese no botdo Add Library adicione abiblioteca SWT também (nilo se esquega de marcar a opsao para incluir o JFace). Crie também um pacote, que ‘no caso do livro foi criado com o nome de br.com.integrator.capO8. LayouT DE FLUXO Selecione agora o menu File, opgiio New e selecione Other. Na caixa de didlogo New selecione a opgio Visual Class. Digiteem Name, nonomedaclasse TrabFlowLayout. Selecioneem Style aopeio Frame. Mantenha checadas as opgdes public static void main(String{] args), Constructors from superclass Inherited abstract methods, Clique nobotio Finish. (© Visual Editor do Eclipse cria inicialmente um layout diferente do padrio Java, Ele inicia como gerenciador BorderLayout, \Véaté 0 painel Java Beans sclecione o componente jContentPane (Figura 8.1) (Cartryto 8 Tranatstasoo.com tavours ” Figura 8.1 Para oaplicativo de exemplo, neste primeiro Frame, voc® mudard esse layout para FlowLayout indono paine! Properties emlayout ‘Sala Fat Figura 8.2 Para demonstrar esse layout, selecione no painel Java Beans: this “JFrame” altere 0 tamanho de sua janela para 350 de largura por 100 de altura no paine! Properties. Aproveite ealtere tambémo titulo para Trabalhando com FlowLayout. Adicione 7 JButton’s, ecoloque em cada botio um nome na seqiéncia, jButtont ‘até Button. Digite um r6tulo para cada botdo. A aparéncia final serd como mostrada ‘naimagem (Figura 8.3), 20 Dowmanno o Ecurse Figurs Para que voc execute 0 programa, va até 0 painel Outline, e selecione main(String{). Figuré Adicione o cédigo em destaque a seguir: public static void main(string{] args) { ‘TrabFlowLayout tf] = new TeabFlowLayout ( ); #1, gotviesble (tre) | Carfruro 8 Trasaisianpo com tavours 8 Digite seu cédigo no local indicado Figura 8.5 Rode o programa e veja que a ordem colocada de cada botio é a ordem mostrada nest tipo de layout. Arrastando para aumentar ou diminuir a dimensio da janela, voc ‘notard que os bottes mudam de linha autom Aisponiveis. smente deacordo com aalturaelargura Como deve ser visivel, os botdes adicionados tem um alinhamento, comm em. “FlowLayout, no qual pode ser Center, Left e Right. foltando a0 VE, no painel Java Beans, vocé pode alterar 0 alinhamento dos tes clicando no sinal de “+” do lado direito da propriedade layout. 82 | Dommunoo o Bourse Véaté a property ¢ altere em alignment (Figura 8.7) Problems Jove Ondoain Coude EERE TSO Clique aqui [val Altere aqui [a plead fotaat > agar fa >feldnane Dear eet » Figura 8.7 Vocé também pode alterara distincia horizontal entre os componentes ea vertical emhorizontal gap e vertical gap respectivamente, em pixels. Figura 6.8 Layout DE Borba Olayoutpadrioparao VE¢0 Border ayout, que siocriadosusandoaclasse de mesmo nome, € que se divide em um contéiner de cinco segdes: norte, sul, leste, este e centro. No layout BorderLayout, os componentes dos quatro pontos cardeais ocupario 0 espago méximo necessério; 0 centro ocupard 0 espaco restante. Isso explica 0 ‘comportamento do botio no primeiro exemplo desse livro, Seguindo o mesmo padro do primeiro layout, vannomenu File, New e clique Other. Na caixa de didlogo New selecione a opcio Visual Class. Nonomedaclasse digite TrabBorderLayout. Em Style, sclecione aopgao Frame, Mantenha checadas as opges public static void main(String{] args), Constructors from superclass Inherited abstract methods. Clique no botio Finish CCarrruto 8 ~TaasaLnanvo com tAvours 8 5 JButton’s, organizando-os em cada um dos pontos cardeais existen- para finalizar. Seu layout ser4 semelhante 20 mostrado na imagem eed North Figura 8.9 esquega de que, para rodar o programa, vocé deve adicionar 0 eédigo em logo a seguir: ic static void main(String{] args) { ‘eabBorderLayout tbl = new TrabBorderLayout( ); Wl. setvisible(trve) ; DE GRADE GridLayout organiza os componentes em uma grade de linhas & Os componentes so incluidos primeiro na inha superior da grade, comegan- eélula mais & esquerda e continuando para a direita na grade. Quando todas da linha superior estiverem preenchidas, 0 préximo componente seré na linha seguinte, iniciando novamente como na primeira linha e assim por sumnovo Java Visual Classe dé no nome daclasse TrabGridLayout. EmStyle, /aopgiio Frame. Mantenhachecadas as opgdes publiestatic void main(String{] rructors from superclass e Inherited abstract methods. Clique no botdo 4 | Downavoo 0 Bours Selecione jContentPane em Java Beans, ¢ altere a propriedade layout para GridLayout Expandindo depois a propriedade layout, no sinal de “+”, altere as propriedades ‘mostradas na Tabela 8.1 ‘Tabela 8.1 ‘Columns 2 Heap 3 Rows 3 exw 5 Adicione logo apds 6 JButton’s, A sua tela terd uma aparéncia como mostrado na imagem (Figura 8.10) £ Trabalhando co Figura 8.10 MISTURANDO GERENCIADORES DE LAYOUT Até agora, voc® viu gerenciadores de layouts separados, mas deve estar se perguntando como esses layouts poderfo fazer em Java uma interface grifica agradével. Para se ter olayout perfeito, geralmente voce terd que combinar layouts, assim serd possivel tirar o maximo proveito que cada layout pode Ihe oferecer separadamente, (Carrruro8Teanatiiaspo.com tavours 85 Isso € feito inserindo contéiners em um contéiner principal, como um quadro ou uma janela, € fornecendo a cada um desses contdiners menores seus. préprios gerenciadores de layout. ‘Ocontéiner que deve ser usado nesses contéineres menores 60 paine!, que €criado apartirda classe JPanel. © JPanel, assim como outros paingis podem ser encontrados na paleta Swing Containers, no seu VE. Layour DE CARTA O layout CardLayout se difere dos outros layouts porque ocultam alguns compo- nentes, Eles sdo grupos de contéineres ou componentes que sao exibidos um por vez, da mesma maneira que vocé costuma ver em programas de instalago, onde si0 Imostradas telas de assistente para serem avangadas uma por uma, Crieum novo Java Visual Class e digite no nome daclasse TrabCardLayout Em Style, selecione a opgio Frame. Mantenha checadas as opgSes publie static void ‘main(String(] args), Constructors from superclass e Inherited abstract methods Clique no botdo Finish. Naérvore de componentes, em Java Beanse sclecione ocomponente jContentPane, ‘emodifique seu layout para GridLayout. Expandaapropriedade layout e altere em columns para 2(colunas)e em rows para 1 (linha), como mostra a imagem (Figura 8.11) a seguir: 86 | Dounwooo Baus Clique na paleta de componentes Swing Containers e selecione o componente JPanel (Figura 8.12). Figura 8.12 Adicione 2 JPanel’s no seu projeto através do uso da érvore de componentes em. Java Beans (Figura 8.13), clicando sobre o painel de contesido inicial do aplicativo (jContentPane). 5 ‘Ao selecionar 0 componente = Le RertetPanes JPanel, em Swing Containers, clique no local indicado ‘um layout null. O segundo layout, chamado de JPanelt, sera CardLayout | | | (© primeiro painel, chamado de JPanel, terd Figura 8.13 (Cartruto 8 Traaatsiaspo com Layouts 7 ro painel, chamado de jPanel, adicione 2 /Button's, clicando sobre 0 painel em esquerdo do seu design. importante que vocé clique exatamente onde foi dito, veja detalhe na imagem Figura 8.14). Figura Selecionando Button (o primeiro botio),altere apropriedade text (0 rétulo) para Amarelo e depois altere a propriedade text de jButtonl para Vermelho. No jPanel1, adicione mais dois JPanel’s, onde vocé teré jPanel2 ¢ jPanel3 respectivamente (Figura 8.15). Figura 8.15 88 Domiaxno o Bcurse Selecione jPanel2 na arvore de componentes e altere a cor de fundo nas proprie- dades em background para Yellow. Fagaomesmocom jPanel3 ealtere o background para Red, Clique aqui para selecionar a cor desejada Figura 8.16 Para terminar o exemplo, falta colocar a ago nos botdes para que sejam mudados 1s painéis ao clicd-los. Dé um clique com o botio direito do mouse (inverso do usado por voc8) no botio jButton enoitem Eventsnomenu de contexto clique emactionPerformed (Figura8.17) Figura 8.17 Cartrui0 8—Tranatnanno contavours 9 No cédigo, adicione a seguinte linha: cardtayoutt show (3Panel1,"jPanel2") ; Faca 0 mesmo com o botio jButtonl, ¢ adicione a seguinte linha: cardLayout1. show (3Panel1,"jPanel3") ‘Vocé notari que eardLayoutl nio esti declarado. Para corrigir isso, vé até o inicio jone 0 cédigo em destaque: public class TrabCardiayout extends JFrame ( private JPanel jcontentPane = null; private JPanel 3Panel = null; private JPanel jPanell = null; private JButton Button = null; private JButton jButton} = null; private JPanel Panel2 = null; private JPanel jPanel3 = null; private Cardiayout cardiayout! = null ‘No paine! Outline, clique no método getJPanelt, como mostra (Figura 8.18): ragem aseguir Jravees le XY 6 YT ES 90 Dowmeanpo o Ecurse Vi até o source e altere 0 c6digo em destaque: private JPanel getJPanel1() ( Af (jPanell == mull) { 3Panell = new JPanel( ); cardLayoutl = new Cardzayout ( ) Panel. setLayout (cardLayout); $Panel1 add (getPanel2( ), getJPanel2 () .getName )); 4JPanell.add (getuPanel3( ), getdPane13() .getName( }); } return jpanell; Para finalizar, v4 até main(String[]) em Outline e adicione o cédigo a seguir em destaque no source: public static void main(Stringl] args) { TrabCardiayout tel = new TrabCardLayout ( ) ; tel. setvisible(true) ; Rode o programa e clique no botto escrito Vermelho e veja a mudanga no layout lateral direito. O mesmo ocorre com 0 botdo escrito Amarelo. om Car Layout Figura 8.19 Para que vocé entenda o que aconteceu, uma breve explicacZo sobre 0 que foi ‘gerado em Java, CCarrruto 8 —TranaLuanoo com LATOUTS 1 A maneira mais comum de se utilizar o painel de carta, 6 utilizar um painel paracada carta. Por isso foi adicionado um JPanel, que seria 0 CardLayout e depois mais dois JPanel’s dentro dele. Se voct observarno source logono inicio das dectaragbes, voc8 verd as declarages dos paingis, por isso voc® declarou o CardLayout ali, para ter um acesso global na aplicagio, cardtayout cardLayoutl = null; Dentro dométodo get Panell, vocé encontra ométodo setLayout, noqual éusado para tornar jPanell o gerenciador de layout CardLayout. ‘Panel. setZayout ( new CardLayout ( )) 7 Comaalteragio, vocé pode utilizara declaragao global do gerenciador CardLayout, podendo assim utilizar os botdes para fazer as alterages dos painéis. Apés configurar um contéiner para usar o gerenciador de layout de carta, & necessério utilizar uma chamada do método add ligeiramente diferente para incluir cartas no layout. O métodoada(container, String) temcomo seu segundo argumento umastring que representa o nome da carta. Pode ser qualquer nome, como “Carta 1" “Carta 2”. primeiro argumento especifica o contéiner ou componente que € a carta, 3Panelt. add (getJPanel2(), getJPane12() .getNane ( )) ; Panel .add (getaPanel3(), getsPane13() .gatNane( )); ‘Apés ter adicionado uma carta a0 contéiner, vocé pode usar 0 método show de seu. CardLayout para apresentar uma carta, O método recebe dois argumentos: © Ocontéiner em que todas as cartas foram inseridas © Onome que foi dado a carta Essa foi & instrugdo adicionada no botio jButton: cardLayoutl. show (jPanel1,"jPanel2") ; 2 Dowmeanbo 0 Ecurse Note que ao clicar nele, o objeto cardLayout! mostra em jPanell o painel a ser exibido através do nome dado. LAYOUT DE GRADE DE CONTEUDO, O gerenciador GridBagLayout é uma extensio do gerenciador GridLayout. Esse layout se difere dos outros layouts onde: © Um componente pode ocupar mais de uma célula + As proporgdes niio so exatamente as mesmas, onde linhas e colunas niio precisam ser iguais. ‘© Oscomponentes dentro das células podem ser organizados de diversas formas, (0 VE do Eclipse acrescentou caracteristicas especiais as ferramentas de Design, 0 que torna 0 GridBagLayout muito mais fécil projetar e controlar. Em VE existem duas formas de se trabalhar criando um aplicativo usando GridBagLayout. A primeira forma é colocando item a item como projetado antes no seu painel GridBagLayout e organizando a posigdo selecionado, arrastando e dimensionando, ‘0 que toma essa forma muito mais demorada ¢ complexa (nao recomendo). A segunda forma é utilizando o layout null e quando adicionar seus componentes organizé-los como quiser, voc’ converte para GridBagLayout. CRIANDO A GRADE Em primeiro lugar, é preciso projetar o que voc® deseja fazer em sua tela no papel. Isso é importante, porque esbogar o projeto de sua interface antecipadamente tornar ‘muitas vezes mais répido 0 seu projeto do que voce imagina. Eu o desafio a fazer voce ‘mesmo seu layout, assim o exemplo se toma mais excitante. (Cartruto 8—Trasatsanno com tarours 93 ‘Quando desenhar a grade, lembre-se que cada componente contém a sua célula ‘Voct nio pode colocar mais de um componente na mesmacélula, no entanto, oinverso ino é verdadeiro; um componente pode abranger virias células. Isso € compreensivel, mesmo porque no planejamento inicial o botio se encontra ‘em uma célula que abrange duas colunas. Crieum novo Java Visual Classe digite no nome daclasse TrabGridBagLayout. Em Style, selecione a opeiio Frame. Mantenha checadas as opges public static void ‘main(Stringf] args), Constructors from superclass c Inherited abstract methods. Clique no botio Finish, Selecione na arvore de componentes, em Java Beans, jContentPane ¢ altere a ‘propriedade layout para null. Altere também otamanho da janela para 350, 180em size. Em Swing Components, vocé adicionard os componentes listados a seguir: + 2Label + 1JTextField + 1yPasswordField Altere as seguintes propriedades de cada componente como mostrado na Tabela 8.2: Tabela 8.2 ‘Componente Propriedade itabel text iabet! text ‘Button text Entrar 94 Dommanoo 0 Ecurse Arraste-os e posicione-os mais ou menos como mostrado na imagem (Figura 8.21) a seguir: Ses sj None Seoa: [ Figura 8.21 Selecione os componentes jLabel e jLabel! clicando no primeiro componente e, com a tecla CTRL ou SHIFT pressionada, vocé clica no segundo componente. Clique com o direto sobre um delese selecione a opgdo Customize Layout Figura 8.22), Na guia Component clique no icone Align right. See Figura 8.22 Selecione os componentes TextField PasswordField efagao mesmo procedimento. Cartruto8—Trasainxno com avours 95 CONVERTENDO O PAINEL NULL PARA GriDBAGLayouT Depois de ajustados os componentes, selecione 0 componente jContentPane & alterea propriedade layout para GridBagLayout. eae Figura 6.23 Caso vocé deseje fazer alteragbes na propriedade constraint, selecione o compo- nente que deseja © depois em Properties vi a constraint ¢ visualize as restrigdes clicando no sinal de “+”, Evidentemente que esse tipo de explicagio nfo serd abordada nesse livro. v Die Em toda aplicagio Java Swing que voct fizer, utilizando VE e o style Frame, «a0 clicar no botio fechar da janela, 0 aplicativo deiva de ser visteel, mas fica ‘ainda asion utilizando a meméria da sua maquina. Para que iso nao ocorr 1nd até 0 método mostrado a seguir e adicione a linha em destagque: private void initialize() ( this.setsize(344, 200); this. setContent Pane (get JContent Pane }) this.setTitle(“Trabalhando com GridBagLayout”) + this. setDefaultCloseOperation (JFrame.EXIT_OM CLOSE) ; 96 | Demmnno 0 Bourse TRABALHANDO COM LayouTs SWT ‘SWT continua tabalhando com layouts, assim comoo Swing faz,oferecendoassim ‘mais de um layout, Nesse livro sero abordados os seguintes layouts: © FillLayout + FormLayout + GridLayout © RowLayout Esses layouts serio demonstrados também pelo VE como os layouts anteriores. O tayour FiitLayour Crie um novo Java Visual Classe digite no nome da classe ‘TrabFillLayout, Em Style, expanda.a pasta SWTT e selecione a ope Shell. Mantenha checadas as opgdes Public static void main(String{] args), Constructors from superclass ¢ Inherited abstract methods. Clique no botio Finish, Selecionando em Java Beans componente sShell, vi até suas propriedades, no paine! Properties, caltere seu layout para FillLayout. Aoalteré-1o, clique no sinal de mais “+” existente ao lado esquerdo da propriedade layout para exibir mais itens. pbs JoineDedvain CEMA cook GR TA [Preserty = lay >faldnane -marginteight rargeiith >spadng: \ | type eon rau % asiriced false a Figura 8.24 Cantruvo 8 Tanatsiaxno comttarours 7 FillLayout é 0 mais simples das classes de layout, em SWT, onde sto colocados {todos os controles em uma tnica coluna ou linha e faz com que todos tenhiam o mesmo tamanho, Como ele trabalha em linha ou coluna, em type vocé tem apenas dois valores; ou ESWT.HORIZONTAL que dispée uma saidaemumatinicalinhaouéSWT.VERTICAL, ue dispde uma safda em uma dni coluna, ‘Sendo assim, se vocé mantiverem typeo valor HORIZONTAL, eadicionarapenas ‘umbotio (na paleta Swing Controls, selecionando Button), ele ocupars todo oespago existente do layout no seu aplicativo. Figura 0.25 Se vocé esticar ou diminuira sua janela, voc® notard que o botio acompanha seu tamanho. 98 Dommsanno o Ecurse Adicionando mais dois botdes voc® teri um layout com trés botdes distribuidos igualmente, como voc® pode ver na imagem a seguir (Figura 8.27): Shell ey Figura 8.27 Altere agora na propriedade do layout, em type, selecionando VERTICAL, Po aase "0 a a a A seguir vocé tem uma tabela (Tabela 8.3) no qual mostra o significado dos itens ‘enxistentes nesse layout além do type, € claro: (Cartruto 8-Teasatnanno com tarours ” Tabela 8.3, Campo Significado pe ‘Aorientagdo dolayout, onde um é HORIZONTAL oué VERTICAL. 0 valor padrlo € HORIZONTAL. ‘marginHleighe ‘A quantidade de espago.em pixels para ser usada como uma margem Aesquerda ¢ dreita dos controles.O valor padrio € zero. marginWidth ‘Agquantidade de espago.em pixels para ser usada como umamargem 4o topo e abaixo dos controles.O valor padrio € zero. spacing A quantidade em pixels deespago entre os controles. O tayour GripLayour Crieum novo Java Visual Classe digitenonome daclasse TrabGridLayoutSWT. Em Style, expanda a pasta SWT e selecione a opsio Shell, Mantenha checadas as ‘opsdes publiestatic void main(String{] args), Constructors from superclasse Inherited abstract methods. Clique no botdo Finish Selecionando em Java Beans o componente sShell, v4 até suas propriedades, no painel Properties, ¢ altere seu layout para GridLayout. Adicione dois botdes, um ao lado do outro. eee etek ees wei) [eam » Figura 8.29 Note que surgird uma tabela pontithada ao redor dos botes, dando acada um uma célula onde se alojario, 100 | Dowmaxoo 0 Eeurse Expandindo o layout, em Properties, vocé notard que existem muitas opgdesnesse tipo de layout. Note também que o campo numColumns esti exibindo 0 niimero dois, indicando ‘que existem 2 colunas. Se vocé criar um terceiro botdo, ao lado do segundo, e voltar esse campo, notaré que ele se alterou automaticamente. Vocé também pode alterar aqui antes de adicionar 0 componente desejado, & claro, GridLayout usa um algoritmo poderoso e complexo para posicionar controles dentro de uma grade de células retangulares. Podem ser criadas muitas interfaces de uususrio com grades. Isto faz com que o layout do tipo GridLayout sejadestinado auma ‘gama maior de aplicagSes que FillLayout ou RowLayout, Em particular, GridLayout prové um bom meio para posicionar todos os controles dentro de uma janela sem recorrer a combinagées aninhadas. ‘A seguir uma tabela com os significados de cada campo existente no layout (Tabela 8. ‘Tabela 84 Cartruto8—Teasananpocomiarouts | 101 Campo smarginWidth ‘margintteight horizontalSpacing verticalSpacing ‘mum Columns ‘makeCotunnsEqualWideh Signifieado ‘A quantidade de espago em pixels usados como uma mar- ‘gem Aesquerda e direita dos controles. O valor padrio €S ‘A quantidade de espago em pixels para ser usada como uma, 'margem do topo e abaixo dos contoles. O valor padrio é ‘Aquantidade de espago em pixels entre controtesnadireg0, horizontal. O valor padrao € 5 Agquantidade de espagoem pixelsentrecontroles na directo vertical. 0 valor padrio é5. (© némero de colunas no layout. O valor padro 6 1 Indica que todas as colunas dentro do layout tro a mesma ra. O valor padro false O tayour RowLayouT Crieum novo Java Visual Classe digite no nome da classe TrabRowLayout. Em Style, expanda a pasta SWT e selecione a opgo Shell. Mantenha checadas as opcdes public static void main(String(] args), Constructors from superclass ¢ Inherited abstract methods, Clique no botio Finish. Selecionando em Java Beans o componente sShell, vi até suas propriedades, no painel Properties, ealtere seu layout para RowLayout. Adicione 6 botdes a esse aplicativo. Note como eles se comportario. ‘Note que quando o preenchimento de uma linha ¢ atingido, o controle passa para uma ‘Outra linha. O comportamente ¢ similar 20 FlowLayout do Java. Figura 8.31 102 | Dosananno o Bourse Va até a propriedade layout e atere o campo type para VERTICAL. ‘@Trabathando com Row. ayout Figura 8.32 RowLayout posicionacontroles em linhas ou colunas mas, diferente do FillLayout, nilo preenche todo 0 espaco dispontvel na composicio. RowLayout também difere de FillLayout porque é raramente usado como um tnico controle. Ao invés disso, RowLayout é mais usado frequentemente para posicionar uma linha de botdes. A seguir voc# tem uma tabela com os campos disponiveis para se trabalhar nesse layout (Tabela 8.5): Tabela 85 Campo Signific ‘pe ‘A orientago do layout, onde um é HORIZONTAL ou é VERTICAL. valor padriio é HORIZONTAL. ‘marginWidth A quantidade de espago.em pixels usados como uma margem esquerda marginHeight spacing wrap €edireita dos coatroles.O valor ps é zero. ‘A quantidade de espago em pixels para ser usada como uma margem do topo ce abaixo dos controls. O valor padrlo é zero, ‘A quantidade em pixels de espago entre 0s controtes.O valor padrdo 63. Indica que serio colocados controles na préxima linha se houver espago insuficiente na linha atual. O valor padrio é true, Cartruto8—Tranusunpocomtavours | 103 Tabela 8.5 (continuacio) Campo Significad ‘pack Indicaseotamanho de cada controle que usa seu RowData (voc8 pode ver instify rmarginTop smarginRight ‘marginBottom ‘marginLeft essa propriedade no campo layoutData, selecionando um botfo) serd configurado. Se false, todos os controles sero redimensionados no tamanho do maior controle. O valor padrlo € true. Indica se todos os controles em uma inha (ou coluna)tema mesma altura (ou largura). Este campo controla a dimensio oposta do layout. Por cexemplo, quando fill true e ype é HORIZONTAL, a altura de cada controle na linha ser6 ajustada para ser mais alta na linha . Se type for ‘VERTICAL, €ajustadaa largura de ada controle para er ocontrolemais largo na coluna, O padrio € false, Indica que qualquer espago que permanecer depoisque oscontroles forem posicionados deverd ser alocado entre os controles, aumentando 0 ‘espagamento. O padri € false. ‘A quantidade de espago além de marginHeight, sendo acrescentada a ‘margem a0 topo dos controles. O valor padrio é 3. ‘A quantidade de espago além de marginHeight .sendo acrescentadaa ‘margem inferior dos controles. O valor padrio € 3. ‘A quantidade de espago além de marginWidth , sendo acrescentada a ‘margem esquerda dos controles. O valor padro 6 3. O tayouT FormLayour FormLayout é talver.o layout de uso mais geral eflexivel em SWT. O algoritmo olayout esté baseado no conceito de anexos. Um anexo prende a extremidade de um ‘ou controle & extremidade de outro controle ou para uma posigo dentro de uma ‘combinacio. Este prine{pio muito simples permite criar interfaces de usuérios comple~ x08 criando um elemento de cada vez. Infelizmente, trabalhar ness tipo de layout no VE é muito complexo, onde voc® terd muito mais trabatho manual, digitando cédigos em quantidade, do que fazendo so visual do programa, Esperamos que até a préxima versio haja um suporte maior ‘esse tipo de layout, na parte de design. 104 | Dounenoo o Eeurse Crieum novo Java Visual Classe digite no nome daclasse TrabFormLayout, Em Style, expanda a pasta SWT e selecione a opgio Shell, Mantenha checadas as opgBes public static void main(String{] args) , Constructors from superclass e Inherited abstract methods. Clique no bot Finish, Para esse exemplo, adicione um botdo. Coloque no seu rétulo Botiio 1. Adicione mais um botio ¢ coloque em seu rétulo Botdo 2. Selecionando em Java Beans 0 componente sShell, vi até suas propriedades, no view Properties, alter seu layout para FormLayout. Voc® notard que um botio ficou sobreposto ao outro. No cédigo adicione as linhas mostradas a seguir em destaque: ‘TrabFormLayoutjava package br com. integrator.cap08: import org.eclipse.swt.graphics.Point; import org.eclipse.swt widgets. Shell import org.eclipse. swt widgets. Display; import org.eclipse.swt. layout FormLayout: import org.eclipse. swt widgets. Label: import org.eclipse. swt.SWT; import org.eclipse.swt .widgets.putton; import org.eclipse.swt. layout .FornData? import org.eclipse. swt widgets Composite; Amport org-eclipse.ewt. layout. FormAttachment public class TrabFormLayout { private Shell sShell = null private Button button = null; private Button buttonl = null? public TrabFormLayout () { super (7 1 Public static void main(String!] arga) ( Display display = Display.getDefault (7 ‘TrabFormlayout thisClass = new TrabFormLayout ( ); thisClass.createsshell ( ): thisClass.sshell.open(); Carrruvo8—Trasausunpocomtarours | 105 while (!thisClass.sShell.isDisposed( )) { Af (!display.readandDispatch ( )) display.sleep(); ) display.dispose()+ , private void createsshell() { FornLayout formLayoutl = new FormLayout ( ); ‘Shell = new Shell ( }3 sShell. set Text ("Trabalhando con FormLayout") + ‘sShel1 -setLayout (formtayout!) + ‘sShel1.setSize (new org.eclipse.swt graphics. Point (231, 136) ) button = new Button (sShell, SwT.NONE) ; button. setText ("Bot ao 1”); FormData datal = new Formbata(); datal. top = new FormAttachnent (10) : datal. left = new FormAttachmant (30) ; datal.right = new ForaAttachment (50) + button. setLayoutData (datal) ; button] = new Button (sshell, SWr.NONE) ; buttonl .setText ("Botdo 2”); FormData data? = new ForaData( ) data2.left = new FormAttachnent (button, 0, SWI.LEFT) + data2. top = new Formattachment (button) ; buttont .settayoutData (data2) (Oresultado ser4 igual ao mostradonaimagemaseguir Figura.) quando vocé rodar Programa: 106 | Dommnanoo o Ecurse Ml Trabathando com con Baio? Figura 8.33 Note que o segundo botdo depende do primeiro para ter um perfeito posicionamento, ‘Se voce dimensionar a janela, verd que o primeiro botio se dimensiona, mas segundo fica estitico, sempre no paralelo a0 primeiro, no que se diz respeito ao seu inicio, Carfruto 9 Trabalhando com Componentes Atéaqui, voc® aprendeu como iniciar um aplicativo eeriar uma interface amigavel em seu programa criado no VE no Eclipse. Esses aplicativos criados foram desenvolvidos em umainterface de usustio grética (GUI, Graphical User Interface), no qual the proporeionaa visualizagioemuma anela, «em que voc€ pode manipula tanto com mouse comio com 0 teclado. Agora vocé seré levado a conhecer um pouco mais da interface grafica do Java, usando seus componentes mais comuns. INTRODUGAO AOS COMPONENTES DA BIBLIOTECA SWING Noinicio dalinguagem Java, uma ibliotecadeclasses chamadade AWT (Abstract, ‘Window Toolkit —caixa de ferramentas de janelas abstratas) para programagio GUI avangada, fazendo assim desde o principio parte do JDK (Java Development Ki). Essa biblioteca funcionava bem em aplicagdes mais simples, mas infelizmente ela Indo atendia a criago de uma interface mais complexa, rica em elementos grificos. O pior ocorria quando menus, barras de rolagem e campos de texto, demonstravam ‘Pequenas diferencas de comportamentos em diferentes plataforma 108 | Dowixaxoo 0 Beurse Em 1997, 6 anunciado o Java Foundation Classes, ou IFC, que substitu (einclui) ‘© AWT. A parte principal do JFC jogo novo decomponentes de interface deusuio que sG0 muito mais complexos, flexiveis e portieis. Estes componentes novos sia chamados de SWING AJFC nao inclui apenasem seus recursos apenas componentes Swing, mas também ‘uma API de acessibitidade, uma API 2D e ete. v Nota O Swing nto & um substitute completo do AWT, 56 porque simplesmente fornece uma interface de usuarios mais completa ¢ complexa. A arguitetura bésica do AWT ainda permanece inalterada. Mas © QUE £ SWING? (© Swing 6 o kit de ferramentas GUI que a Sun Microsystems desenvolveu para habilitar o empreendimento de desenvolver em Java. Os programadores podem usar ‘Swing para criar amplas aplicagées de Java com uma larga escala de components poderosos. Além disso, voc® pode estender facilmente ou pode modificar estes ‘componentes para controlar seu aparecimento e comportamento. (© nome representa a escolha da colaboragio de seus desenhistas quando 0 projeto {oj elaborado em 1996, Swing é de fato parte de uma familia maior de produtos Java conhecida como Java Foundation Classes (JFC), que incorporam muitas das caracte- ristcas da Netscape Intemet Foundation Classes (IFC), como também aspectos de design da divisto IBM's Taligent ¢ Lighthouse Design. TRABALHANDO COM COMPONENTES SWING A partir de agora voc® ird trabalhar com um conjunto de componentes da classe Swing, incluindo as ja conhecidas vistas anteriormente. Inicie um novo projeto chamado de TrabComponentesS wing. Crieum pacote, que ‘no caso do livro, foi criado com o nome de br.com.integrator.cap09.swing, Inicie a criago de uma nova aplicagdo, Nacaixa de dislogo New, selecione Visual Class e clique no botio Next. No nome da classe digite TrabCompSwing, Selecione Carrruto9—TranstianoocomComronesres | 109) ‘emStyle,no Swing, ocomponente Frame. Mantenha checadasas opgdes publiestatic ‘void main(String{] args), Constructors from superclass Inherited abstract methods Clique no botdo Finish. CriaNDo uM MENU ‘Uma curiosidade no desenvolvimento de aplicativos usando 0 VE € que vocé tem em Style duas opgdes para 0 desenvolvimento inicial de um aplicativo com menu. O primeiro éA pplication, que jd vem configurado com um menu inicial. O outro éaopgio que vocé escolheu, que nio tem um menu pré-configurado, Depois de aprender a organizar os virios tipos de componentes que podem ser colocados em uma janela através dos gerenciadores de layout, vocé conhecerd outro tipo de elemento de interface de ususrio, que sio 0s menus suspensos, tio comuns em ambientes gréficos, 'Nio é necessério um gerenciador de layout para colocar menus. Uma barra de menu ‘no topo da janela contém os nomes dos menus suspensos. Clicando em uma opgio através de seus nomes, este se abre e mostra seu contetido com itens do menu e/ou submenus. Ao clicar em um item desse menu, o menu se fecha e uma mensagem & ‘enviada ao aplicativo. Para criar um menu no VE do Eclipse, vé na paleta Swing Menus e selecione 0 componente JMenuBar. Swing Menus * FE menuser toolbar k 10 | Domnanno o Ecurse ‘V4 agora ao view Java Beans, e clique sobre o componente this. din) aaa pero i oreerrare > +=, Figura 9.2 (© Design ird ser alterado, Vocé verd uma pequena parte superior. {que representa o menu na <= Figura 9.3 Selecione o componente JMenu na paleta Swing Menus e clique sobre o compo- nente jJMenuBar na view Java Beans. Selecione o componente que surgi, chamado de Menu c na view Properties, no ite ArquivoetecleEnter. Figura 9.4 ‘Veja que no Design apareceu agora o menu com o texto chamado de Arquivo. No ‘campo mnemonic, clique no botio com trés pontinhos. Na caixa de dislogo Java Property Editor, selecione aletra A. Figura 9.5 Note que agora no menu, em Design, voce veré o menu Arquivo com a letra a ‘sublinhada. Clique no componente JMenultem cna view Java Beans clique sobre o ‘menu Arquivo. Evidentemente voc€ logo ird notar que no VE vocé nfo tem controle visual sobre os componentes do menu. Para adicionar 0 texto do item de menu, selecione o componente recém adicionado, chamado de jMemultemena view Properties {igiteno campo text Novoe confirme novamente com atecla Enter. Adicione mais um item de menu e digite no campo text Fechar. 112 | Dosmsaxno o Eeurse Na view Outline procure pelo método getJMenu. No cédigo do aplicativo, adicione a linha em destaque a seguir: private JMenu getaMenu() { Af (Menu == null) { 3Menu = new JMenu( )+ 3enu.setText (“Arquivo”) + SMenu. setMnemoni.c java awt event -KeyEvent .VK_A) jMenu.add (get aMenuTtem( )); jMonu.addSeparator () ; Stenu.add (getaMenuTtem] ( )) ¢ , return jMenu; ‘Ométodo addSeparator cria uma linha separadora entre o item de menu Novo eo item Fechar, Para visualizar o menu, e como ele esté ficando, vocé devers rodar 0 aplicativo. Antes de fazé-lo, em Outline, selecione main(String) © adicione © cédigo em destaque a seguir: public static vold main(string{] args) ( ‘TeabCompSwing tossnew TrabCompSwing(); tos. setVisible (true) ; Nao se esquega que para rodar, vocé deverd selecionar em Run a opcio Java Application, Figura 9.6 (Cartruto9~Tranatnapo com Comroneres 13 Aolado rieo menu Editare adicione no campo mnemonic aletraE, Coloque como itens Recortar, Copiar e Colar. Adicione mais um componente JMenu clicando sobre o componente jMenul e altere na sua propriedade, no campo text, colocando o texto Opgies. Clique no componente JCheckBoxMenultem e o adicione clicando sobre © ‘componente jMenu2-Opgdes. Na propriedade text, digite Somente Leitura. Adicione também sobre 0 componente jMenu2 dois componentes JRadioButtonMenultem. Digite na propriedade text Inserir eno outro Exeluir. Selecione © método gefJMenul na view Outline ¢ adicione um método ‘addSeparator no local indicado em destaque a seguir: Private Ienu getoMenul() { Af (Menul == null) { jMenul = new dMena( ); jMenul .setText ("Editar") : jMenul . setHnenonic (Java .awt .event .KeyBvent:.VK_E)2 jMenu -add (getdMenutten2(})2 jMenut add (get aMenuTtem3 (}): jMenul.add (get MenuTtemd ()) 2 ‘Menul .addSeparator () jMenu1.add (get Memu2()) , return jMenul; ? Selecionando em Java Beans o menu jMenu2, adicione 0 c6digo em destaque a seguir: Private Ienu getenu2() | if (jMenu2 == null) { $Menu2 = new dMena( ); jMenu2. set Text (“Opgbes”) + jMenu2. add (getJCheckBoxenuTtem( )) + ‘Menu2.addSeparator () ; jMenu2. add (getJRadioBut tonMenurtem( )) |jMenu2. add (get JRadioButtonMenuttem! ()) 7 } o return jMenu2; ) 114 | Dommanno o Ecurse A aparéncia do seu menu seré semelhante ao mostrado na Figura 9.7. Figura 9.7 TRABALHANDO COM AS PROPRIEDADES DO MENU Na construgio dos menus, voce havia adicionado na propriedade do menu Arquivo, em mnemonic, a letra A e no menu Editar a letra E. O VE gerao método em Java setMnemonie para indicar que A € mnemdnico para esse menu. Pressionando a tecla Altea etraA abreomenu como se voct houvesseclicado nomenu como ponteiro do mouse. Na view Java Beans, selecione o item Recortar, e no c6digo adicione a linha em destaque a seguir: private JMenuItem getJMenurtem2() { Af (jMenuTtem2 == null) { jMenuTten2 = new JMenuTtem( jmenurten2 .setText ("Recortar") : ‘jMonurten2. setAccelerator ( ReyStroke,.getKeyStroke('X', Java. awt.evont .KeyBvent.CTRL, MASK, false) de ) return jMenurten2; © método Java aqui usado € 0 setAccelerator. As teclas aceleradoras somente podem ser associadas a itens de menus ¢ nio em menus. Com esse método voc® cria teclas de atalho para seus menus, como 0 feito no caso, CTRL+X. Cartruio9Tramusnspo.comComroneeres | 115 ‘Ao rodar o programa vocé nota o atalho sendo demonstrado pelo menu, Figura 9.8 0s itens, Copiar e Colar, também receberdo atalhos. Para isso, selecione o item Copiar e no view Java Beans, adicione o cédigo em destaque: , Private UMenultem getUMenultem3( ) { ie Gienutten3 = mull) { Snenuvens = new dMenittem() Swenatven3.setText ("eopiar") Spat tnd satocalerator( ayStroke.getRaystroke("C', java. ant. ovent.ReyEvent, CERL_ MASK, £816) " ' return Ment ten3; Faca agora 0 mesmo com o item Colar: ivate JMenuTtem getJMenuItemd( ) { © Af (GMenuttemé == null) { jMenurtemd = new WMenuttem( ); jMenuttemd.setText ("colar"): ‘Monur tend. setAccelerator( ReyStroke,.gotKeyStroke('V’,java.awt event. KeyEvent. CTRL, MASK, fase) v4 ) return jMenurtem¢; 116 | Downasoo o Faure AGRUPANDO ITENS DE MENU Se vocé selecionar no menu OpgGes, Inserire depois selecionar Exclu, notardique ‘0s dois ficam selecionados, ou sea, no existe uma opgo entre os dois. Para agrupar esses dois itens de menu, na paleta de ferramentas, selecione Choose Bean, Na caixa de didlogo Choose a Bean, digite na caixa de texto o nome do Bean que voc’ esté procurando, que no caso ¢ ButtonGroup. Evidentemente, antes mesmo de que vocé termine de digitar, estara sendo listado na caixa abaixo, em Matching, types. Selecione a opcio ButtonGoup e clique em OK (Figura 9.9). mney nope Figura 9.9 Clique fora do design do seu aplicativo, na érea em branco. Note que aparecers um item na drvore estrutural, em Java Beans, chamado de buttonGroup. Note que ele também se encontra no Design. Cartruo9—Teamatnanpocom Comronestes | 117 Figura 9.10 Com esse componente selecionado, icione 0 cédigo em destaque a segui private ButtonGroup getButtonGroup( } { Lf (buttonGroup == null) { buttonGroup = new ButtonGroup( }; buttonGroup add (getJRadicBut tonMenur tem( }) ; buttonGroup. add (getJRadicBut tonMenuI tem1 ( )) 1 return buttonGroup; Para que esse grupo funcione, adicione o cédigo a seguir em destaque no método ‘eetJMenu2: private dMenu getIenu2() { Af (Menu2 == null) { jMenu2 = new Menu ( jMenu2. setText ("Opcdes") + Menu? add (getICheckBoxMenuttem( )) ¢ jMenu2.addSeparator (); 4étenu2.add (get JRadioButtontenuTtem( )) 7 ‘jMenu2 add (get JRadioBut tontienut tem! ()); getButtonGroup() 1 return jMenu2; 118 | Dosanaxoo 0 Ecurse Agora vocé s6 poderd selecionar um entre 0s dois itens de menu, ou seja, Inserir ou Exeluir, ‘TRABALHANDO COM ALGUNS COMPONENTES SWING © Swing oferece muitos componentes diferentes de interface com usuério, além de ‘menus € contéineres que voce jé viu, existem botdes, campos de texto, r6tulos, dreas de texto, caixas de verficagdo, botdes de rédio, barras de rolagem, listas suspensas, caixas de combinacio, slider, barras de progresso, caixas de mensagem € etc. \Vocé saberé aqui como trabalhar com alguns desses componentes. ¥ Onservach Todos os componentes Swing compartitham de uma superclasie comum, javax.swingJComponent, ¢ herdam vdrios métodes que vocé certamente sward_em seus proprios aplicats COMPONENTES BASICOS DE INTERFACE GRAFICA Um programa GUL Javaexecutando em diferentes plataformas tem uma aparéncia diferente e, As vezes até diferentes interagGes de usurio em cada plataforma, Juntos, ‘ aspecto ea maneira como o usvirio interage com o programa sio conhecidos como aparéncia e comportamento (“look and feel”) desse programa. Nos componentes a seguir também sero abordados algumas propriedades comportamentos. JLasBeL (05 rétulos fornecem instrugdes de texto ou informagdes sobre uma GUI. Ele pode conterfcone ou nl. Criado a partir da classe JLabel, um rotulo€ usado diversas vezes ‘para identificaro objetivo de um outro determinado componente. Um rétulo nio pode ser editado diretamente por um usuario. Altere 0 layout do seu aplicarivo para null. ‘Cartruto 9~Tranalstanoo com Comrowen Tes n9 Para se criar um rétulo no VE do Eclipse, na paleta Swing Components clique em ‘Label clique no design do seu aplicativo. Altre otexto na propriedade text para Nome:. Na propriedade font clique no botio ‘om trs pontos ¢ selecione a fonte Arial, tamanho 12 eestilo Bold e confirme (Figura 9.10). Continuando em nossa excursto sobre as propriedades do componente, em toofTipTextdigite “Digiteseunome completo” Rode o programae vejaasalteragbes feitas até o momento (Figura 9.12). Figura 9.12 120, | Dommwaxoo o Ecurse Por dltimo, altere na propriedade foreground a cor da fonte de seu rétulo, Essa propriedade utiliza 0 método Java setForeground, JBurTon Um botio no € algo tio novo para vocé aqui no VE do Eclipse, pois voc jé usou em outro local no infcio do livro. Mas o que nfo foi feita é a explicagao de seu uso, Um botio é um componente usado pelo usuério para clicar e acionar uma ago specifica. Um programa Java pode trabalhar com virios tipos de botdes. ‘Um botio de comando gera um evento quando 0 ususrio clica sobre ele com 0 ‘mouse. Os botées de comando sio criados com aclasse JButton. Otextona face de um bottlo é chamado de rétulo do botio. No mesmo aplicativo, adicione um JButton. Altere propriedade text para Clique aqui. Emicon selecione a imagem no seu disco ou adicione ao seu projeto outra imagem € depois selecione (Figura 9.13). Altere também a fonte, tamanho e cor do texto se desejar. Rode o aplicativo, Cartruo9—Trasatnanoo com Comronenres | 121 ‘No final, seu aplicativo tera um botio com a seguinte aparéncia: { JTextFietp Um campo de texto é uma érea em uma interface onde um usudrio pode introduzir € modificar texto no teclado. Representado pela classe JTexField, no qual pode ‘manipular uma linha de entrada, Aaicione ao aplicativo um JTextField (Figura 9.15).e dimensione paraotamanho desejado. Figura 9.15 122 | Domo o Bourse JPassworDFIELD Um JPasswordField oculta os caracteres assumindo que eles representam uma senha que deve permanecer conhecida apenas pelo usuitio, Insira no aplicative um componente JPasswordField . Para ver 0 comportamento desse de componente, execute 0 programa e digite algum caractere. ae Een Seng Figura 9.16 Dica: Depois de criado o campo de senha, voc8 pode configurar 0 caractere que aparece quando se digit Na propriedade echoChar vocé pode alterar o caractere que por padrio é 0 * (asterisco). Essa propriedade altera 0 método setEchoChar que tem como finalidade cxibir no lugar do texto oculto 0 caractere atribudo. ADICIONANDO © CODIGO NO APLICATIVO Primeiro vocé comegard com 0 botio, no qual quando clicar, ele verificard se foi ou no permitida sua entrada, No Design clique com o botio inverso do mouse (geralmente o direito) no seu componente jButton, No menu de contexto, selecione a opgdo Events e clique em actionPerformed. Adicione o e6digo mostrado a seguir em destaque: Carfruio9—TrarauianoocomComronentes | 123 private gButton getsButton( ) ( if (jButton == null) { 3Button = new JButton( ); jButton..set icon (new ImageTcon (getClass ( ) .getResource (*/images/ enail.gif”))); ‘JButton.setText ("Clique aqui”); Button addActionListener (new java.awt .event ActionListener () { public void actionPerforned (java.awt .event .-ActionEvent e) { String login = jTextField.gatToxt( ); ‘String senha = new String( jPasswordField. getPassword( )) 4€ (login equals ("edsondintagrator.can.br”) 66 senha. equals ("123456") ‘Javax. swing. JOptionPane. showessageDialog null, “Seja bem vindo" ,"“Login Correto”, Javax. swing .JoptionPane.OK_OPTION+ Javax. swing. JOptionPane. INFORMATION MESSAGE) ; else Javax. awing. JoptionPane. shovlessageDialog (null, “Wood digitou o login ou a senha incorretanente”, “Login Incorreto”, Javax. swing. JOptionPane.OK OPTICN , vi: ) return jButton; ) ‘As GUI’s slo baseadas em eventos, ou seja, geram eventos quando 0 usudrio do ‘programa interage com o aplicativo. Algumas interagdes sio mais comunscomomover ‘omouse,clicarem um botio ou digitar um texto que, passam quase que desapercebidos Porum ususrio comum. Paraum programador Java, quando ocorre uma interago com ‘osuério, um evento é automaticamente enviado para o programa. Esse evento é ‘analizado para que vocé possa interagir com 0 usustio. Para processar um evento de interface grifica com o usustio, o Java utiliza um pacote chamado de java.awt.event, Também existem outros tipos de evento que si ‘especificos para varios tipos de componentes Swing, que sio definidos no pacote avaxswing.event, © programador Java sempre realiza duas tarefas principais quando se trata de trabathar com eventos em uma GUI, uma é registrar um ouvinie de eventos e depois mplementar um tratador (handler) de eventos. 124 | Dominaxno © Bourse (Os “ouvintes de eventos” ou “receptores de eventos” so Varios, mas que no caso é * ActionListener ~ Eventos de ago, que so gerados por um usuério agindo sobre um componente, como um clique de mouse em um botio. Ao transformar uma classe em um receptor de evento, € preciso configurar um tipo especifico de evento que sera captado por essa classe. addActionListener — trabalha com componentes JButton, JTextField, ICheckBox, JComboBox € JRadioButton. No caso de ouvintes de eventos, cada um dos métodos € chamado automaticamente pelo sistema de janelas durante o evento de usuario correspondente. A interface ActionListener possui apenas um método: actionPerformed ). Todas, as classes que implementam ActionListener devem ter um método com uma estrutura como a seguinte: Public void actionPerformed (java.awt.event .ActionEvent ©) ( (//ezata 0 evento aqui ) Para finalizar esse aplicativo, vocé adicionou um e6digo que, ao pressionaro botio, ele verifica se acaixade texto jTextField eacaixade senha jPasswordField continham 0s valores edson@integrator.com.br © 123456 respectivamente. Em caso afirmativo ou negativo, uma mensagem aparece para alerté-lo, eo er D sei poms [or] Figura 9.17 Huma observagio importante a ser feita no campode senha, onde paraobter o valor dasenha foi utilizado o método getPassword que retorna.a senha como uma matriz.do tipo char, no qual foi utilizado como argumento para o construtor String paraque fosse criada uma String. Cartroi0 9~Transusinso0 com Comrontacres Rs ‘A senha ndo € devolvida como uma String porque uma string ficaria na méquina virtual até que 0 lixo fosse coletado, v Nota Conforme vocé verd, alguns métodos sto semelhantes em diversos compo- nentes Swing, como getText ¢ setText para componente de texto ¢ sewValue € getValue para componentes que armazenam wm valor numérico. CAIXAS DE DIALOGO. As caixas de didlogo so muito comuns em programas, principalmente porque podem nos auxiliar em situagdes no qual nos deparamos, seja por motivos de erros ou ‘outros comportamentos que ni estamos acostumados, geralmente gerado pela falta de conhecimento da manipulagio do programa, No.caso anterior, voce viu que, dependendo da resposta dos dados digitados, uma Imensagem era exibida, A classe JOptionPane oferece varios métodos que podem ser usados para eriar ‘caixas de dislogos. Esse método tem como pardmetros: showMessageDialog(Component, Object, String int, int)—oargumento Component ‘specifica o contéiner que deve ser considerado a origem da eaixa de dilogo e essa informacio ¢ usada para especificar 0 local na tela na qual a caixa de didlogo deve ser vista. Se 0 argumento usado for null, como neste caso, a caixa de dislogo ficaré ‘entralizada na tela. Oargumento Object pode ser uma string, um componente ou fcone. Se for string, ‘texto aparecers na caixa de didlogo. Se for um componente ou fcone, o objeto seré _apresentado no lugar do texto, ‘Oargumento Siring se refere ao titulo da caixa de mensagem, que ser apresentada a barra de titulo. ‘Um int representa a indicagto de quais botGes serio apresentados na mensagem. "No caso apenas 0 botio OK. 126 | Dowanno o Ecurse 0 outro int descreve 0 tipo de caixa de didlogo, usando as constantes de classe ERRO_MESSAGE, INFORMATION MESSAGE, PLAIN MESSAGE, QUESTION_MESSAGEou WARNING_ MESSAGE. Esse argumentorepresentaqual © {cone que seri apresentado na caixa de didlogo junto & mensagem, como visto no exemplo anterior. FINALIZANDO O APLICATIVO Para final ar esse exemplo, voc® iré adicionar eventos em dois itens de menu, Um seri o Novo eo outro 0 Fechar. Na view Java Beans, clique com 0 botio direito do mouse (0 bot inverso) © selecione no menu de contexto o item Events e clique em actionPerformed. Adicione © eédigo em destaque a seguir: private JMenurtem getJMenuttem( ) ( Af QMenutten == null) [ jMenurten = new JMenuttem( )+ jMenuTtem. set Text ("Novo") + jiienuTtem.addActiontistener (new java.awt event .Actionbistener() { public void actionPerformed (java.awt event .Actionvent e) { ‘TextField. setzext ("") ; 5PasswordField. setText ("") ; STextField. requestFocus () ; ne ' return jMenurten; No item de menu Fechar, adicione o c6digo em destaque: private Menurtem getIMenurtem]() { if (jMenuttem] == null) ( jMenuTteml = new JMenuttem( 3 JMenuttem!.setText ("Fechar") JMenut tent .addAct ionListener (new Java.awt.event ActionListener (} { public void act ionPer formed (ava ant event .ActionEvent e) fi CaPrruto9~Trasaianoo cou Comronnies ‘System. exit(0) 7 1 return jéenuTtenL: a7 CapfruLo 10 Criando Interfaces Graficas com SWT no Visual Editor No inicio, o Visual Editors6 oferecia suporte acriagio de interfaces Swing. A partir da versio 1.0 do VE, ele passou a oferecer suporte a interfaces SWT, dando assim agilidade na construgio de aplicativos com essa linguagem. Primeiramente, crie um novo projeto. Chame-o de TrabComponentesSWT. Ao clicar no botio Next, véatéa guia Libraries e clique no botio Add Library, Nacaixa dedislogo Add Library, selecione aopcio Standard Widget Toolkit (SWT)eclique ‘emNext. Napréximateladacaixadedidlogo, marque aopgio Includesuport for JFace. Clique no botio Finish para finalizar. TRABALHANDO COM ALGUNS COMPONENTES SWT OSWT oferece, assim como o Swing, muitos componentes diferentes de interface com ususrio. Voce saber aqui como trabalharcomalguns dessescomponentes, damesma forma com que jf aprendeu na criagdo de aplicativos Swing ‘Antes de iniciara criagdo dasua aplicagio visual, crie um pacote, que nocaso desse livroseribr.com.integrator.capl0.swt. Como jf feito anteriormente, no menu File, New ¢ clique em Other. Selecione a opgio Visual Clas e clique no botio Next 130 | Dommaxoo o Ecurse ‘Verifique se vocé esté usando 0 projeto correto, no qual no campo Source folder Figura 10.2 CCartruto 10 Crtanoo lnerenracts Graticas com SWT No VisuaLEorror | 131 Clique no design da sua aplicagio. Na caixa de didlogo Name mantenha 0 nome dado e confirme, Observena view Java Beans que 0 controle chamado de menuBar jéesté presente no seu aplicativo (Figura 10.3). Figura 10.3 Para adicionar os Menus ¢ seus itens, na paleta SWT Menus vocé encontra 0 controle Menultem que, por sua vez, contém outros controles que so acessiveis icando no tridngulo que aponta para baixo a0 lado desse controle: Gowns herr eatertem ah 7 conamnnn * Nera sheruten Separator sateen check etiuten Redo Figura 10.4 Cada controle do Menultem representa um tipo de menu que existe em todas aplicagSes visuais no qual voce esté acostumado a trabalhar. 132° | Dounaoo o Fourse Selecione o controle Menultem.SubMenu. Na view Java Beans clique sobre 0 controle menuBar. Aparecerio duascaixas de dislogos para que voc® de nomes aos controles. Apenas confirme os nomes pré-definidos. Selecione o controle em Java Beans, chamado de subMenultem, ¢ na view Properties digite no campo text Arquivo. Observe que no seu design aparecerd um menu chamado Arquivo, Selecione agorao controle Menultem.Push. Clique sobre ocontrole, na view Java, Beans, chamado de submenu. Confirme a eaixa de didlogo aceitando © nome do componente. Aosurgirocomponente push, vaatéa view Properties enocampo text digite Novo, Rode o aplicativoe vejacomo seu menu estéficando, Nise esquesaderodarcomo SWT Application, Se ee el Figura 10.5 Adicione agorao controle Menultem Separator, abaixodo controle push-"Novo”, nna view Java Beans. Logo apés, adicione mais um controle do tipo Menultem.Push, abaixodo controle separator, na view Java Beans, Rodeo programae vejaqueo ment terd uma aparéncia semelhante a imagem mostrada a seguir (Figura 10.6): Carmo 10-Chnofemancrs GeicascouSWT wo Vs oon | 133 1 Trabathando com Controles SWT hove Fecha Figura 10.6 ‘Ao lado crie 0 menu Editar. Coloque dentro desse menu mais tr8s, chamados de Recortar, Copiar € Colar. Como no exemplo dado no menu feito em Java, vocé adicionaré um controle separator e depois adicionard um submenu intitulado de Opgées. Sua drvore de componentes (view Java Beans) ser semelhante a0 mostrado na Figura 10.7: Figura 10.7 Selecione o controle Menultem.Check ¢ clique sobre o controle submenu2, em JavaBeans. Altere a propriedade text para Somente Leitura, 134 | Dommanoo o Ecurse ‘Adicione mais um separador e depois dois controles do tipo Menultem.Radio. Altere a propriedade text do primeiro para Inserir e do segundo para Exeluir. A aparéncia final do seu aplicativo pode ser visto quando voc® rodar o programa (Figura 10.8). Figura 10.8 Dessa vez voce ni tera que criar um agrupamento dos itens de menu do tipo radio. Isso acontece porque eles jé vém com essa caracteristica por padrao. Caso vocé tenha que formar em um mesmo menu um outro grupo de menus, voce terd que inserirantesum Menultem.Separator. Mas se mesmo assim, vocé desejar ndoter grupos nas suas opedes de menu deradio, ‘voé tem que alterar 0 eédigo. ‘TRABALHANDO COM AS PROPRIEDADES DO MENU Na construgtio dos menus, voe8 também pode adicionar mnemonics. No menu Arquivo, por exemplo, a letra A eno menu Editar a letra E. Para que o VE indique que A. mneménico para o menu arquivo, v4 atéa propriedade text desse menue adicione um“&" (e comercial) antes da letra A da palavra Arquivo. Faga 0 mesmo como menu Editar. Rodando o programa, ao pressionaratecla Alt, voc® verdas letras sublinhadas. Pressionando a letra correspondente, como A, por exemplo, abre o menu como se voce houvesse clicado no menu com o ponteiro do mouse, Cuenao 10-CansooterancesGunescouSWTv0 Vana Eon | 135 Cie Figura 10.9 Assim como foi feito nomenu Recortar, Copiar eColar doexemplodocapituloanterior, aqui neste exemplo vocé também criar teclas aceleradoras, no qual método invocado aqui 6osetAccelerator. Asteclas aceleradoras somente podem serassociadasaitens demenus teil em menus. Com esse método voc cria teas de atalho para seus menus. No view Java Beans, selecione ocontrole push2, oRecortarena view Properties, adicione no campo accelerator 6 niimero: 262.264. [No e6digo, altere o valor adicionado para o mostrado em destaque, logo a seguir: USh2. setAccelerator (SWT.CONTROL | 'x’) ; Rodeo programa. Note que aoacionaromenu Editar, voc8 nfo verdoatalho Cul+X. Para faz8-lo aparecer no seu menu, vi até a propriedade text desse menu e coloque 0 valorRecortar \tCtrl+X. Atabelaa seguir (Tabela 10.1) indicacomoficardos menus Recorta, Copiare Cola Tabela 10.1 Menu Propriedade Valor Recortar tet Recortar WCtrlsX accelerator 262.264 substitu no eign por SWT.CONTROL'x*) Copier text Copiar cutee ‘accelerator 262.243 (substtuido no c6digo por SWT.CONTROL I*e’) Coar text ColaetcutsV accelerator 262.262 (substituido no c6digo por SWT.CONTROL IV") 136 | Dommanpo o Ecurse AA aparéncia do seu menu sera como o da imagem a seguir: a) hande com Controles SWT copar cule Cohn cua Cortes Figura 10.10 Para que vocé vejase realmente esté funcionando, vocé utilizaré um “ouvinte” para verificar se 0 item de menu Recortar foi acionado, Clique com 0 botio direito do mouse sobre o controle push2, na view Java Beans. No menu de contexto, em Events, cliqueem Add Events, Nacaixadedidlogo Add Event, expandaoitemselectione clique em widgetSelected. Clique no botdo Finish para terminar. Figura 10.11 Carfruto 10 -Cunsno Insrenracts Granicas com SWT no Visual Error 37 Na view Java Beans, clique no evento widgetSelected e altere no cédigo adi nando a linha em destaque a seguir: push? .addSelectionListener (new org.eclipse. swt .events.SelectionListener() { public void widyetSelected (org.eclipse.swt .events.SelectionEvent e) { org.eclipse. swt.widgets MessageBox dialogo = new org.eclipss. owt. widgets MessageBox (eShall, SHZ-ICOM (UESTION | SWE.CK) Aialogo. setText ("Atencio") ; dialogo. setMessage|"Voo8 selecionou o item Recortar”) ; Aialogo.open( ) } public void widgetDefaul tSelected (org.eclipse. swt .event's.SelectionEvent €) {) De Com esse e6digo voc# chama uma caixa de mensagem que, ao clicar em Recortar ‘ou usar a seqiiéncia de teclas Ctrl+x, vooé verd uma mensagem como a mostrada a seguir: Figura 10.12 Caixas DE DIALOGO Como foi utlizada nesse exemplo uma caixa de dislogo, vot teré uma breve explicagio da sua utilizago. classe MessageBox suporta uma variedade de fconese botBes padres do sistema ‘operacional. O niimero de botBes, fcones ¢o formato da caixa de mensagem so todos configurados usando o estilo desejado. A seguir a Tabela 10.2 mostra os fcones usados e suas especificas caixas de mensagens: 138 | Dowmanoo o Reurse ‘Tabela 10.2 Constante Significado SWT.ICON_ERROR Tadica que wm cero acorrew SWTICON_INFORMATION Informa o usuétio SWTICON_QUESTION Faz 20 usuério uma pergunta SWTICON_WARNING Alertausuério Ind um processo em progresso ‘Uma mensagem também contém botdes, que no caso do exemplo anterior, existia © boto OK. A seguir, a bela 10.3 mostra os botes usados e seus significados: ‘Tabela 103 Botdes © Combinagies Botio que aparece swroK Um nico botio OK SWT.OK I SWI.-CANCEL Um botfo OK e um Cancelar SWT.YESISWT.NO Um botto Sim eum Nao SWT.YESISWENOISWT-CANCEL —__ Umbotfo Sim, Nioe Cancelar SWT.ABORTISWT.RETRY Umbotio Abortare Tete novamente SWI.ABORTISWTRETRYISWTIGNORE _ Semelhantesoanteriormais obotiolgnorar # importante salientar que algumas combinagSes no funcionam em todas as plataformas, ‘Como método setText(String title), vocé adiciona um titulo acaixa de mensagem, As mensagens podem ser acessadas usando os métodos setMessage e getMessage. © setMessage( String mensagem)—Descreve amensagem que serdexibida nacaixa. + geiMessage( )-Retornaamensagem que descreve araziio do porque. didlogo foi aberto. E por ditimo, para abrir uma caixa de mensagem, vocé usa 0 método open. [Cartruto 10 Criaxo Inensaces Granicas com SWT wo Visual EorTor 39 CoMPONENTES BASICOS NO SWT Semelhante ao Java, os controles dessa biblioteca so multiplatforma, mas diferente do Java, eles tlizam o sistema operacional para exibir suas caractersticas. |sso toma SWT mais répido emsua execugodo que o Swing, nocampo dos programas de imerface grifica Para exemy icar © SWT, voc® fard uma tela semelhante & feita com Java Swing. Nos componentes a seguir também serio abordados algumas propriedades e ‘comportamentos. LABEL Encontrado na paleta SWT Controls, o rétulo no SWT € semethante a qualquer rétulo visto nos programas, inclusive a0 do Java Swing. Como 0 layout do aplicativo SWT jé est como padrio null, clique no controle Label e clique no seu design. Como feito no exemplo do Java Swing, clique no label novamente e digite 0 texto Nome:. Dimensione o controle para que seja possfvel visualizar todo 0 texto digitado, do rétulo. Na view Properties, véatéo campo tootTipText e digiteo texto Digite seu nome aqui. Rode o aplicativo e veja seu comportamento. Posicione o ponteiro do mouse sobre 0 rétulo e veja a dica de tela ‘Ométodo invocado para visualizar umadicadetelaéo setToolTipText(String dica). Figura 10.13 140 | Dowunanno 0 Bcurse Na propriedade foreground voc® altera a cor da fonte do seu rétulo. Figura 10.14 Para alterar essa propriedade, © SWT utiliza 0 método setForeground(Color cor ). Se cor for mull, o r6tulo teré a cor padrao do sistema. Alltere também 0 campo font, clicando no bottio com trés pontinhos. Selecione a fonte, oestiloe otamanho que desejar. Na parte inferior voc tem umtexto que mostrar ‘como ficaré seu controle com a alteracao escolhida. Figura 10.15 Carfruto 10—Crtasoo Iserenraces Grésicas com SWT No Visuat Eptron | 141 Usando o método setFont, é feta uma chamada aclasse Font éutilizada aqui para alterara fonte. Quando invocada diretamente, voc® pode passar os seguintes parimetros: Font (Device display, String fonte, int tamanho, int estilo) Text ‘Com o controle Text vocé cria uma caixa de texto, representada pela classe Text, fo qual se pode manipular uma linha de entrada. ‘Adicione ao aplicativo um Text (Figura 10.16).edimensione para o tamanho desejado. Figura 10.16 O CAMpo PARA SENHA Para colocar um campo de senha, basta utilizar o mesmo controle. Na propriedade password voc@ altera para a constante PASSWORD. ‘Na propriedade echoChar vocé edita 0 tipo de caractere que deseja exibir quando senha for digitada, Figura 10.17 142 | Dominanoo o Ecurse Para se ter um controle de senha, a classe Text tem como parimetro a constante SWT.PASSWORD. ¥_ ORSERVACK Da mesma forma que em Java, na propriedade echoChar voct pode alterar 0 caractere que por padrio ¢ 0 * (asterisco). Essa propriedade altera @ método setEchoChar que tem como finalidade exibir no lugar do texto oculto 0 caractere atribuido. Button No mesmo aplicativo, adicione um controle do tipo Button. Altere a propriedade text para Clique aqui. (Caso vocé queira colocar uma imagem, na propriedade image selecione a imagem no seu disco ou adicione ao seu projeto outra imagem depois selecione (Figura 10.18). Altere também a fonte, tamanho e cor do texto se desejar. Rode o aplicativo. Figura 10.18 © botio suporta textos e imagens, mas nio pode exibir o dois ao mesmo tempo. (Cartruto 10~ Criaxno Ierenracts Granicas com SW No VisvaL Eorron 43, ADICIONANDO CODIGO AO APLICATIVO Para finalizar esse exemplo, vocé adicionaré cédigo ao seu aplicativo para que se acostume com a forma de programagao SWT. Com 0 botio direito do mouse sobre o controle button na view Java Beans, selecione no menu de contexto o item Events e adicione o evento widgetSelected. Adicione 0 cSdigo em destaque a seguir: Dutton. adiSelect icntistener (new org.ecl ipse.swt events. SelectionAdapter () ( public void widgetselected(org.eclipse.swt.events.Selectiontvent ©) ( String login = text.getText( }; String senha = text.gettext( }; Lf (login. equals ("edson@integrator.com.br") 64 senha. equals (*123456")) ( org.eclipse. swt widgets MessageBox dialogo = new ory.eclLipse. swt. widgets MessageBox (sShell, SW?.TOOY_INFORVATICN | SWP.CK) ; ialogo. setText ("Login Correto") ; dialogo. setMessage("Seja bem vindo”) ; ‘ialogo.open( )? Jedset org.eclipse. swt. widgets MessageBox dialogo = now org.eclipse. swt. widgets MessageBox (sShell, SWE.TCON ERROR | SWT.OK ) ; ‘dialogo. setText ("Login Incorreto") ; ialogo. setiessage ("Vood digitou o login cu a senha incorretamenta”) : dialogo.open( ); text. setFocus(); text.selectAll( ) ; ) , ns Se botdes ou menus estiverem presentes em qualquer parte da interface de sua aplicasio, vocé criaré SelectionListeners, para que o aplicativo responda, quando os suérios clicarem nos botées ou selecionarem os menus. Note que no cédigo inserido, hé uma grande semethanca com Java, porém, mais simples. 144, | Dowmunooo Bours UM TOQUE FINAL NO APLICATIVO Parafinalizaresse exemplo, voc id adicionareventosem doisitens demenu, assim como fora feito no exemplo do aplicativo eriado em Swing. Os menus sero Novo e Fechar. Na view Java Beans, clique com o botdo direito do mouse (o botdo inverso) sobre controle push e selecione no menu de contexto o item Events, Add Events e clique em widgetSelected, expandindo selection. Adicione 0 e6digo em destaque a seguir: push adiBelecticnListener (new cory.eclipee.swt.events.SelecticnListener() { public void widget Selected (org.cclipse.svt .events.SelecticnBvent e) { sShall.close() , poblic void \widgetDefaul Selected (ong.ecl poe.sut events. Select irvente) 0 be Capfruco 11 Conectando seus programas aum banco de dados As aplicagdes desenvolvidas para um sistema de desktop no teriam muita Utilidade se no houvesse a possibilidade de guardar seus dados. Evidentemente voo8 nto guarda informagées de grande quantidade de dados em tum arquivo de texto simples. "No desenvolvimento de grandes aplicativos, vocé costuma trabalhar com bancos e dados relacionais, para que seu apicativo suporte grande quantidade de informa- _Osprogramas Javausamclasses JDBC paraconseguitemo modelo de programagio sexecutarinstrugbes SQL e processar os dados resultantes. O formato do bancode a plataforma em que ele foi desenvolvide nio importa, desde que ele tenha ‘a um driver DBC. Que £ JDBC? DBC uma API incluida dentro dalinguagem Javaparaoacessoabanco de dados. iste em um conjunto de classes e interfaces escritas em Java que oferecem uma API para.a programagio com banco de dados, por tanto é uma solugao 100% 146 | Dommanoo o Bcurse JDBC é uma especificagio formada por uma colegio de interfaces € sses, abstratas, que devem implementar todos os fabricantes de drivers que queiram realizar ‘uma implementagio de seu driver 100% Java ¢ compativel com JDBC. Devidoao JDBC serescrito completamente em Javatambém passaatera vantagem de ser independente de plataforma. Sendo assim, no ser4 necessério escrever um programa para cada tipo de banco de dados, uma mesma aplicagdo escrita utilizando JDBC poderstrabalhar com banco de dados como Oracle, Sybase, SQL-Server, MySQL, Firebird, PostgreSQL eetc. Mas QUAL BANCO DE DADOS DEVO UTILIZAR? Existem no mercado atualmente dezenas de bancos de dados, dos mais diversos tipos, uns que geram arquivos ¢ outros que so SGBD. Mas qual escolher? A resposta esti no que voc® vai desenvolver, Antes do desenvolvimento de algum programa, vocé analisa a capacidade do seu cliente em armazenar dados, o tamanho da empresa ¢ 0 quanto vai ser exigido do sistema, Depois voc analisa 0 quanto a empresa tem a investir, pois de nada adianta voc® fazer um sistema com um banco de dados carfssimo se a empresa s6 quer trabalhar com o menor custo possivel, ‘Assim que essas perguntas forem respondidas, voc esté pronto para tragaro perfil do seu sistema e a capacidade que ele vai ter. (© importante, do ponto de vista Java, € que, por se tratar de um programa ‘multiplataforma, tanto faz se ele rodard nesse ou naquele sistema operacional, mas, sempre temum mas, vocé deve estar ciente da portabilidade do seu banco de dados. Embora a linguagem SQL seja universal para todos os bancos de dados relacionais mais usados no mercado, infelizmente nem todos os bancos de dados so ‘multiplataforma, O BANCO DE DADOS ADOTADO Embora o Java possa trabalhar com diversos tipos de banco de dados, isso gragas asuaconectividade, voct iri trabalhar nesse livro somente com o MySQL. Mas porque ‘MySQL? Cartruto 11—Conscraxoo seusrroceamasauntnanco penanos | 147 OMySQL tem se destacado no mundo com um excelente banco de dados, além de ‘0 mais popular e o um dos mais répidos. Mas se existe limitagies, 0 que fago? __Emora existam limitagdes nas versGes estaveis até 0 momento da eriagio desse {if existem versdes que estdo em teste que darfo a voc® boa parte do que é ‘encontrado nos grandes sistemas de banco de dados existente no mercado, como red procedures e views por exemplo, SQL & 0 JDBC ‘OMySQL vem se destacando como um dos sistemas de gerenciamento de bancos -dados mais usados do mundo, Sua velocidade e capacidade de ser multiplataforma poderiam chamar a atengio de quem desenvolve em Java. (0 driver JDBC escolhido para fazer os exemplos neste livro foi o Connector/J 10 driver Connector/J, todos 0s tipos de aplicagies de Java podem acessar um de dados e seus dados, desde que seja em MySQL é claro. INSTALAGAO E UTILIZAGAO DO MySQL. No final do livro, vocé terd os apéndices relacionados a instalagdio em seu sistema onal predileto,criag%o ¢ utilizaglo do banco de dados MySQL bem como 0 vimento das tabelas necessias para os exemplos a seguir. SANDO O DRIVER CONNECTOR/J ‘Adicionar o driver Connector/J nos seu programas Java é muito: \download dodriverno site http:/www.mysql.convdownloads. Atéa produgio desse livro, a dltima versio do driver era 3.1.8, rie um diret6rio chamado de lib dentro do diret6rio do Eclipse e descompacte ivoe coloque-odentrodo diret6rio ib oarquivomysql-connector 8 is | Dounavoe o Burst FAZENDO A CONEXAO Inicialmente, como vem acontecendo a0 longo do livro, erie um novo projeto. Chame-o de TrabBancoDeDados. Ao clicar no botio Next, véatéa guia Libraries © cliqueno botio Add External JARS. Nacaixa dedislogo selecione odriverdo MySQL. para abrir. Clique no botio Finish para terminar. sare] @ roe tree | one nse Figura 11.1 INICIANDO A CONEXAO COM O BANCO DE DADOs MySQL. Crie inicialmente um pacote, que seguindo a linha do livro sera br.com.integrator. caplt.dados, Cie uma nova classe, s6 que esta nfo seré com Visual Class, € d@ 0 nome de “MinhaPrimeiraConexao, Mantenhachecadasas op%es publicstatic void main String{] args) Inherited abstract methods. Clique no botio Finish. (Cartruto 11 —Conectanno SEU PROGRAMAS A UM BANCO DE DADOS 49 Figura 11.2 Altere 0 arquivo adicionando 0 c6digo a seguir: MinhaPrimeiraConexao ja Package br .com. integrator. cap11.dados; import java.sql.*; public class MinhaPrimeiraConexao ( public static void main(String|] args) [ teyt Class. forNane (“org.g}t.mm.mysql.Driver”) ; Connection conn = DeiverManager.gotCanection (*jdbe:myql://Localhost/Livearia”, “xoot", “"): System. out.printin ("Conaxio estabelecida com sucesso!) ; ? ‘catch (ClassNotFoundexception enfe) { System. out. printin (cnfe..getMessage( )) ; ? catch (SQLException sqlex) { System.out.printin (sqlex.getMessage( )) ; ) 150 | Doununoo o East Aoimportar o pacote java.sql voce tem acesso as classes. interfaces para manipular ‘9s bancos de dados relacionais em Java (O driver de banco de dados deve ser empregado antes do programa se conectar ao banco de dads. Class. fortiane (“org.gjt.m.myaql Driver"); A linha anterior utiliza ométodo static for Name da classe Class (pacote java.tang) para carregar a definiglo de classe para o driver de banco de dados. ‘Seaclasse nilo for localizada, ele dispara uma excegao: java.lang.ClassNotFound Exception, Um objeto Connection gerencia a conexio entre o programa Java e o banco de dados. Ele também fornece suporte ao programa para executar instrugdes SQL. Através do método static getConnection, a classe DriverManager tenta uma ‘conexio com 0 banco de dados especificado pela string: jdbe:mysql:/Mocathost! livraria, Os argumentos seguintes si0.0 nome de usudrio ea senha, demonstrados pela string root e pelo valor vazio respectivamente. Caso a classe DriverManager no conseguir se conectar ao banco de dados, 0 ‘método getConnection disparaumaexceca0: java.sql. SQLException. Casoatentativa sejabem sucedida vocé verstuma mensagem na view Console: “Conexdo estabelecida v Onservacior Vocé pede colocar 0 super usudrio root se desejar, embora & altamente recomendével que nao seja feito isso por questies de seguranga. CRIANDO UMA TABELA COM RESULTADOS VINDOS DO BANCO Agora que vocé jé esté familiarizado com aconexio entre 0 Java eo banco de dados, voce dard um novo passo obtendo resultados desse banco e exibindo em uma janela com uma tabela criada em Swing. Cartruto 11—Conecraxoo seusrmoceausaumnancooenanos | 151 ‘Como jé feito anteriormente, no menu File, New e clique em Other. Selecione a ‘opsio Visual Class ¢ clique no botio Next. No nome da classe digite TrabBancoEJTable. Selecione em Style, no Swing, 0 ‘componente JFrame, Mantenha checadas as op¢Ses public static void main(String{] args), Constructors from superclass ¢ Inherited abstract methods. Clique no botio Finish, Digite 0 c6digo a seguir que esté em destaque ‘TrabBancoEJTable java package br.con. integrator.capl1.dados; import Java.awt.*; Amport Savax.swing.*; import Sava.eql.*; Amport Sava.ueil.*; public class TrabBancoBJTable extends JFrame { private JTable jTable = null; Private Connection conn; public TrabBancoBJTable() throws HeadlessException ( super ( initialize(); 1 public TrabBancoB JTable (GraphicsConfiguration gc) { ‘super (go): initialize(); 1 Public TrabBancokJTable String title) throws HeadlessException { super (title); initialize(); 1 public TrabBanco&JTable (String title, GraphicsConfiguration ge) { super (title, gc); // 7000 Auto-generated constructor stub initialize(); 152 | Downanoo 0 Beurse , private Vector gotProxinaLinha (ResultSet rs, RosultsotetaData rend) ‘throws SOLEXception( Vector LinhaAtual = now Vector ( ); for (int ist; i¢rand.getColumnCount( ); i++) ‘LinhaXtual .addelenent (rs.getString (i) ; return Linhantual ; private void mostrarResultados (ResultSet rs) throws SgLEXxception( //posiciona 0 resultado no primeiro registro boolean dados = re.next( ); //easo no existam registros, mostra wma mensagen AE (1 dados) { optionPane.showtinesageDialog this, "Nerkum registro encontrado” return: , Vector colunas = new Vector( ) 7 Vector Linhas = new Vector( ); text /fobtém os nomes dos campos do banco de dados ResultSetMataData rand = re.getMataData() for(int int ;icmrand.getColumncount () :i++) ‘colunas.addElenent (rend.gatColumName (i) : /[obtée 08 dados das Linhas do banco de dados aot ‘Linas .addBlement (getProximaLinha (rs, smd) ) ; Pwhite (rs-next( )); 3fable = new JTable (Linhas,colunas) ; ‘JserollPane jScrol1Pane = new JScrollPane (jTable) ; getContentPane() .ad(jScrol1Pane, java.ant,BorderLayout CENTER) ; validate(); (Cartruto 11—Conecraxno stus noceasas ava panco ne pxpos | 153 catch (SoLException sqlex) (sqlex.printstackTrace () ;} ) Private void getJTable( ){ ‘Statement statenent: Rogultset result; text ‘String query = “SELECT + FROM LIVROS" ; ‘statement = conn.createStatenant(); esult= statement. executeQuery (query) + mostrarResultados (result) ; statenent.close(); iL catch (SQLException aqlex) {sqlex.printstackTrace( public static void main(string!] args) ( ‘TrabBancoEJTable thet = new TrabBancofTable( ); ‘thet. setvisible (true) ; 1 private void initialize() ( teyl Class. fortiane (“org.gjt.mm.mysql Driver") ; conn = DriverManager .getConnection ("}dbc:mysql:// Jocathost/livraria”, "root", °") ; ) catch (ClassNotFoundException cnfe) { ‘System. cut.printin(cnfe.getNessage()) ; ) ‘catch (SQLException sqlex) ( ‘System. out printin (sqlex.getMessage()) » getuTable( ); teyl conn. close(): ) ‘catch (SgLEXception agiex) (sqlex.printStackTrace() /} this. setsize(350, 230) ; 154 | Dosmaxoo 0 Ecurse this.setTitle ("Banco de dados e Tabelas”); ‘this. setDefaultClosedperation (JFrame, EXIT_OW CLOSE) ; soon es rans' pena Poot is 7551-8 oer. FLASH Fash it ‘componente usado, JTable, apresenta uma grade bidimensional de objetos. Voce pode notar que apenas algumas foram necessérias para se criar uma tabela, Jfable = new JTable (Linhas,colunas) ; Isso demonstra que com pouco cédigo vocé pode criar tabelas totalmente funci- ‘onaisecomum ico comportamento. claro que, para preencheress abela vor teve ‘que colocar muitas outras linhas de c6digo. Para voc@ incluir barras de rolagem, foi necessdrio utilizar a classe JScrollPane. ‘JSorol1Pane }Scrol1Pane = new JScrol1Pane (jTable) ; Como vocé pode notar, essa tabela foi preenchida por dados vindos do banco de dados. Através do método initialize, apés a conexio com o banco de dados, 0 método getJ Table é chamado para executar a consulta ao banco de dados da tabela LIVROS, Esse método consulta o bancode dados echamaométodo mostrarResultados que cria a tabela com os resultados da consulta, (Cartrovo 11 -Conecraxpo stusmocnamasaumnanco ve papos | 155 ‘Quando uma consulta ¢ realizada no banco de dados, um objeto ResultSet & retomado contendo os resultados encontrados na consulta. Esse método permite a0 programador manipular os resultados vindos da consulta, Com 0 método executeQuery voc# tem o retomno de um objeto que implementa ResultSet e que contém os resultados da consulta. Esse resultado & passado ao método 100) width=20; column. setidth (width'5) ; column, setText (ramd.getColumnitane (i)) : 158 | Doman o Ecurse //obtém 08 dados da 1inha dot int 3=07 ‘Tablerten Linhas = new Tablertem(tabela, SW2.NULL) ; for (int = 1 ; icmrand.getColumncount(); i++) ( ‘Linhas. setText (j++,r8.getString (i); ) white (rs.next( )); ) ‘catch (SgLException sqlex) (sqlex.printstackTrace () ;) ) private void createTable() ( Statement statenent; ResultSet result; table = new Table(sshell, SW?.NONE) ; table. setiieaderVisible (true) ; table, setLinesvisible (true) ; ‘table. setBounds (now org.eclipse.swt.graphics.Rectangle(4,2,365,160)) ; text String query = “SELECT * FROM LIVROS"; statement = conn.createstatenent () regult= statement .exeoutequery (query) ; ‘mostrarResultados result, table) ; statement.close() ) ‘catch (sglException sqlex) (sqlex.printstackTrace() ) ) public static void main(string{} args) ( Display display = Display.getbefault ( ); TrabBancofTable thisClass = new TrabBancoBTable( )+ thisClass.createsshell (); thieClase.eshell.open() while (!thisClass.sshel1.isDisposed( )) { Af (!display.readandDi spatch( )) display.sleep()+ CCarrruto 11 - Contctaxo stus PROGRAMAS A UM BANCO DE DADOS 159 display.dispose(}; private void createsshell() { tet Class. fortiane("org.gjt.mm.mysql Driver”): conn = DriverManager .getConnection ("jdbc:mysql: // lecalhost/livraria”, “root”, “”); , catch (ClasstiotFoundException enfe) ( ‘Systen.cut.printin (cnfe.getMessage()) : ) ‘catch (SQLException sqlex) { System. out .printin (sqlex.getMessage()) : ) sShell = new shell(): sShell.setText ("Trabalhando com banco de dados © SWI"); createTable( ); s$hell.setSize (new org.eclipse.swt graphics. Point (380,200)) z , Como resultado voeé terd uma janela como a mostrada a seguir na Figura 11.5: eS 7D. Bald Cry Bae, 57505 12.. Cae Seve ucon SSAASH.. lsh M204 Dee, SEAL. Carrer debate, SEIAUE I. Agenda avo sa, (Siava PavAs ben one Figura 11.5 Carfruto 12 Programando um aplicativo mais complexo Esse capitulo marca o final da sua jornada a0 desenvolvimento de aplicativos para desktop em Java Swing usando a plataforma Eclipse. E para fecharcomchave deouro, ‘ycé criaré um aplicativo mais complexo usando muitos dos componentes que jf tilizou, acrescendo de alguns outros ndo vistos até o momento. E.claro que, como no poderia deixar de ser, voc€ uilizaréo banco de dados para armazenar as informagies. O BANCO DE DADOS Antes deiniciaro aplicativo, no seu MySQL, adicione um banco de dados chamado de agenda, utilizando o comando a seguir: mysql> create database agenda, Entre no banco de dados criado e acrescente a tabela como mostra os comandos a seguir: mysql>use agenda; nyoql> create table registros ( “> registro int not null aute_increnent, ~> nome varchar (35) , > endereco varchar (50), 162 | Dowmanoo o Eeurse > baizro varchar (20), > cidade varchar (20), > estado char (2), > cop varchar (9) , => telefone varchar (13), > primary key (registro)) ; v Nor) No deive de ir até 0 Apendice A onde ¢ feita uma abordagem do banco de dades MySQL utilizado nesse liv. CRIANDO A AGENDA EM SWING desenvolvimento dessa agenda inicialmente sera em Swing. Crie um novo projetoechame-ode AgendaEmSwing, Aoclicarnobotio Next, véatéa guia Libraries clique nobotio Add External JARS, Nacaixa de dislogo selecione odriver do MySOL para abrir. Clique no botio Finish para terminar. Crietambém um pacote chamado debr.com.integrator.cap!2.agenda, Inicie acriagdo de uma nova aplicagao. Nacaixa dedislogo New, selecione Visual Class eclique no botdo Next. No nome da classe digite AgendaEmSwing, Selecione «em Style, no Swing, ocomponente A pplication. Mantenhachecadas as opges public static void main(String(J args). Constructors from superclass Inherited abstract ‘methods. Clique no botio Finish. CRIANDO A INTERFACE Inicialmente vocé ird criar a interface do seu programa. Ele ter uma aparéncia semelhante & imagem a seguir (Figura 12.1): CCartruto 12~Proceamanoo umarucaTivomascometsx | 163 Figura 12.1 Inicialmente vocé ir alterara propriedade text dosmenuse submenus (Tabela 12.1) ‘do componente jJ MenuBar: ‘Tabela 12.1 Componente Propriedade Valor - fileMenw text Arquivo saveMenultem text Novo ‘exitMenultem text Ssir helpMenu text Ajuda aboutMemultem text Sobee Adicione wm JMenultem em Swing Menus,¢chame-o de newMenultem. Alterea riedade text para Novo, Selecionando na view Java Beans o componente fileMenu vi até 0 c6digo do seu ivo e altere como é mostrado em destaque a seguir: rivate IMenu getFileMenu( ) { if (fileMeny == null) { filewenu = new JMenu( ); fileMenu, setText (" fileMena. add (getNewtenuTtem( }) : Filevenu. add (getSaveMenuTtem( }) 164 | Dowmaxoo 0 Eeuse fileMenu.addSeparator (); fileMenu.add (getExitMenuttem ( }) 7 , return fileMenu; Vocé pode notar que a nica coisa colocada além do que jé havia sido feito € 0 separador antes do item Sair do sew menu, De resto apenas a ordem foi alterada, pois o item Novo apareceré antes Selecionandoo componente newMenultem vocé adicionaraocédigoem destaque a seguir: private OMenurten getNewenuttem() { Af (newenutten null) { neuienuTtem = new JMenultem( newenuIten.setText ("Novo") : nevtienuItem. setcoolerator ( ReyStroke. gotReyStroke( ReyBvent.VK_N, Event.CTRIMASK, true De , return newlenuItem; ‘Seu menu ser como o mostrado na imagem a seguir (Figura 12.2) arquivo Nove Figura 12.2 Pegue agora ocomponente JTooIBar na paleta Swing Containers. Adicione a0 seu aplicativo na constraint North, (Caxrtruto 12 Procrwanvo Unt ATUCATIVO Mats COMPLEXO 165, Adicione trés JButtons ¢ altere suas propriedades como mostra a tabela a seguir (Tabela 12.2): ‘Tabela 12.2 Componente Propriedade Valor Button fieldname bSalvar toolTipText Salvar icon save.sif Button fietdname biNovo toolTipText Novo icon newsif Button fieldname buExcluir toolTipText Excluir eon Delete sif enabled false Depoisdealteradoesses componentes, selecionena view Java Beansocomponen- te JToolBar e alter 0 e6digo em destaque a seguir: private JToolBar getaToolBar( ) { if (ToolBar == null) { ToolBar = new JToolBar( + JroolBar.add (getBtSalvar()); jToolBar.add (getBttovo ()) ToolBar. addSeparator() ; JToolBar.add (getBtexcluir()); ’ return jToolBar; A aparéncia do seu aplicativo ser4 como mostrada na Figura 12.3) 166 | Dowananno 0 Beurse wo Figura 12.3 Napaleta Swing Containers selecione o componente JTabbedPane. Adicione-o a0 centro do seu aplicativo (constraint - Center) ‘Namesmapaleta, adicione dois componentes JPanele alterea propriedade decada ‘um conforme a Tabela 12.3 a segui ‘Tabela 123 ‘Componente Propriedade Valor JPanel field name panelAgenda tabtisle ‘Agenda JPanel feldname panelDados tabtitle Dados ‘Ose aplicativo teré uma aparéncia semethanteamostradanaimagem (Figura 12.4) a seguir: Figura 12.4 Cartruto 12~Proceauanooumanucarvomascouruxe | 167 Alterea propriedade layout do painel panelAgenda para BorderLayout. ‘Napaleta Swing Components selecione o componente JTable on JScrollPane e ‘one ao centro do componente panelAgenda, ‘Agsnds etna Figura 125 (Cie uma nova classe no Eclipse, selecionando Classina caixa de dislogo Wizard, cologue o nome de Tabela. Mantenha selecionada a opgio Constructors from superclass. Clique em Finish, Digite 0 cédigo mostrado a seguir: ela.ja package br.com, integrator capl2.agenday import javax.ewing.table.*7 import Java.sql.*7 public class Tabela extends AbstractTableModel{ private Connection conexaos private Statement statenent; private ResultSet resultset; private ResultSetMetaDatametaData; private int linhasy private String query Public Tabela( String driver, String url, String user, String password, String query ) throws SQLException, ClassNotFoundException 168 Dowanaxno 0 Ecurse f 1) Carrega 0 driver do banco de dados Class. forNane( driver ); 17 conecta ao banco de dados conexag = DriverManager.getConnect ion ( url,user, password ); // cia Statement. statenent = conexao.createStatenent ( ResultSet. TYPE_SCROLL, INSENSITIVE, ResultSet .CONCUR_READ_ONLY }; // pega a query e a executa setquery( query }: ) // get class that represents column type public Class getColumClass( int column ) fi // determine Java class of colunn try | String className metaData.getColumnClassName( column +1); /f return Class object that represents className return Class. forNiane( classtlame ); ' catch ( Exception exception ) { ‘exception.printStackTrace |); , // s@ ocorrer wm problena, assume o tipo Object return Object class; , // pega © nimero de colunas no ResultSet public int getColumnCount ( ) 1 1/ determina o nimero de colunas try ( return metabata .getColumncount ( } ) catch ( SQLException sqlexception } ( sglException.printStackTrace (); ) // sa howwer preblenas, retorna o valor 0 para mimero de colunas Cartru10 12—Procraunooun arucatwouascourxso | 169 return 0; , 1/ pega © nome de uma coluna no Resultset Public String getColumnNane( int colunn } { // determina o nome da coluna try ( return metaData.getColunnNane( column + 1)+ , catch ( SQLException sqlException } { sqlException.printStackTrace (); ) // dando problema, retorna una string vazia return“; ) protected void finalize( ) ‘ // fecha Statenent @ Connection try ( statement .close(} ‘conexao.close(); ) catch ( SQLException sqlException ) ( sqlException.printStackTrace ( ); , 1/ retorna © nimero de linhas no ResultSet public int getRowcount ( ) ‘ return Linhas; 1 // cbtém valores em particular Linhas e colunas Public Object getValueat( int row, int column ) ( // obdtém um valor de una especifica Linha e coluna do ResultSet try ( resultSet-absolute( row + 1); return resultSet .getObject ( column +1); 170 | Dommxaxoo o Ecurse catch ( SQLException sqlException } { sqlException.printstackTrace( }+ ’ return ) //atualiza JTable em caso de alteragses nos dados public void refresh( ) throws SOLException{ ‘setQuery (query) + , // ceia ma nova query public void setQuery( String gry ) throws SQLException c query-arys J/ especifica e executa a query resultSet = statenent executeuery ( ary): metaData = resultSet.getMetaData( )+ // determina © nimero de Linhas em um ResultSet resultSet.last( }; // move para a Ultima linha Linhas = resultSet .getRow( ); // pega o nimero da linha // potifica JTable das alteraghes fireTablestructurechanged( ): 1 ) // fim da classe Tabela Basicamente esse cédigo se assemelha a0 exemplo do capitulo anterior no desenvolvimento da tabeta com dados vindos do banco de dados. Os comentérios foram mantidos para que vocé se guie no desenvolvimento desse c6digo. Voltando ao arquivo AgendaEmSwing java, em source, selecione o componente ITable na view Java Beans ¢ adicione o c6digo em destaque a seg private JTable getJTable( ) { String driver~"org.g}t.mm.myaql Driver” String url= "}dbc:mysql ://localhost/agenda’ String user~"root”; String password=""; (Cartrui0 12-Proceawnoouanucarvomascommuxo | 171 ‘String query="SELECT Registro, Nome, Telefone FROM registro: tey( ‘tabele = new Tabela( driverjurl, user, password, query ); ) catch (ClassNotFoundException classNotFound) { ‘JoptionPane, showiessageDialog( null, “Driver nio encontrado”, “Erro encontrado”, \JoptionPane.ERROR MESSAGE ) ; , ‘catch (SguException sqlex) { ‘JoptionPane. showiessageDialog( null, “Erro na SQL", “Erro encontrado”, \JoptionPane.ERROR MESSAGE ) ; , if (jTable == null) JTable = new JTable( tabela ); ) return JTable: Nas declaragées dos componentes, abaixo da declarago do componente jTable adicione 0 cédigo a seguir, em destaque: private JTable jTable = null; private Tabela tabela Rode © programa e veja as alteragdes. ‘No panelDados, altere a propriedade layout para null, Adicione os componentese altere suas propriedades como mostra a Tabela 12.4 a seguir: Tabela 12.4 ‘Componente Propriedade Valor Jabal fleldname INome text Nome: Iabel fieldname IEndereco tex Enderego: 172, | Dommanno o Ecurse ‘Tabela 12.4 (cvontinuagaio) Componente Propriedade Label feldname text Label feldname ILabel fieldname tex SLabel field name te Label fieldname JITextField field name STextField field name STextField feldname TextField fieldname JTextField fieldname ‘TextField field name TextField feldname Deixe seu aplicativo com a aparéncia préxima a mostrada na Figura 12.6 a seguir: Cartruto12-Procraunoo um arucarwomascouruexo | 173 Crie uma nova classe no Eclipse, selecionando Classna caixa de didlogo Wizard, coloque 0 nome de Conexao. Digite o cédigo mostrado a seguir: java Package br.com. integrator.capi2.agenda; Anport javax.swing. {import java.sql.*7 public class Conexao { private String driver private String url: private String usuario; private String senha; private Connection conn: private Statenent st; private ResultSet rs private Preparedstatement ps; /* Método pablico que faz a conexto com a base de dados * ndo precisando ser necessarianente MySQL ” private boolean conectar( } { boolean result = tru: try { Class. fortame (drive) 7 conn = DriverManager.getConnection (url, usuario, senha); , catch (ClassNotFoundException enfe) ( mostrarErro(cnfe.getMessage( )) + result = false; , catch (SQLException sqlex) { mostrarErro(sqlex.getessage( )): result = false: ) return result; , /* Método piblico que desconecta a base de dados ” public boolean desconectar () { 174 Donmanno 0 Bourse boolean result=false; try ( Af (conn! null) conn.close( result = true; Jeatch (SQLException erroSOL) ( mostrarErro (erroSQl..gettessage ()) result = false; : return result; 1 private void setDriver (string valor) { drive = valor: private void setURL(String valor) { url = valor; , private void setts usuario = valors Nane(String valor) [ ) private void setPassword (string valor) | senha = valor , /MiBtodo que executa querys de selec3o public ResultSet setExequery (string ary) { try ( st = conn.createstatenent ( ResultSet .TYPE_SCROLL_INSENSITIVE, ResultSet .CONCUR_UPDATABLE) rs = st.executequery (ary) + rs.next () , catch (SoLException sqlex) { nostrarErro(sqlex.getMessage()): , return rs; Cartruvo 12~ProcRAwANoo UM APLCATIVO MAIS COMFLEXO V5 {Método que executa querys de insercao public Preparedstatement set Insert (String ary) ( try ( pesconn.preparestatement (qty)? ) catch (SQLException sqlex) ( mostrarErro (sglex.getMessage()); ) return paz 7+ Método piblico que deve ser chanado * para iniciar a conexio " public void setConnection (String url, String username, String password, String driver) ‘ SetURL (url) setUserNane (usernane) ; setPassword (password) ; setDriver (driver); Af (!conectar( )) mostrarErro(“Erro ao se conectar! ) /* Método que mostra erros * executados por operagées ilegais ” private void mostrarrro(string msg) i \JOpt ionPane. showHessageDialog( nul, msg, “Erro encontrado”, \JOpt ionPane.ERROR_ MESSAGE) ; , 176 | Dowinanoo 0 Ecurse Voltandoao seu arquivo AgendaEmSwing,java,nas declaragdes dos componente da classe, digite 0 seguinte cédigs Private Conexao conexao; private Resultset ra; ‘Com isso, vocé tornard a sua conexio universal, apés conectar-se. Em seguida, digite 0 cbdigo em destaque no método getJTable: private JTable getJTable( ) ( String driver~"org.g}t.mm.mysal Driver"; String url= "jdbcrmysql ://localhost /agenda’ String user=root"; String password=""; String query~"SELECT Registro, Nome, Telefone FROM registros"; tryl tabela = new Tabela driver,url, user, password, query ); ‘new Conexao( ): conexac. setConnection (url, user, password, driver) ; i catch (ClassNotFoundexception classNot Found) { ‘Opt ionPane. showHessageDialog (null, “Driver nfo encontrado”, “Erro encontrado”, \JoptionPane.ERROR MESSAGE )z ) catch (SQLException sglex) ( ‘JOpt ionPane. showMessageDialog (null, “Erro na SQL”, “Erro encontrado”, \Jopt ionPane.ERROR MESSAGE ) ; , if (Table == null) { JTable = new JTable (tabela) ) return jTable; ‘Agora voce ird adicionar um evento a tabela com os nomes agendados, podendo assim selecioné-los tanto para excluir como também para alterar seus dados. Clique CCartruto 12~ PRocRAMANDO UM APLICATIVO MA COMPLEKO 7 com 0 botio direito do mouse sobre o componente JTable na view Java Beans ¢ selecione no menu de contexto, em Events a opso Add Events. Nacaixa dedislogo selecione o evento mouseClicked expandindo Mousee clique Jogo apés no botdo Finish, como mostra a imagem (Figura 12.7) a seguir: a Figura 12.7 Selecione na view Java Beans o evento mouseClicked e no c6digo adicione 0 trecho a seguir em destaque: 178 | Dommanno o Bourse JTable -addMouseListener (new java.awt event .MouseAdapter () ( public void mouseClicked (Java .awt .event .NouseEvent @) { String SQL = "SELECT * FROM registros WHERE registro= “+ SQL tetabela.getvaluent ( jTable.getSelectedRow( ), 0) re=conexao. setExeQuery (SQL) | beBxcluir. setEnabled (true) ; A£(e.getclickCount ( )==2) ( ‘YFabbedPane..setSalectedtndax (1) ; ext ‘teem. cotText (rs.getString(2)) ; ‘téendereco. setText (rs. getstring(3)) 7 ‘t€pairro.setText (rs.getstring (4)) ; tecidade.setText (rs.getString(5)) > teEstado.setText (rs.getstring(6)) + ‘teCep.setToxt (rs.getString(7)) ; teTelefone. settext (rs.getString 8) ) ; Jeatch (SgLException ex) { } Vfend 3 De Rode © programa e note que ao clicar sobre a linha desejada, o botio Exeluir fica habilitado. ‘Com um duplo clique, a guia Dados fica ativa e 0s dados do cadastro escolhido preenchem todos os campos. an en Cogan mre Ru Tl 5 tage: SP car, (SEED | rate (END AELY Figura 12.9 ‘Carfruto 12 ProckasaNoo UM AnLICATIVO MAIS COMPLEXO 79 ‘Com uma query, voc® locali correspondents. Através do método getValueAt, da classe Tabela vocé pode capturar 0 valor do ‘campo que desejar, bastando indicar 0 nimero da coluna. No caso, a coluna desejada era.a zero, pois 6 14 onde reside & idemtificagiio do registro da pessoa. ‘0s dados existentes na tabela.e as exibe nos campos tabela.getvaluert ( jTable.getselectedRow(), 0) Comométodo getSelectedRow, docomponente JTable, voc® consegue saber qual linha esta sendo clicada. ‘Com o método setExeQuery da classe Conexao, vocé executa a consulta criada, Esse método retorna um ResultSet, © método getClickCount conta a quantidade de vezes que 0 componente foi licado, no caso, serd duas, 0 que denota o duplo clique. ‘Ométodo setSelectedIndex, pertencente ao.componente JTabbedPane, jogaofoco ‘no painel indicado entre parénteses. A contagem ini Com o duplo clique, vocé adiciona a cada campo de texto, através do método sefText os valores encontrados nas colunas correspondentes no banco de dados, recebidos através do método getString, de ResultSet. COoNSTRUINDO OS METODOS PARA INCLUIR, EXCLUIR, ATUALIZAR E SALVAR Depois de trabalhar obésico necessério para o funcionamento do seu sistema, falta agora colocar os métodos necessirios para que vocé torne funcional o programa. Digite os métodos a se; executar suas devidas operagdes. no qual serio chamados pelo seu programa para //método que exclui dados private void excluir(Resultset rs) throws SQLException{ /lantes de excluir pergunta se deseja eliminar 0 cadastro Aint opcao=JOpt ionPane. showConfimmDialog (this, “Ten certeza que vocé deseja excluir esse cadastro? "Exclusio Cadastrado", JoptionPane. YES_NO OPTION) + 180 Dowmaxno o Ecurst. //se for positive inicia-se 0 processo de exclusio Lf (opcao=J0pt ionPane..YES_OPTION) { rs.deleteRow( );//exclui os dados /fatualiza a tabela com os novos resultados tabela.refresh(); //eesabilita 0 botao de excluir btExcluir.setEnabled(false) ; //fecha 0 resultset rs.close( ): , r //metodo que lista em una matriz os campos da guia Dados private JTextField[ } campos( ){ STextFieldl ] tf = (tfNome, tfEndereco, tfBairro, tiCidade, tfEstado, tfCep, tfTelefone}: return tf; ) //nétodo utilizado para salvar as insergbes ... private void salvar( ){ tryl STextField[ ] tf = campos ( ): String SQL ="INSERT INTO registros " + "VALUES (NULL, 2, 2,2, ‘/Jequi voce prepara a SOL para inserir os dados PreparedStatement ps=conexao.set Insert (SOL) // que serio capturados aqui for (int i=07ctf.length; i++) ps.setString (itt, tf[1] .gettext (1); /enecutando a inser¢3o ps.executeUpdate( ); Jos campos serio Limpos Limpar( ) //a tabela atualizada tabela.refresh(); ps.close( ); //a guia Rgenda ganha 0 foco jTabbedPane. setSelectedindex (0); // a variavel novo fica novanente com o valor false novosfale; , catch (SQLException ex) (ex.printStackrace();} ' // «+ 0u para atualizar os dados existentes private void salvar (ResultSet rs) throws SOLException( Cartruto 12-Procmmuxnoumaricanvomascommtxe | 181 STextField{ } tf = canpos( ); Hantes de salvar 08 dados atualizados ¢ feita una pergunta {nt opcao=JOptionPane. showConfirmDialog(this, "Deseja salvar as alteracdes desse cadastro?", "Aiteracdo de Cadastrado", opt ionPane. YES_NO_OPTION) 7 pe se voct escolher YES inicia-se 0 processo de atualizacio dos dados ” if (opcaos=JoptionPane.YES_OPTION) { //sexio capturados 08 valores das caixas de texto for(int i-0;i