39446343 Minicurso Java NetBeans

Embed Size (px)

Citation preview

DESENVOLVIMENTO DE APLICAESJAVA UTILIZANDO A IDE NETBEANSAlexander Haroldo da Rocha Renato de Jesus Manzoni

TPICOS ABORDADOSReviso dos pilares da programao orientada objeto; Noes primrias de Engenharia de Software; Classpath e .Jar (Java ARquive); Pacote javax.swing.*; javax.swing. ; Conexo com banco de dados via JDBC; Tratamento de Excees com try-catch-finally; Utilizando o debug do NetBeans; Desenhando primitivas geomtricas sobrescrevendo o mtodo paintComponent();

BIBLIOGRAFIADeitel, H. M; Deitel, P. J. Java, como programar, 6 ed. Horstmann, Cay S. e Cornell, Gary. Core Java 2 Recursos Avanados, vol 2, MakRon Books, 2001 Seu maior ajudante: www.google.com

CONHECENDO A IDE NETBEANSDescobrindo o ambiente e aprendendo as suas D bi d bi t d d facilidades

CONHECENDO A IDE NETBEANSO NetBeans uma IDE Java desenvolvida pela empresa Sun Microsystems. um ambiente d d bi t de desenvolvimento i t l i t integrado d gratuito e de cdigo aberto para desenvolvedores de software. A IDE executada em muitas software plataformas, como Windows, Linux, Solaris e MacOS. Dica de Programao -C h Conhea e use t d as f ilid d que a IDE todas facilidades tem a oferecer: Hiperlinks, AutoComplet, Soluo automtica de erros etc erros, etc.

REVISO DE ORIENTAO OBJETORevisando os principais conceitos de orientao a R i d i i i it d i t objeto, aplicando essas definies na linguagem Java

POO REVISO DOS CONCEITOSMotivao:Abstrair os conceitos do mundo real Identificar estes conceitos como objetos

Pilares da Programao Orientada a Objeto:Abstrao. Encapsulamento; Herana; Polimorfismo;

POO REVISO DOS CONCEITOSDefinindo uma Classe:Abstrao: public class Pessoa { String nome; int idade; boolean sexo; public Pessoa() { } }

Atributos da Classe

Construtor: toda vez que se cria um objeto, o construtor i bj t t t chamado.

POO REVISO DOS CONCEITOSEncapsulamento:Proteger os atributos da classe.Os Mtodos encapsulam os atributos da classe classe.

Omitir detalhes de implementao.O mtodo oferece um servio, sem informar como ir faz-lo.

public class Pessoa { ... void setNome(String nome) { this.nome = nome; } void setSexo(boolean sexo) { this.sexo = sexo; } void setIdade(int idade) { if( idade > 0 ) this.idade = idade; } Garante a integridade do atributo idade }

POO REVISO DOS CONCEITOSpublic class P bli l Pessoa { ... String getNome() { return nome; } boolean getSexo() { return sexo; } int getIdade() { return idade; } g () ; float getSalario(...) { ... return salario; } }

p Oculta detalhes de implementao

POO REVISO DOS CONCEITOSHerana:Classes (sub-classe) que herdam atributos e mtodos de outra classe (super-classe): (super classe): p public class Professor extends Pessoa { String cursoSuperior; int anoFormao; } public class Funcionario extends Pessoa { int experienciaProfissional; String departamento; }

POO REVISO DOS CONCEITOSPolimorfismo:Sobrecarga de Mtodos:Mtodos Mt d possuem o mesmo nome, porm nmero diferentes de parmetros.

public class Pessoa { float getSalario(float impostoA) { return (salario - impostaA); } float getSalario(float impostoA, float impostoB) { return (salario - impostaA - impostoB); }

POO REVISO DOS CONCEITOSSobrescrita de Mtodos:public class Professor extends Pessoa { float getSalario(float impostoA) { return ( l i - i t (salario impostoA + b t A bonus); ) } }Mtodos possuem o mesmo nome e os mesmos parmetros, porm o corpo do mtodo diferente.

O QUE VOC PRECISA SABER EM JAVAToda classe em Java herda automaticamente da classe Object. I t i bj t Instanciar objetos:Pessoa p = new Pessoa();

Saber S b usar os modificadores d acesso: difi d deprivate: somente a classe que contm seus atributos e mtodos tem acesso a esses esses. public: Classes que contm atributos e mtodos public permitem que outras classes tenham acesso a esses.

Declarar classes abstratas. Isto permite que classes no sejam instanciadas.public abstract class Faculdade { ... }

O QUE VOC PRECISA SABER EM JAVAToda classe tem o mtodo toString(). Esse mtodo retorna uma representao String do objeto. importante sobrescrever este mtodo. mtodopublic class Pessoa { String toString() { return nome; } } Ex: Pessoa p = new Pessoa(); System.out.println(p); System out println(p);

NOES DE ENGENHARIA DE SOFTWARENoes bsicas de construo de um software N b i d t d ft

NOES DE ENGENHARIA DE SOFTWARESeparar o sistema em trs camadas bsicas: interface, estrutura e persistncia; O i i d d de Organizar-se, seguindo padres d desenvolvimento de software; Dividir o desenvolvimento do software em fases fases, cada fase tratando uma parte da aplicao. O fim de uma fase constitui na entrada da outra fase; Conhecer noes bsicas de atribuio de p responsabilidades; Condicionar ao reuso; No misturar Interface com Estrutura e vice-versa; ;

NOES DE ENGENHARIA DE SOFTWAREBoa Prtica de Programao - Utilize padres de escrita de cdigo.o

o

o

o

o

Nome de variveis e nome de mtodos: primeira minscula e as primeiras da prxima palavra em maiscula: nomePessoa, inserirFimFila(...) Nome de mtodos, como verbos no infinitivo: carregarPessoa(), carregarPessoa() imprimirSaldo() Nome de pacotes, classes e imagens comeando com letras maisculas; Comentrios do tipo /* ... */ para principais e do tipo // (linha) para comentrios internos; Nunca usar _ ou qualquer outro caractere em nome de atributos;

CLASSPATH E .JARO CLASSPATH uma i importante varivel d t t i l de ambiente do Java. Essa varivel importante tanto para compilar q quanto p para executar o seu p g programa, p p , j que especifica onde esto armazenados os arquivos e bibliotecas necessrios, tanto para a compilao, compilao quanto para a execuo. execuo JAR significa Java ARchive, e simplesmente um arquivo ZIP normal, com uma extenso diferente apenas. Estes arquivos so usados para facilitar a distribuio de pacotes e manter a simplicidade na hora de configurar os ambientes de desenvolvimento, uma vez que possvel colocar todos seus pacotes dentro de um nico arquivo JAR

CLASSES E MTODOS IMPORTANTESMtodos estticos das classes Integer, Short, Float, etc:Integer valueOf(String str | int i); Integer.valueOf(String Integer.parseInt(String str);

Mtodos bsicos em algumas classes do swingsetVisible(true | false); setText( string ); setText(string); setEnable(true | false);

y ; Classes LinkedList e ArrayList; Conceitos de herana e abstraes de classe para sua utilizao em listas encadeadas;

PACOTE JAVAX.SWING.*;Pacote swing de interface grfica do java P t i d i t f fi d j

JAVAX.SWING.* Pacote java para desenvolvimento de aplicaes com interface grfica. Substituiu a awt como padro java, desde o Java 1.2 (Java 2) Cada componente ter vrios eventos associados a ele. Alguns eventos so: actionPerformed(...), KeyPressed(...), MousePressed(...) KeyPressed( ) MousePressed( ) MouseDragged(...), ItemStateChange(...), etc. Basicamente temos Contineres e Componentes. Componentes Os Conteiners encapsulam Components. Boa Prtica de Programao - Procure no utilizar os nomes de atributos sugeridos como default pelo NetBeans como NetBeans, jButton1. Mude para botaoCadastrar, por exemplo

JAVAX.SWING.JFRAME Frame utilizado para formulrios ou telas principais do sistema. O mtodo setVisible(true) torna-o visvel e o mtodo dispose() fecha o frame. Se for o frame principal, feche com System.exit(0) this.setExtendedState(this.MAXIMIZED_BOTH); this setExtendedState(this MAXIMIZED BOTH); Constantes usadas no mtodo acima: - NORMAL: Tela no estado normal - ICONIFIED: Tela no estado minimizado - MAXIMIZED_HORIZ: Expanso horizontal - MAXIMIZED_VERT: Expanso vertical - MAXIMIZED_BOTH: Tela maximizada

JLABELComponente texto para formulrios

JBUTTONComponente boto. Assim como qualquer outro componente swing ele bem genrico No swing, genrico. utilizado apenas como boto simples, mas tambm como botes de barra de ferramentas, panels, etc. p

JCHECKBOXCaixa de seleo simples. O mtodo isSelected() retorna se est ou no setado.

JRADIOBUTTON E BUTTONGROUPCaixas de seleo para grupo de selees selees. Cada radioButton um campo de seleo. Crie um buttonGroup para formar um grupo de seleo e ento associe cada radioButton ao grupo que desejar, atravs do atributo buttonGroup.

JTEXTFIELDCampo de escrita simples simples. Como no h limitao de nmero de caracteres, deveremos utilizar um outro artifcio para tal tal. Atravs de uma classe chamada FixedLengthDocument, feita especialmente para esse caso, podemos setar o tamanho mximo do campo.jTextFieldNome.setDocument( new FixedLengthDocument(30) );

JPASSWORDFIELDO mesmo para um JTextField, porm, existir um p ,p , caractere indicativo de senha. ( )

JFORMATTEDTEXTFIELDCampo de escrita formatada Exemplos de aplicao: RG, CPF, Datas, etc// Criando uma mscara d f Ci d de formatao t MaskFormatter formatterData = new MaskFormatter(##/##/####); // Instalando a mscara no jFormattedTextField formatterData.install(jFTextFieldNasc); // Setando um texto 10/12/1990 j jFTextFieldNasc.setText(10121990); // Aceita com ou sem / ( )

# - Dgito * - Qualquer tecla H Hexadecimal \ - Literal U Caractere em maisculo L Caractere em minsculo AC Caractere alfa-numrico lf i ? Caractere qualquer

JTEXTPANErea extensa para textos sem formatao

JTOGGLEBUTTONComponente boto do tipo pressionado e no pressionado. pressionado Segue as mesmas caractersticas e generalidade do JButton

JPANELBase que sustenta um pequeno conjunto de componentes. Tem generalidades especficas que veremos mais adiante.

EXERCCIO 1ACrie uma classe Pessoa com os seguintes campos: nome (String limitada de tamanho 20), idade (short), dataInscricao (String formatada), moraSozinho (boolean) Por enquanto, no se preocupe com sets e enquanto (boolean). gets. Lembre se Lembre-se das tcnicas de Engenharia de Software: Interface e Estrutura devem estar em pacotes separados. Crie dois pacotes com esses nomes; Faa um formulrio sobre um jPanel com borda (TitledBorder), como mostra o arquivo ex1a.jar. Cadastrar, Ao clicar no boto Cadastrar instancie um objeto da classe pessoa e em Cancelar, feche o frame. Os Botes devem estar fora do painel! p

JSCROLLBAR E JSCROLLPANEBarra de rolagem simples e em caixas caixas. Componentes, como tabela, so utilizados dentro de um JScrollPane

JTABBEDPANECaixa com abas. A estrutura de um TabbedPane simples, sendo que cada aba ser adicionada atravs de um Panel.

EXERCCIO 1BFaa um tabbedPane e coloque duas abas: o panel com o pequeno formulrio com o nome de Dados Gerais e outro vazio com o nome de Dados Pessoais (nome do atributo Tab Title) O formulrio da nova aba dever conter campos para CPF e RG, devidamente formatados, como mostra o arquivo ex1b.jar. Os botes de Cadastrar e Cancelar devem estar fora do painel de abas.

JCOMBOBOXComponente que armazena uma lista de objetos, sendo que apenas um visvel. Utili o mtodo t St i () para mostrar a t d toString() t Utiliza informao visvel. addItem(Object anObject) Adiciona um objeto ao comboBox. getSelectedItem( ) Retorna o objeto selecionado. setSelectedItem(Object objeto | int indice) Seta o objeto como selecionado. Possui dois tipos de parmetros: o ndice do objeto no comboBox ou ento o prprio objeto a ser selecionado. selecionado removelAllItens() Remove todos os tens

JLISTSemelhante ao ComboBox, s que todos os elementos do List so visveis e a seleo feita por linha. possvel tambm a seleo de vrias linhas simultaneamente.

JSPINNERComponente q muda os valores atravs de p que botes do tipo up-down. (Geralmente para inteiros) setValue(Object value) Seta o valor do Spinner ( j ) getValue( ) Retorna o Objeto indicado no Spinner Utilize o evento StateChange para tratar mudanas g p no Spinner. (Impedir valores negativos, por ex.)

EXERCCIO 2Utilize o arquivo ex2.jar como base. Troque o campo idade por um JSpinner. Limita o S i d j l Spinner d modo que no seja possvel nmeros de negativos (evento Change StateChange). Na aba Dados pessoais do JTabbedPane crie os JTabbedPane, campos para endereo (endereo e cidade) e estado como sendo um jComboBox. (coloque uns 5 UF apenas). Crie apenas campo estado do tipo String na classe Pessoa.java. Mude o construtor da classe Pessoa, de modo que inclua o parmetro estado (UF). No boto Cadastrar, i t C d t instancie a classe P i l Pessoa com o atributo adicional do estado (UF).

JTABLEComponente tabela tabela. Dados relativos tabela so armazenados no objeto model (Modelo da tabela) Sempre que for trabalhar com os elementos da tabela, utilize o mtodo getModel( ) para retornar o , g ( p modelo da tabela. // Retornando o modelo da tabela para trabalhar com ela javax.swing.table.DefaultTableModel modelo = (javax.swing.table.DefaultTableModel) jTable.getModel(); Agora com o modelo da tabela, possvel inserir registros nela.

JTABLE// Apaga tudo na tela modelo.setRowCount(0); // Adiciona uma linha tabela modelo.addRow(new Object[ ] { Object1, Object2, ... } ); // Remove uma linha da tabela modelo.removeRow(indice) d l R (i di ) / /* No precisam do modelo da tabela */ / // Retorna o objeto na linha row e coluna column modelo.getValueAt(row,column); // Retorna o nmero de linhas selecionadas modelo.getSelectedRowCount( ); // Retorna o ndice da linha selecionada, caso seja uma selecionada ma modelo. getSelectedRow( );

EXERCCIO 3Agora ao lado do painel com abas que est pronto pronto, coloque uma tabela com dois campos: nome e estado. Ao clicar em cadastrar, instanciado um objeto pessoa e adicionado na tabela. Depois, apague todos os campos do formulrio (crie um mtodo para isso!). Apie-se no arquivo ex3.jar. Implemente o mtodo toString( ) da classe Pessoa, d l t sendo que ele retornar o nome d pessoa, e t d os da todos gets( ) da classe (Encapsular campos do NetBeans. tabela. Coloque um boto Exibir Dados abaixo da tabela Ao clicar nele, a linha da tabela buscada e os dados da pessoa so mostrados. (Pode ser mostrado com o mtodo System.out.println(...). (java jar ex3.jar)

JMENUBARMenu para Frames principais. Utilize a toolbar Inspector do NetBeans. No M B li MenuBar, clique com o b t di it d mouse e v boto direito do em Add. Add Jmenu adiciona um novo menu Add JMenuItem adiciona um tem do menu Add Jmenu em um MenuItem adiciona um sub submenu. Add JSeparator adiciona um separador (uma linha) entre os itens do menu. Note que JSeparator um componente g p genrico, usados em muitos outros , objetos, como na jToolBar (barra de ferramentas)

JTOOLBARBarra de ferramentas. Para adicionar botes ou separadores, escolha o componente que deseja e arraste para a toolbar toolbar. Para botes, voc pode retirar o texto e colocar uma figura Para isso clique no boto e altere o figura. isso, boto, atributo icon com a imagem desejada. Utiliza o Classpath para no ter problemas com referncia. Assim como no MenuBar possvel adicionar separadores na toolbar. Selecione o atributo floatable se desejar uma toolbar que pode ser deslocada de um lugar para o outro. t

JPOPUPMENUMenu Popup para componentes Utilize os mesmos princpios do JMenuBar para i itens d menu ao JP M criar it de JPopupMenu. Para adicionar o menu Popup em algum componente, componente no atributo componentPopupMenu indique o menu Popup que voc deseja utilizar.

EXERCCIO 4Igualmente ao arquivo ex4.jar, faa um menuBar e uma toolBar para a aplicao. No esquea de fazer referncia s figuras atravs do ClassPath ClassPath. Para isso, crie outro pacote com o nome de Imagens. g Faa um menu Popup para a tabela. Coloque como itens do menu: Deletar Registro, jSeparator e Fechar. Ao clicar em Deletar, remova a linha selecionada na tabela.

JDIALOGTela de dilogo rpido do usurio com o sistema. No um tipo de frame que se usa para fazer formulrios formulrios. A caracterstica mais marcante desta classe o atributo modal que indica que a tela estar sempre a frente de todas as outras e que voc no poder fazer mais nada enquanto no fech-la. Exemplos de dialogs so: dialogs para salvar/abrir arquivos, avisos de erro ou informativos, dialogs de impresso, etc. i t

JDIALOGJDialogConexao dialogConexao; dialogConexao = new JDialogConexao(this,true); java.awt.Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); j t T lkit tD f ltT lkit() tS Si () // Posiciona a dialog no centro dialogConexao.setLocation(d.width/2 dialogConexao.getWidth()/2, d.height/2 dialogConexao.getHeight()/2); dialogConexao getHeight()/2); dialogConexao.setVisible(true); dialogConexao setVisible(true);

JFILECHOOSERClasse permite que se escolham arquivos ou diretrios.JFileChooser jFileChooser = new JFileChooser(); // Seleciona somente arquivos jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); if( jFileChooser.showDialog(jDialogBuscaBD, "Abrir") == JFileChooser.CANCEL_OPTION ) return; t String arquivo = jFileChooser.getSelectedFile().getPath();

JFILECHOOSERPode-se tambm adicionar filtros ao fileChooser. Veja os exemplos abaixo:// Criando um novo filtro filtroJPEG = new FileNameExtensionFilter("JPEG Files", "jpg", ( jpg "JPG", "jpeg","JPEG"); // Existir um filtro do tipo All Files ? All Files fileChooser.setAcceptAllFileFilterUsed(false); // Adiciona o filtro no fileChooser fileChooser.addChoosableFileFilter(filtroJPEG);

UM POUCO DA CLASSE FILEA classe File uma classe genrica para tratamento de arquivos, do tipo verificar se ele existe qual o seu caminho seus atributos etc existe, caminho, atributos, etc. Para salvar ou abrir arquivos utiliza-se outras classes: as Data ou File Input/OutputStreams para arquivos binrios e FileReader/Writer para arquivos textos. No entraremos em detalhes dessas classes, pelo tempo que temos, porm, utilize a descrio destas classes pelo NetBeans. No muito complicado!

JDESKTOPPANE E JINTERNALFRAMEMuitos aplicativos utilizam uma interface de mltiplos documentos (MDI). B i t j l i i l (janela-pai) l i) Basicamente, uma janela principal (j contm outras janelas (janelas-filha) para gerenciar vrios documentos abertos que esto sendo processados em paralelo. JIFTeste jInternalFrame = new JIFTeste(); j p (j ); jDesktopPane.add(jInternalFrame); jInternalFrame.setVisible(true); JIFTeste jI t JIFT t jInternalFrame = lF (JIFTeste)jDesktopPane.getSelectedFrame();

EXERCCIO 5Como o arquivo ex5.jar, coloque o painel de abas em um InternalFrame e faa um desktopPane na janela principal Faa as chamadas de eventos necessrias principal. necessrias, de modo que seja possvel abrir o formulrio pelo menu e pela toolbar. p No se esquea de transferir todo o cdigo relativo ao formulrio para o InternalFrame, juntamente com as formataes dos TextFields no constrututor do frame, mtodos relacionados e o buttonGroup do sexo. Todo o cdigo relativo tabela dever ser retirado, removendo at mesmo a tabela e o menu Popup relativo a ela Maximize o Frame Principal ao iniciar ela. iniciar.

JOPTIONPANEA classe JOptionPane oferece caixas de dilogo predefinidas que permitem aos programas exibir mensagens ao usurio. Abaixo segue alguns mtodos desta classe:// C i d dil Caixa de dilogo de uma mensagem d showMessageDialog(null, "Mensagem", "Ttulo", messageType); // Caixa de dilogo de confirmao showConfirmDialog(null, "Mensagem", "Ttulo", optionType, optionType messageType); // Caixa de dilogo de uma entrada showInputDialog(null, "M h I tDi l ( ll "Mensagem", "Tt l " messageType); " "Ttulo", T )

Constante (optionType)YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION

DescrioCaixa de dilogo do tipo Sim ou No Caixa de dilogo do tipo Sim, No ou Cancelar Caixa de dilogo do tipo OK ou Cancelar

Constante (messageType)ERROR_MESSAGE

cone

DescrioExibe um dilogo que indica um erro para o usurio Exibe um dilogo com uma mensagem com informaes para o usurio i f i Exibe um dilogo que adverte o usurio sobre um problema em potencial Exibe um dilogo que impe uma pergunta ao usurio. Geralmente exige uma resposta do tipo Sim ou No

INFORMATION_MESSAGE INFORMATION MESSAGE

WARNING_MESSAGE

QUESTION_MESSAGE

PLAIN_MESSAGE

Sem cone

Exibe um dilogo que simplesmente contm uma mensagem, sem nenhum cone

JSLIDERComponente usado para barra de valores. Voc pode escolher o valor mnimo e mximo da barra, que ela devolve a voc o valor corrente corrente.

JPROGRESSBARBarra de progresso simples. Contm atributos para valores mnimo e mximo da barra de progresso e tambm um campo string que pode ser adicionado opcionalmente para informar a porcentagem corrente.

HTML EM COMPONENTES SWINGA interface grfica Swing aceita cdigos HTML para formatao de textos. simples de usar e muito til em vrias situaes situaes. Para usar, apenas coloque o cdigo HTML pelo mtodo setText(...); dos componentes. setText( ); componentes String strHtml = " Ol
Mundo
"; JOptionPane.showMessageDialog(null,strHtml, Teste JOptionPane PLAIN MESSAGE); "Teste",JOptionPane.PLAIN_MESSAGE);

ADICIONANDO UM RELGIO EM UM FRAMECrie um label no frame que desejar desejar. Faa o seu frame implementar a classe ActionListener. Compile. Veja que o NetBeans pedir os pacotes necessrios e tambm implementar os mtodos abstratos. Nesse momento, ele criar um mtodo: actionPerformed(ActionEvent e) Crie um mtodo dispararRelogio() e chame esse mtodo no construtor do f t d t t d frame e implemente a f i l t funo actionPerformed(...) isso, frame, Para isso lembre de criar um atributo no frame do tipo javax.swing.Timer. Olhe o arquivo relogio jar para v lo funcionando relogio.jar v-lo funcionando. Adicione seu relgio ao projeto

public void dispararRelogio() { timer = new javax.swing.Timer(1000, this); timer.setInitialDelay(0); timer.start(); timer start(); } public void actionPerformed(ActionEvent e) bli id ti P f d(A ti E t ) { GregorianCalendar calendario = new GregorianCalendar(); int h = calendario.get(GregorianCalendar.HOUR_OF_DAY); int m = calendario.get(GregorianCalendar.MINUTE); int s = calendario.get(GregorianCalendar.SECOND); g ( g ); String hora = ( (h < 10) ? "0" : "" ) + h + ":" + 0 : ( (m < 10) ? "0" : "" ) + m + ":" + ( (s < 10) ? "0" : "" ) + s ; jLabelHora.setText(hora); jLabelHora setText(hora); }

TRATAMENTO DE EXCEES COM TRY-CATCH-FINALYTratando T t d erros lgicos excepcionais, de falhas ao l i i i d f lh acesso de um BD at erros de diviso por zero.

CONHECENDO A ESTRUTURA DE UM TRYCATCH-FINALLYtry { // Cdigo que te ta se e ecutado tentar ser executado Cd go } catch( Exception e ) { // Se uma exceo for atingida, este cdigo // executado } finally { // Finalmente, com ou sem exceo, este cdigo // executado }

VISO GERAL DAS EXCEES

CLASSE DE EXCEESExistem basicamente duas classes de excees: excees verificadas e excees no verificadas. E ifi d i Excees no-verificadas no precisam ser listadas na clausula throws. Em geral so as excees de execuo (RuntimeException), como (RuntimeException) ponteiro nulo, erro de casting, erro de aritmtica, de limite de arrays, etc. Podem ser evitadas facilmente atravs de uma boa programao. Excees verificadas devem ser listadas na clusula throws, porque ela depende de vrios fatores que no so influenciados pela programao, programao mas sim pelo estado de execuo do programa, como em BD, abertura de imagens, etc.

THROWUm mtodo pode ser declarado como throws. A grosso modo, significa que o mtodo no vai t t a exceo que segue th tratar throws. El ser Ela jogada para o mtodo que chamou este mtodo em questo. questo O sentido disso muito simples: quando ocorre um erro em uma insero no bando de dados, no ser naquela camada que eu avisarei o usurio deste erro. Ento a exceo ser lanada mtodo a mtodo at chegar camada de Interface, que tratar a exceo e avisar o usurio com mensagens de erro apropriadas. apropriadas

EXEMPLO DE THROWSpublic void metodoA() bli id d A() { try { objeto.metodoB(); j (); } catch( Exception1 ex ) { /* Cdigo para a exceo */ } } public void metodoB() throws E Exception1, E bli id d B() h i 1 Exception2 i 2 { // Codigo ... }

MTODOS DOS OBJETOS DE EXCEOExistem alguns mtodos que os objetos de exceo oferecem para analisarmos os erros. // Imprime a pilha de chamada de mtodos excecao.printStakeTrace() i tSt k T () // Retorna uma string descrevendo o erro ocorrido excecao.getMessage()

CONEXO COM BANCO DE DADOS VIA JDBC

CONEXO COM O BANCO DE DADOS - JDBCA conexo com o banco de dados vai JDBC utiliza um arquivo .jar que constitui o elo de ligao da aplicao com o SGBD utilizado Ele deve ser utilizado. includo nas Opes do Projeto. Na janela Runtime possvel fazer uma conexo Runtime, local com o banco de dados para fazer algumas consultas ou atualizaes. Utilize a classe de apoio Conexao.java, j pronta. p p Trs mtodos principais q voc deve conhecer que desta classe: conecta(), desconecta() e getConection() .

PASSOS PARA FAZER UMA APLICAO COM BANCO DE DADOS 1. Inicialmente e ironicamente no se preocupe com o banco de dados da aplicao. Faa os formulrios e tudo o que necessita para a aplicao. 2. 2 Utilizando um SGBD faa um banco de dados SGBD, para a aplicao. 3. Inclua no projeto a classe Conexao.java e faa uma outra abstrata, que vai ser sua camada de persistncia. 4. Nesta classe de persistncia, implemente os mtodos insert, updade, etc, como estticos. 5. Em Projeto/Propriedades Libraries, inclua o conector JBDC (add JAR/Folder)

PASSOS PARA FAZER UMA APLICAO COM BANCO DE DADOS 1. J foi feito! 2. Vamos fazer um BD para o ltimo exerccio. V i Vamos criar uma t b l PESSOA com os campos tabela rg (chave primria), nome, idade, cidade e estado, sendo do tipo varchar(tamanho de restrio) 3. --4. 4 Agora vamos ver como os comandos sql devem ser inseridos no cdigo. Lembrando que devemos p j passar a classe q desejamos salvar e a que conexo atual usada.

IMPLEMENTANDO O MTODO SAVARREGISTROMtodo savarRegistro(Pessoa p, Conexao conexao)conexao.conecta(); Connection con = conexao getConection(); conexao.getConection(); String query = "INSERT INTO pessoa(rg, nome, idade, cidade, estado) VALUES (?,?,?,?,?)"; PreparedStatement pSt = con.prepareStatement(query); pSt.setString(1, p.getRg() ); pSt.setString(2, p.getNome() ); pSt.setInt(3, p.getIdade() ); pSt.setString(4, p.getCidade() ); pSt.setString(5, p.getUF() pSt setString(5 p getUF() ); pSt.executeUpdate(); pSt.close(); conexao.desconecta();

IMPLEMENTANDO O MTODO ATUALIZAREGISTRO semelhante ao mtodo anterior, diferenciando apenas no comando SQL a ser usado.

IMPLEMENTANDO O MTODO CARREGAREGISTROA maneira de como proceder permanece quase a d t l mesma. P o comando que executa a sql Porm, outro: executeQuery(...). Este comando retorna os resultados da consulta de um select em uma estrutura denominada ResultSet.

IMPLEMENTANDO O MTODO CARREGAREGISTROconexao.conecta(); () Connection con = conexao.getConection(); Statement st = con createStatement(); con.createStatement(); ResultSet rs; String query = "SELECT nome, idade, estado FROM pessoa gq y , , p WHERE rg = " + rg; rs = st.executeQuery(query); Pessoa p = null; if( !rs.next() ) return p; rg,rs.getString( nome ), rs.getShort( idade ), p = new Pessoa( rg rs getString("nome") rs getShort("idade") rs.getString("estado") ); st.close(); conexao.desconecta();

IMPLEMENTANDO O MTODO CARREGAREGISTROO mtodo anterior carrega apenas um registro. Porm, necessrio em formulrios que retornemos vrios registros de uma s vez vez. Para isso, ao invs de retornarmos uma Pessoa, podemos retornar uma lista de pessoas. A classe pessoas ResultSet tem um mtodo rs.next() que ser um interador e retornar falso quando acabarem os registros. do { Pessoa p = new Pessoa( ... ); mPessoa.add(p); // mPessoa um LinkedList (p); } while( rs.next() );

EXERCCIOVamos aplicar os passos visto anteriormente e implementar a classe ControladorDePersistencia para tratar apenas inseres e carregamento no Banco de Dados. Antes de comear, vamos adaptar o nosso p exerccio j com GUI. Abra o projeto do ltimo exerccio. Primeiro vamos modificar a classe Pessoa. Crie um construtor simplificado para a classe com os nome, estado. seguintes parmetros: nome idade e estado Agora pense em como ser seu banco de dados. Faa duas t b l F d tabelas: uma estado contendo apenas t d t d o nome do UF como chave primria;

EXERCCIOE a outra pessoa, contendo o nome (key) idade e pessoa (key), estado (chave estrangeira) Adicione na tabela estado no BD os UF que esto no seu comboBox (GUI do exerccio anterior). Adicione a classe Conexao.java ao p j , declare j projeto, uma variavel deste tipo e instancie ela no construtor do frame principal. Agora vamos implementar a classe de persistncia. Faa os dois mtodos (salvar e carregar) como anteriormente, vistos anteriormente passando os parmetros de acordo com a estrutura do banco de dados. Para o mtodo carregar vamos passar o nome da carregar, pessoa como parmetro

EXERCCIOAgora passe para o construtor do InternalFrame o objeto de conexo a ser usado, para que ele possa ter uma visualizao do objeto. Aps feito isso, no boto cadastrar do formulrio MDI, vamos inserir uma pessoa no BD e verificar p se ela realmente foi inserida utilizando um SGBD. Por ltimo, vamos fazer uma busca simples. Utilize o mtodo JOptionPane.showInputDialog(...) para receber o nome da pessoa e ao carregar, imprima System.out.println(...); os dados na tela pelo System out println( );

UTILIZANDO O DEBUG DO NETBEANSUsando o D b d NetBeans para d U d Debug do N tB depurar cdigo e di encontrar erros lgicos.

CONCEITOS ENVOLVIDOSBreakPoint: Primeiro passo para debugar. Adiciona linhas de parada no cdigo, para que voc possar ver o estado do programa Local Variables: Com essa janela pode-se ver o valor das variaveis no instante da parada acionada pelo breakpoint Watchs: Voc pode selecionar quais variveis deseja olhar, ao invs de todas. Para isso, selecione a varivel que desejar e com o Popup, escolha New Watch (Observador)... CallStack: Pilha de chamada de mtodos.

EXERCCIO 6Abra o projeto Debug. Voc pode ver que no h nenhum erro de compilao. Rodando, voc ver uma mensagem de erro indicando que h uma tentativa de acesso um ponteiro nulo. Com a ajuda do debug do NetBeans descubra o NetBeans, que est errado e corrija.

DESENHANDO PRIMITIVASGEOMTRICAS SOBRESCREVENDO O MTODO PAINTCOMPONENT()Auxiliando A ili d no desenvolvimento de aplicaes que d l i t d li precisam desenhar primitivas geomtricas, como elipses, retngulos, retas e polgonos.

OBJETIVOSCompreender a classe Graphics. Entender o Sistemas de Coordenadas do Java Desenhar primitivas geomtricas sobrescrevendo o mtodo p paintComponet(...). p ( ) Utilizar recursos do mouse para desenhar figuras Compreender a API Java2D Utilizar recursos avanados para desenhar p figuras

API JAVAJava fornece uma API para desenhar formas g geomtricas no espao euclidiano 2-D. p Classes Importantes na manipulao de objetos grficos: Classe Color Classe Font Classe FontMetrics Classe Graphics2D Classe Polygon Classe BasicStroke Classe GradientPaint Classe TexturePaint Outras classes...

API

CLASSE GRAPHICSUm objeto Graphics desenha pixels na tela q pode representar um texto ou um objeto que p p j grfico (linhas, elipses, retangulos, etc). Alm do mais, fornece mtodos para manipular Cor, Font e outros atributos. Toda aplicao Java de desenho sobre a tela, usa um objeto G Graphics para gerenciar l bj hi i aplicaes grficas.

CLASSE GRAPHICSA Classe Graphics uma classe abstrata, ou seja, objetos Graphics no podem ser instanciados. Contribui para Portabilidade. Desenhos na tela so diferentes para as plataformas que suportam Java. Quando Java implementado para cada p , p plataforma, uma subclasse de Graphics criada que implementa a capacidade de desenhar.

DESENHANDOTodo componente Java, por exemplo, JPanel, JButton, JFrame, possui seu prprio objeto Graphics que responsvel por desenhar somente neste componente. Para obter este objeto Graphics do componente, componente basta invocar o mtodo getGraphics() Obtido o objeto Graphics, basta invocar os mtodos deste objeto para desenhar sobre o componente

SISTEMAS DE COORDENADAS JAVAPara comear desenhar em Java, devemos entender o sistema de coordenadas Java que um esquema de identificar cada ponto possvel na tela

EXERCCIO 1Crie um novo projeto com o nome Desenho Adicione ao projeto a classe JFrame Adicione o componente JButton e o JPanel ao JFrame,Lembre-se de alterar o nome das variveis JButton e JPanel seguindo as regras de Engenharia de Software!!!

No mtodo ActionPerformed() do JButton, faa o seguinte:public void jB tt 1A ti P f bli id jButton1ActionPerformed(java.awt.event.ActionEvent evt) d(j t t A ti E t t) { Graphics g = jPanel1.getGraphics(); g.drawLine(0,0,jPanel1.getWidth(), jPanel1.getHeight()); }

DESENHANDO CORRETAMENTETodo componente Java possui o mtodo paintComponent. Este mtodo utlizado para fazer os desenhos grficos grficos. O mtodo paintComponent possui como argumento o objeto Graphics Este objeto passado ao Graphics. paintComponent pelo sistema quando este componente precisa ser repintado. Cabealho do Mtodo:public void paintComponent( Graphics g )

O objeto Graphics g recebe uma referncia a um objeto d classe d i d d G bj t da l derivada de Graphics d sistema. hi do i t

DESENHANDO CORRETAMENTEO mtodo paintComponent nada faz por default: O programador deve sobrescrever este mtodo! p g Raramente o mtodo paintComponent chamado diretamente pelo p g p programador. Este mtodo automaticamente chamado quando executa-se o programa. Para chamar novamente o mtodo, um evento deve ocorrer, por exemplo, maximizar e t d l i i minimizar a tela, redimensionar a tela, e outros... Quando h necessidade de chamar explicitamente o mtodo paintComponent, faz-se uma chamada ao p p , mtodo repaint.

EXERCCIO 2Utilizando o mesmo projeto do exerccio anterior: Crie quatro atributos do tipo inteiro (int ) para a l 1 1 2 2 classe F Form, x1, y1, x2, y2. Sobrescreva o mtodo paintComponent:new = JPanel(){ void paintComponent( Graphics g ){ super.paintComponent(g); g.drawLine(x1,y1,x2, y2); } };

Crie JLabels e JTextFields para atribuir os valores aos atributos, x1, y1, x2, y2 atributos x1 y1 x2 y2.

CONTINUAO DO EXERCCIO 2No JButton do exerccio anterior, altere o evento ActionPerformed, faa as variveis x1, y1, x2, y2 , ,y , ,y receber os valores dos TextFilds respectivos. Ainda Ai d no mesmo evento, i t invoque o mtodo t d repaint do componente Jpaint. Execute seu Programa!!! Dvidas???

APROFUNDANDO O CONHECIMENTOClasse Color: fornece mtodos e constantes para manipular cores em um programa em Java. A cor criada a partir do componente RGB RGB. Existem constantes pr-definidas que retornam uma cor Ex: Color c = Color.red;public void setColor( Color c )

Depois de invocar este mtodo, todos os objetos a atribuda. serem desenhados tero a cor atribuda Ex: g.setColor( new Color(0,0,255) ) ou Ex: E g.setColor( C l bl ) tC l ( Color.blue );

COMPONENTE GUI JCOLORCHOOSERA componente GUI JColorChooser permite ao usurio escolher a cor desejada por meio de uma Dialog: Abaixo segue um exemplo de como utilizar o recurso JColorChooser:public void jButtonCorActionPerformed(java.awt.event.ActionEvent evt) { Color cor = jPanelDesenho.getBackground(); cor = JColorChooser.showDialog( this, Escolha uma cor", color ); jPanelDesenho.setBackground(cor); }

DESENHANDO LINHAS, RETNGULOS E ELIPESMtodos Graphics para d Mt d G hi desenho: hpublic void drawLine( int x1, int y1, int x2, int y2 )

public void drawRect( int x, int y, int width, int height)

p public void fillRect( int x, int y, int width, int height ) ( y g

x, y, width, public void drawOval( int x int y int width int height )

public void fillO l( i t x, i t y, i t width, i t h i ht ) bli id fillOval( int int int idth int height

LARGURA E ALTURApublic void drawRoundRect( int x, int y, int width, int height, int arcWidth, int arcHeight )

DESENHANDO STRINGSO mtodo de Graphics responsvel por desenhar uma String na tela :public void d bli id drawString( St i str, i t x, i t y ) St i ( String t int int

O usurio, s vezes ,necessita de alterar a fonte, tipo e tamanho da String. Para isto, utilizamos a classe Font para fazer estas alteraes. Exemplo de como alterar a fonte, tipo e o tamanho:Font( Serif Font.BOLD,12); Font f = new Font(Serif , Font BOLD 12); g.setFont(f);

EXERCCIO 3Faa uma rotina que permita ao usurio escolher a cor de fundo do Jpanel. Faa o desenho de reta, retngulo, elipse, retngulo preenchido, elipse preenchida retngulo preenchido preenchida, com canto arredondado. A cor deve ser diferente para cada figura. Faa o desenho de trs strings, para cada string utilize font tipo e tamanho: font,serif,BOLD,12 Monospaced,ITALIC,24 Monospaced ITALIC 24 SansSerif,PAIN,14

TRATAMENTO DE EVENTO DO MOUSEOs eventos do mouse captura evento de qualquer componente GUI. No nosso contexto, queremos desenhar figuras geomtricas dinamicamente utilizando os recursos do mouse. Cada um dos mtodos de tratamento de evento do mouse recebe um objeto MouseEvent como argumento. O MouseEvent contm as informaes sobre o evento que ocorreu, incluindo as coordenadas (x, y) d posio em que o evento ocorreu. ) da i

MTODOS DE EVENTO DO MOUSEmousePressed( MouseEvent event )Chamado quando se pressiona um boto do mouse com o cursor sobre um componente. componente

mouseClicked( MouseEvent event )Chamado quando se pressiona e se liberasse um boto do mouse sobre um componente, sem mover o cursor.

mouseReleased ( MouseEvent event )Chamado quando se libera um boto do mouse depois de ser pressionado. Esse evento sempre precedido por um evento mousePressed.

mouseEntered( MouseEvent event )Chamado quando o cursor do mouse entra nos limites de um componente.

MTODOS DE EVENTO DO MOUSEmouseExited( MouseEvent event )Chamado quando o cursor do mouse deixa os limites de um componente. componente

mouseDragged( MouseEvent event )Chamado quando se pressiona o boto do mouse com o cursor sobre um componente e se move o mouse. Esse evento sempre precedido por uma chamada para mousePressed mousePressed.

mouseMoved( MouseEvent event )Chamado quando se move o mouse com o cursor sobre um componente.

DESENHANDO FIGURA DINAMICAMENTEPara fazer o desenhos de figuras, fazemos uso de trs eventos do mouse: mousePressed, mouseDragged e mouseReleased mouseReleased. Supondo o desenho de uma reta: pmousePressed: x1= evt.getX(); y1= evt.getY(); mouseDragged: x2 = evt.getX(); y2 = evt.getY(); repaint(); mouseReleased: x2 = evt.getX(); y2 = evt.getY(); (finaliza o desenho da reta...)

EXERCCIO 4Faa uma rotina que implementa o desenho de figuras por meio do mouse. Utilize as variveis inteiras x1,y1,x2,y2 para o desenho de retas, retngulos e elipses. Use o recurso do radioButton para escolher qual figura desenhar.Lembre-se que x2, y2 da elipse e retngulo so diferentes da reta. reta Observe o problema de se desenhar elipses e retangulos!!!

UTILIZANDO A API DO JAVAComo vimos anteriormente, Java fornece uma API para manipulao de desenhos geomtricos. Um bom programador Java deve ao mximo utilizar os recursos que a API do Java oferece. POO incentiva o reuso, ou seja, devemos it l t t aproveitar as classes que j esto prontas (consolidadas). As classes Arc2D, Ellipse2D, Line2D, Rectangle2D e RoundRectangle2D definem uma variedade de formas em Java2D.

COMPREENDENDO AS CLASSESTodas as classes de formas geomtricas da API JAVA so abstratas, assim como alguns de seus mtodos isto , a classe no pode ser instanciadas mtodos, e seus mtodos devem ser implementados. Contudo, para cada uma destas classes, existem ,p , subclasses que herdam delas e implementam os seus mtodos. Por P exemplo: l Observem no NetBeans a classe Line2D. Float Double herdam d Li 2D de Line2D A subclasse Fl t e D bl h d b l e implementam os mtodos abstratos. Estas subclasses definem a preciso das coordenadas da reta.

COMPREENDENDO AS CLASSESAs outras classes de forma geomtrica tambm definem subclasses Float e Double. Logo, para instanciar um objeto por exemplo da classe objeto, exemplo, Ellipse2D, fazemos da seguinte forma:Ellipse2D elipse; elipse = new Ellipse2D.Float(0,0,10,10);

Utilizar estas classes permite ao programador evitar de reescrever cdigo. J que, os mtodos destas classes esto bem implementados

OUTRAS VANTAGENSExistem mtodos destas classes que podem ser proveitoso para alguns casos, em nosso contexto, faremos uso do seguinte mtodo:public boolean contains( Point2D p ) public boolean contains( double x double y) x,

Este mtodo devolve true se o ponto pertence ao interior da figura.

EXERCCIO 5Crie outro projeto no NetBeans

Faa uma rotina que verifica se o mouse est sobre a figura. g Utilize somente a figura da elipse para verificar se o ponteiro do mouse est sobre ela.

UTILIZANDO ARRAYLISTAt o momento, todas as figuras desenhadas so apagadas da tela quando desenha-se outra figura. Uma soluo armazenar as figuras j desenhadas em uma estrutura de dados dados. Especificamente queremos armazenar os objetos Especificamente, elipses, retngulos, retas, etc. A estrutura de dados pertinente ao caso a ArrayList. y

COMO ARMAZENAMOS AS FIGURAS?A lista de figuras um atributo da classe. Toda vez que o evento do mouseReleased acontece, armazenamos a figura que terminamos de desenhar na lista de figuras figuras. A lista de figura contm objetos da classe Line2D, Ellipse2D ou Rectangle2D. Estas classes tem em comum a implementao da interface Shape, logo a minha lista de figuras vai armazenas objetos que implementa a interface Shape.

DETALHES DE IMPLEMENTAODeclara-se figuras como atributo da classeArrayList figuras; y p g ; ... No construtor instancia-se o objeto: figuras = new ArrayList();

No mtodo MouseReleased, supondo o desenho de uma reta :Line2D linha = Line2D.Float(x1,y1,x2,y2) Figuras.add(linha);

DESENHANDO A LISTA DE FIGURASNo mtodo responsvel para desenhar as figuras, devemos em primeiro lugar imprimir a lista de figuras. A grande Questo: Como identificamos que um objeto da lista uma reta retngulo ou elipse j reta, que a lista de figuras armazena todo tipo de figura? Resposta: Fazemos uso da palavra reservada do Java: instanceof Devemos perguntar se o objeto i da lista uma instancia da reta retngulo ou elipse! reta,

DETALHES DE COMO DESENHAR A LISTAfor( int i = 0 ; i < figuras size() ; i++ ){ figuras.size() if( figuras.get(i) instanceof Ellipse2D ){ Ellipse2D elipse = (Ellipse2D) figuras get(i); figuras.get(i); g.fillOval((int)elipse.getX(),(int)elipse.getY(),(int)elipse.getWidth(), (int)elipse.getHeight()); } else if( figuras.get(i) instanceof Line2D ){ Line2D linha = (Line2D) figuras.get(i); g.drawLine((int)linha.getX1(),(int)linha.getY1(),(int)linha.getX2(), (int)linha.getY2()); (int)linha getY2()); } }

EXERCCIO 6Utilizando o projeto do exerccio 4, implementes as figuras como objetos de Line2D, Ellipse2D e Rectangle2D Rectangle2D. Adicione o objeto lista de figuras no mtodo mouseReleased. No mtodo responsvel por fazer o desenho, percorra a lista de figuras e desenhe elas.

GRAPHICS2DGraphics2D herda da classe Graphics e implementa outros mtodos para um desenho mais apurado apurado. Dois mtodos que destacamos da Graphics2D so:public void setStroke( Stroke s )

Este mtodo controla o tipo de borda seu borda, argumento uma classe que implementa a , q p interface Stroke, a classe que implementa Stroke a BasicStroke.g.setStroke( new BasicStroke(2) );

A borda da figura ter borda de largura 2

CONTINUAO...g.setStroke( new B i St k (4 tSt k ( BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) );

A borda da figura ter borda de largura 4, os extremos da reta sero arredondados, e quando os extremos de duas retas se unem, o vrtice ser arredondado. Este t d d fi E t mtodo define o tipo d renderizao d fi ti de d i da figura : public void setRenderingHint(Key hintKey, Object hintValue); As figuras que desenhamos contm serrilhados(aliasing), serrilhados(aliasing) este serrilhado acontece devido o monitor que contm nmero limitado de pixels.

ANTIALIASINGPara diminuir o serrilhado, devemos usar AntiAliasing para renderizar a figura: gp gg.setRenderingHint(RenderingHints.KEY_ANTIALIASIN G,RenderingHints.VALUE_ANTIALIAS_ON); G,RenderingHints.VALUE ANTIALIAS ON);

O primeiro argumento indica a chave da renderizao que ser aplicada o segundo aplicada, indica o tipo de renderizao.

EXERCCIO 7No mtodo paintComponent, depois de chamar a super classe, escreva o seguinte cdigo: p , g gGraphics2D g2d = (Graphics2D) g; myPaint(g2d); P i t( 2d)

No escopo do mtodo, altere de Graphics para p p p Graphics2D Aplique o tipo de borda e renderizao.