113
DESENVOLVIMENTO DE APLICAÇÕES DESENVOLVIMENTO DE APLICAÇÕES JAVA UTILIZANDO A IDE NETBEANS Alexander Haroldo da Rocha Renato de Jesus Manzoni

Minicurso Java NetBeans

Embed Size (px)

Citation preview

Page 1: Minicurso Java NetBeans

DESENVOLVIMENTO DE APLICAÇÕESDESENVOLVIMENTO DE APLICAÇÕESJAVA UTILIZANDO A IDE NETBEANS

Alexander Haroldo da RochaRenato de Jesus Manzoni

Page 2: Minicurso Java NetBeans

TÓPICOS ABORDADOSTÓPICOS ABORDADOSRevisão dos pilares da programação orientada à objeto;Noções primárias de Engenharia de Software;Noções primárias de Engenharia de Software;Classpath e .Jar (Java ARquive);Pacote javax.swing.*;Pacote javax.swing. ;Conexão com banco de dados via JDBC;Tratamento de Exceções com try-catch-finally;Utilizando o debug do NetBeans;Desenhando primitivas geométricas sobrescrevendo o método paintComponent();paintComponent();

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

Page 3: Minicurso Java NetBeans

CONHECENDO A IDE NETBEANSD b i d bi t d dDescobrindo o ambiente e aprendendo as suas facilidades

Page 4: Minicurso Java NetBeans

CONHECENDO A IDE NETBEANS

O NetBeans é uma IDE Java desenvolvida pela empresa Sun Microsystems.É bi t d d l i t i t dÉ um ambiente de desenvolvimento integrado gratuito e de código aberto para desenvolvedores de software A IDE é executada em muitasde software. A IDE é executada em muitas plataformas, como Windows, Linux, Solaris e MacOS.

Dica de ProgramaçãoC h t d f ilid d IDE- Conheça e use todas as facilidades que a IDE

tem a oferecer: Hiperlinks, AutoComplet, Solução automática de erros etcautomática de erros, etc.

Page 5: Minicurso Java NetBeans

REVISÃO DE ORIENTAÇÃO À OBJETOR i d i i i it d i t ãRevisando os principais conceitos de orientação a objeto, aplicando essas definições na linguagem Java

Page 6: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOS

Motivação:Abstrair os conceitos do mundo realIdentificar estes conceitos como objetos

Pilares da Programação Orientada a Objeto:Objeto:

Abstração.Encapsulamento;Encapsulamento;Herança;Polimorfismo;Polimorfismo;

Page 7: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOS

Definindo uma Classe:Abstração:

public class Pessoa {String nome;

Atributos da ClasseString nome;int idade;boolean sexo;boolean sexo;

public Pessoa() { Construtor: toda vez que se i bj t t t é

}}

cria um objeto, o construtor é chamado.

Page 8: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOS

Encapsulamento:Proteger os atributos da classe.

Os Métodos encapsulam os atributos da classeOs Métodos encapsulam os atributos da classe.Omitir detalhes de implementação.

O método oferece um serviço, 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

Page 9: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOSbli l P {public class Pessoa {

...String getNome() { return nome; }String getNome() { return nome; }boolean getSexo() { return sexo; } int getIdade() { return idade; }g () { ; }

float getSalario(...) {...

return salario;}

Oculta detalhes de implementação}

}

p ç

Page 10: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOS

Herança:Classes (sub-classe) que herdam atributos e métodos de outra classe (super classe):de outra classe (super-classe):

public class Professor extends Pessoa {p {String cursoSuperior;int anoFormação;

}

public class Funcionario extends Pessoa {int experienciaProfissional;String departamento;String departamento;

}

Page 11: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOSMét dPolimorfismo:

Sobrecarga de Métodos:

Métodos possuem o mesmo nome, porém número diferentes de parâmetros.

public class Pessoa {float getSalario(float impostoA) {float getSalario(float impostoA) {

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

return (salario - impostaA - impostoB);}

Page 12: Minicurso Java NetBeans

POO – REVISÃO DOS CONCEITOS

Sobrescrita de Métodos:

public class Professor extends Pessoa {float getSalario(float impostoA) {

t ( l i i t A + b )return (salario - impostoA + bonus);}

}}

Métodos possuem o mesmo nome e os mesmos parâmetros, porém o corpo do método é diferente.

Page 13: Minicurso Java NetBeans

O QUE VOCÊ PRECISA SABER EM JAVA

Toda classe em Java herda automaticamente da classe Object.I t i bj tInstanciar objetos:

Pessoa p = new Pessoa();

S b difi d dSaber usar os modificadores de acesso:private: somente a classe que contém seus atributos e métodos tem acesso a essesmétodos tem acesso a esses.public: Classes que contém atributos e métodos publicpermitem que outras classes tenham acesso a esses.

Declarar classes abstratas. Isto permite que classes não sejam instanciadas.

public abstract class Faculdade { ... }

Page 14: Minicurso Java NetBeans

O QUE VOCÊ PRECISA SABER EM JAVA

Toda classe tem o método toString(). Esse método retorna uma representação String do objeto.

É importante sobrescrever este métodoÉ importante sobrescrever este método.public class Pessoa {

String toString()String toString(){

return nome;}

}

EEx:Pessoa p = new Pessoa();System out println(p);System.out.println(p);

Page 15: Minicurso Java NetBeans

NOÇÕES DE ENGENHARIA DENOÇÕES DE ENGENHARIA DESOFTWAREN õ bá i d t ã d ftNoções básicas de construção de um software

Page 16: Minicurso Java NetBeans

NOÇÕES DE ENGENHARIA DE SOFTWARE

Separar o sistema em três camadas básicas: interface, estrutura e persistência;O i i d d õ dOrganizar-se, seguindo padrões de desenvolvimento de software;Dividir o desenvolvimento do software em fasesDividir o desenvolvimento do software em fases, cada fase tratando uma parte da aplicação. O fim de uma fase constitui na entrada da outra fase;de uma fase constitui na entrada da outra fase;Conhecer noções básicas de atribuição de responsabilidades;pCondicionar ao reuso;Não misturar Interface com Estrutura e vice-versa;;

Page 17: Minicurso Java NetBeans

NOÇÕES DE ENGENHARIA DE SOFTWARE

Boa Prática de Programação- Utilize padrões de escrita de código.

o Nome de variáveis e nome de métodos: primeira minúscula e as primeiras da próxima palavra em maiúscula: nomePessoa, inserirFimFila(...)

o Nome de métodos, como verbos no infinitivo: carregarPessoa() imprimirSaldo()carregarPessoa(), imprimirSaldo()

o Nome de pacotes, classes e imagens começando com letras maiúsculas;

o Comentários do tipo /* ... */ para principais e do tipo //(linha) para comentários internos;Nunca usar ou qualquer outro caractere em nome deo Nunca usar _ ou qualquer outro caractere em nome de atributos;

Page 18: Minicurso Java NetBeans

CLASSPATH E .JAR

O CLASSPATH é i t t iá l dO CLASSPATH é uma importante variável de ambiente do Java. Essa variável é importante tanto para compilar quanto para executar o seu programa, p p q p p g ,já que especifica onde estão armazenados os arquivos e bibliotecas necessários, tanto para a compilação quanto para a execuçãocompilação, quanto para a execução.

JAR significa Java ARchive, e é simplesmente umJAR significa Java ARchive, e é simplesmente um arquivo ZIP normal, com uma extensão diferente apenas. Estes arquivos são usados para facilitar a distribuição de pacotes e manter a simplicidade nadistribuição de pacotes e manter a simplicidade na hora de configurar os ambientes de desenvolvimento, uma vez que é possível colocar todos seus pacotes dentro de um único arquivo JAR

Page 19: Minicurso Java NetBeans

CLASSES E MÉTODOS IMPORTANTES

Métodos estáticos das classes Integer, Short, Float, etc:

Integer valueOf(String str | int i);Integer.valueOf(String str | int i);Integer.parseInt(String str);

Métodos básicos em algumas classes do swingMétodos básicos em algumas classes do swingsetVisible(true | false);setText(“string”);setText( string );setEnable(true | false);

Classes LinkedList<Class> e ArrayList<Class>;y ;Conceitos de herança e abstrações de classe para sua utilização em listas encadeadas;

Page 20: Minicurso Java NetBeans

PACOTE JAVAX.SWING.*;P t i d i t f áfi d jPacote swing de interface gráfica do java

Page 21: Minicurso Java NetBeans

JAVAX.SWING.*Pacote java para desenvolvimento de aplicações com interface gráfica. Substituiu a awt como padrão java, desde o Java 1.2 (Java 2)Cada componente terá vários eventos associados a ele. Alguns eventos são: actionPerformed(...), KeyPressed( ) MousePressed( )KeyPressed(...), MousePressed(...) MouseDragged(...), ItemStateChange(...), etc.Basicamente temos Contêineres e ComponentesBasicamente temos Contêineres e Componentes. Os Conteiners encapsulam Components.

Boa Prática de ProgramaçãoBoa Prática de Programação- Procure não utilizar os nomes de atributos

sugeridos como default pelo NetBeans comosugeridos como default pelo NetBeans, como jButton1. Mude para botaoCadastrar, por exemplo

Page 22: Minicurso Java NetBeans

JAVAX.SWING.JFRAME

Frame utilizado para formulários ou telas principaisFrame utilizado para formulários ou telas principais do sistema. O método setVisible(true) torna-o visível e o método dispose() fecha o frame. Se forvisível e o método dispose() fecha o frame. Se for o frame principal, feche com System.exit(0)

this setExtendedState(this MAXIMIZED BOTH);

Constantes usadas no método acima:

this.setExtendedState(this.MAXIMIZED_BOTH);

- NORMAL: Tela no estado normal- ICONIFIED: Tela no estado minimizado- MAXIMIZED_HORIZ: Expansão horizontal- MAXIMIZED_VERT: Expansão vertical- MAXIMIZED_BOTH: Tela maximizada

Page 23: Minicurso Java NetBeans

JLABELComponente texto para formuláriosComponente texto para formulários

JBUTTONJBUTTONComponente botão. Assim como qualquer outro componente swing ele é bem genérico Não écomponente swing, ele é bem genérico. Não é utilizado apenas como botão simples, mas também como botões de barra de ferramentas, panels, etc.p

JCHECKBOXCaixa de seleção simples. O método isSelected() retorna se está ou não setado.

Page 24: Minicurso Java NetBeans

JRADIOBUTTON E BUTTONGROUPCaixas de seleção para grupo de seleçõesCaixas de seleção para grupo de seleções.Cada radioButton é um campo de seleção. Crie um buttonGroup para formar um grupo de seleção ebuttonGroup para formar um grupo de seleção e então associe cada radioButton ao grupo que desejar, através do atributo buttonGroup.

Page 25: Minicurso Java NetBeans

JTEXTFIELD

Campo de escrita simplesCampo de escrita simples.Como não há limitação de número de caracteres, deveremos utilizar um outro artifício para taldeveremos utilizar um outro artifício para tal.Através de uma classe chamada FixedLengthDocument, feita especialmente paraFixedLengthDocument, feita especialmente para esse caso, podemos setar o tamanho máximo do campo.

jTextFieldNome.setDocument( new FixedLengthDocument(30) );

JPASSWORDFIELDO mesmo para um JTextField, porém, existirá um p , p ,caractere indicativo de senha. ( )

Page 26: Minicurso Java NetBeans

JFORMATTEDTEXTFIELD

Campo de escrita formatadaCampo de escrita formatadaExemplos de aplicação: RG, CPF, Datas, etc

// C i d á d f t ã// Criando uma máscara de formataçãoMaskFormatter formatterData = new MaskFormatter(“##/##/####”);// Instalando a máscara no jFormattedTextFieldformatterData.install(jFTextFieldNasc);// Setando um texto – 10/12/1990jFTextFieldNasc.setText(“10121990”); // Aceita com ou sem ‘/’

# - Dígito * - Qualquer teclaH – Hexadecimal \ - Literal

j ( )

H Hexadecimal \ LiteralU – Caractere em maiúsculoL – Caractere em minúsculoA C lf é iA – Caractere alfa-numérico? – Caractere qualquer

Page 27: Minicurso Java NetBeans

JTEXTPANEÁrea extensa para textos sem formataçãoÁrea extensa para textos sem formatação

JTOGGLEBUTTONJTOGGLEBUTTONComponente botão do tipo pressionado e não pressionado Segue as mesmas características epressionado. Segue as mesmas características e generalidade do JButton

JPANELBase que sustenta um pequeno conjunto deBase que sustenta um pequeno conjunto de componentes. Tem generalidades específicas que veremos mais adiante.

Page 28: Minicurso Java NetBeans

EXERCÍCIO 1ACrie uma classe Pessoa com os seguintes campos:Crie uma classe Pessoa com os seguintes campos: nome (String limitada de tamanho 20), idade (short), dataInscricao (String formatada), moraSozinho(boolean) Por enquanto não se preocupe com sets e(boolean). Por enquanto, não se preocupe com sets e gets.Lembre-se das técnicas de Engenharia de Software:Lembre se das técnicas de Engenharia de Software: Interface e Estrutura devem estar em pacotes separados. Crie dois pacotes com esses nomes;Faça um formulário sobre um jPanel com borda (TitledBorder), como mostra o arquivo ex1a.jar.Ao clicar no botão Cadastrar instancie um objeto daAo clicar no botão Cadastrar, instancie um objeto da classe pessoa e em Cancelar, feche o frame.Os Botões devem estar fora do painel!p

Page 29: Minicurso Java NetBeans

JSCROLLBAR E JSCROLLPANEBarra de rolagem simples e em caixasBarra de rolagem simples e em caixas. Componentes, como tabela, são utilizados dentro de um JScrollPane

JTABBEDPANECaixa com abas. A estrutura de um TabbedPane é simples, sendo que cada aba será adicionada através de um Panel.

Page 30: Minicurso Java NetBeans

EXERCÍCIO 1B

Faça um tabbedPane e coloque duas abas: o panel com o pequeno formulário com o nome de Dados Gerais e outro vazio com o nome de DadosGerais e outro vazio com o nome de Dados Pessoais (nome do atributo – Tab Title)O formulário da nova aba deverá conter camposO formulário da nova aba deverá conter campos para CPF e RG, devidamente formatados, como mostra o arquivo ex1b.jar.Os botões de Cadastrar e Cancelar devem estar fora do painel de abas.

Page 31: Minicurso Java NetBeans

JCOMBOBOX

Componente que armazena uma lista de objetos, sendo que apenas um é visível. Utili ét d t St i () tUtiliza o método toString() para mostrar a informação visível.

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 parâmetros: o índice do objeto no comboBox ou então o próprio objeto a ser selecionadoentão o próprio objeto a ser selecionado.removelAllItens() – Remove todos os ítens

Page 32: Minicurso Java NetBeans

JLISTSemelhante ao ComboBox, só que todos osSemelhante ao ComboBox, só que todos os elementos do List são visíveis e a seleção é feita por linha. É possível também a seleção de várias linhas simultaneamente.

JSPINNER

Componente que muda os valores através de p qbotões do tipo up-down. (Geralmente para inteiros)setValue(Object value) – Seta o valor do Spinner( j )getValue( ) – Retorna o Objeto indicado no SpinnerUtilize o evento StateChange para tratar mudanças g p çno Spinner. (Impedir valores negativos, por ex.)

Page 33: Minicurso Java NetBeans

EXERCÍCIO 2

Utilize o arquivo ex2.jar como base.Troque o campo idade por um JSpinner. Limita o S i d d ã j í l úSpinner de modo que não seja possível números negativos (evento Change – StateChange).Na aba Dados pessoais do JTabbedPane crie osNa aba Dados pessoais do JTabbedPane, crie os campos para endereço (endereço e cidade) e estado como sendo um jComboBox. (coloque uns 5estado 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 parâmetro estado (UF). No botão C d t i t i l PCadastrar, instancie a classe Pessoa com o atributo adicional do estado (UF).

Page 34: Minicurso Java NetBeans

JTABLEComponente tabelaComponente tabela.Dados relativos à tabela são armazenados no objeto model (Modelo da tabela)objeto model (Modelo da tabela)Sempre que for trabalhar com os elementos da tabela, utilize o método getModel( ) para retornar o , g ( ) pmodelo da tabela.

// Retornando o modelo da tabela para trabalhar com ela// Retornando o modelo da tabela para trabalhar com elajavax.swing.table.DefaultTableModel modelo = (javax.swing.table.DefaultTableModel) jTable.getModel();(javax.swing.table.DefaultTableModel) jTable.getModel();

Agora com o modelo da tabela, é possível inserir registros nela.

Page 35: Minicurso Java NetBeans

JTABLE// Apaga tudo na tela// Apaga tudo na telamodelo.setRowCount(0);// Adiciona uma linha à tabelamodelo.addRow(new Object[ ] { Object1, Object2, ... } );// Remove uma linha da tabela

d l R (i di )modelo.removeRow(indice)

/* Não precisam do modelo da tabela *// Não precisam do modelo da tabela /// Retorna o objeto na linha row e coluna columnmodelo.getValueAt(row,column);// Retorna o número de linhas selecionadasmodelo.getSelectedRowCount( );// Retorna o índice da linha selecionada caso seja ma// Retorna o índice da linha selecionada, caso seja umamodelo. getSelectedRow( );

Page 36: Minicurso Java NetBeans

EXERCÍCIO 3Agora ao lado do painel com abas que está prontoAgora ao lado do painel com abas que está pronto, coloque uma tabela com dois campos: nome e estado. Ao clicar em cadastrar, é instanciado um objeto pessoaAo clicar em cadastrar, é instanciado um objeto pessoa e adicionado na tabela. Depois, apague todos os campos do formulário (crie um método para isso!). Apóie-se no arquivo ex3.jar.Implemente o método toString( ) da classe Pessoa,

d l t á d t dsendo que ele retornará o nome da pessoa, e todos os gets( ) da classe (Encapsular campos do NetBeans.Coloque um botão Exibir Dados abaixo da tabela AoColoque um botão Exibir Dados abaixo da tabela. Ao clicar nele, a linha da tabela é buscada e os dados da pessoa são mostrados. (Pode ser mostrado com opessoa são mostrados. (Pode ser mostrado com o método System.out.println(...). (java –jar ex3.jar)

Page 37: Minicurso Java NetBeans

JMENUBAR

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

Page 38: Minicurso Java NetBeans

JTOOLBAR

Barra de ferramentas. Para adicionar botões ou separadores, escolha o componente que deseja e arraste para a toolbararraste para a toolbar.Para botões, você pode retirar o texto e colocar uma figura Para isso clique no botão e altere ouma figura. Para isso, clique no botão, e altere o atributo icon com a imagem desejada. Utiliza o Classpath para não ter problemas com referência.Assim como no MenuBar é possível adicionar separadores na toolbar.Selecione o atributo floatable se desejar uma toolbar que pode ser deslocada de um lugar para o

toutro.

Page 39: Minicurso Java NetBeans

JPOPUPMENU

Menu Popup para componentesUtilize os mesmos princípios do JMenuBar para

i it d JP Mcriar itens de menu ao JPopupMenu.Para adicionar o menu Popup em algum componente no atributo componentPopupMenucomponente, no atributo componentPopupMenuindique o menu Popup que você deseja utilizar.

Page 40: Minicurso Java NetBeans

EXERCÍCIO 4

Igualmente ao arquivo ex4.jar, faça um menuBar e uma toolBar para a aplicação. Não esqueça de fazer referência às figuras através do ClassPathfazer referência às figuras através do ClassPath. Para isso, crie outro pacote com o nome de Imagens.gFaça 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.

Page 41: Minicurso Java NetBeans

JDIALOG

Tela de diálogo rápido do usuário com o sistema. Não é um tipo de frame que se usa para fazer formuláriosformulários.A característica mais marcante desta classe é o atributo modal que indica que a tela estará sempreatributo modal que indica que a tela estará sempre a frente de todas as outras e que você não poderá fazer mais nada enquanto não fechá-la. Exemplos de dialogs são: dialogs para salvar/abrir arquivos, avisos de erro ou informativos, dialogs de i ã timpressão, etc.

Page 42: Minicurso Java NetBeans

JDIALOG

JDialogConexao dialogConexao;

dialogConexao = new JDialogConexao(this,true);java.awt.Dimension d =

j t T lkit tD f ltT lkit() tS Si ()java.awt.Toolkit.getDefaultToolkit().getScreenSize();// Posiciona a dialog no centrodialogConexao.setLocation(d.width/2 -

dialogConexao.getWidth()/2, d.height/2 -dialogConexao getHeight()/2);dialogConexao.getHeight()/2);

dialogConexao setVisible(true);dialogConexao.setVisible(true);

Page 43: Minicurso Java NetBeans

JFILECHOOSER

Classe permite que se escolham arquivos ou diretórios.

JFileChooser jFileChooser = new JFileChooser();

// Seleciona somente arquivos jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

if( jFileChooser.showDialog(jDialogBuscaBD, "Abrir") ==JFileChooser.CANCEL_OPTION )

treturn;

String arquivo = jFileChooser.getSelectedFile().getPath();

Page 44: Minicurso Java NetBeans

JFILECHOOSER

Pode-se também adicionar filtros ao fileChooser. Veja os exemplos abaixo:

// Criando um novo filtrofiltroJPEG = new FileNameExtensionFilter("JPEG Files", "jpg", ( jpg"JPG", "jpeg","JPEG");

// Existirá um filtro do tipo ‘All Files’ ?// Existirá um filtro do tipo All Files ?fileChooser.setAcceptAllFileFilterUsed(false);

// Adiciona o filtro no fileChooser// Adiciona o filtro no fileChooserfileChooser.addChoosableFileFilter(filtroJPEG);

Page 45: Minicurso Java NetBeans

UM POUCO DA CLASSE FILE

A classe File é uma classe genérica para tratamento de arquivos, do tipo verificar se ele existe qual o seu caminho seus atributos etcexiste, qual o seu caminho, seus atributos, etc.Para salvar ou abrir arquivos utiliza-se outras classes: as Data ou File Input/OutputStreams paraclasses: as Data ou File Input/OutputStreams para arquivos binários e FileReader/Writer para arquivos textos.Não entraremos em detalhes dessas classes, pelo tempo que temos, porém, utilize a descrição destas classes pelo NetBeans. Não é muito complicado!

Page 46: Minicurso Java NetBeans

JDESKTOPPANE E JINTERNALFRAME

Muitos aplicativos utilizam uma interface de múltiplos documentos (MDI).B i t j l i i l (j l i)Basicamente, uma janela principal (janela-pai) contém outras janelas (janelas-filha) para gerenciar vários documentos abertos que estão sendovários documentos abertos que estão sendo processados em paralelo.

JIFTeste jInternalFrame = new JIFTeste();JIFTeste jInternalFrame = new JIFTeste();

jDesktopPane.add(jInternalFrame);j p (j );jInternalFrame.setVisible(true);

JIFT t jI t lFJIFTeste jInternalFrame = (JIFTeste)jDesktopPane.getSelectedFrame();

Page 47: Minicurso Java NetBeans

EXERCÍCIO 5

Como o arquivo ex5.jar, coloque o painel de abas em um InternalFrame e faça um desktopPane na janela principal Faça as chamadas de eventos necessáriasprincipal. Faça as chamadas de eventos necessárias, de modo que seja possível abrir o formulário pelo menu e pela toolbar.pNão se esqueça de transferir todo o código relativo ao formulário para o InternalFrame, juntamente com as formatações dos TextFields no constrututor do frame, métodos relacionados e o buttonGroup do sexo.Todo o código relativo à tabela deverá ser retirado, removendo até mesmo a tabela e o menu Popup relativo a ela Maximize o Frame Principal ao iniciarrelativo a ela. Maximize o Frame Principal ao iniciar.

Page 48: Minicurso Java NetBeans

JOPTIONPANEA classe JOptionPane oferece caixas de diálogo predefinidas que permitem aos programas exibir mensagens ao usuário.Abaixo segue alguns métodos desta classe:

// C i d diál d// Caixa de diálogo de uma mensagemshowMessageDialog(null, "Mensagem", "Título", messageType);

// Caixa de diálogo de confirmaçãoshowConfirmDialog(null, "Mensagem", "Título",

optionType messageType);optionType, messageType);

// Caixa de diálogo de uma entradah I tDi l ( ll "M " "Tít l " T )showInputDialog(null, "Mensagem", "Título", messageType);

Page 49: Minicurso Java NetBeans

Constante (optionType) Descrição

YES_NO_OPTION Caixa de diálogo do tipo Sim ou Não

YES_NO_CANCEL_OPTION Caixa de diálogo do tipo Sim, Não ou Cancelar

OK_CANCEL_OPTION Caixa de diálogo do tipo OK ou Cancelar

Constante (messageType)

Ícone Descrição

Exibe um diálogo que indica um erro para oERROR_MESSAGE Exibe um diálogo que indica um erro para o usuário

INFORMATION MESSAGE Exibe um diálogo com uma mensagem com i f õ á iINFORMATION_MESSAGE informações para o usuário

WARNING_MESSAGE Exibe um diálogo que adverte o usuário sobre um problema em potencial

QUESTION_MESSAGE Exibe um diálogo que impõe uma pergunta ao usuário. Geralmente exige uma resposta do tipo Sim ou Não

PLAIN_MESSAGE Sem ícone Exibe um diálogo que simplesmente contém uma mensagem, sem nenhum ícone

Page 50: Minicurso Java NetBeans

JSLIDER

Componente usado para barra de valores. Você pode escolher o valor mínimo e máximo da barra, que ela devolve a você o valor correnteque ela devolve a você o valor corrente.

JPROGRESSBAR

Barra de progresso simples. Contém atributos para valores mínimo e máximo da barra de progresso evalores mínimo e máximo da barra de progresso e também um campo string que pode ser adicionado opcionalmente para informar a porcentagemopcionalmente para informar a porcentagem corrente.

Page 51: Minicurso Java NetBeans

HTML EM COMPONENTES SWING

A interface gráfica Swing aceita códigos HTML para formatação de textos. É simples de usar e muito útil em várias situaçõesem várias situações.Para usar, apenas coloque o código HTML pelo método setText(“ ”); dos componentesmétodo setText( ... ); dos componentes.

String strHtml = "<html><center><b> Olá <br> <fontString strHtml = <html><center><b> Olá <br> <fontcolor=green> Mundo </font></b></center></html>";

JOptionPane.showMessageDialog(null,strHtml,"Teste" JOptionPane PLAIN MESSAGE);Teste ,JOptionPane.PLAIN_MESSAGE);

Page 52: Minicurso Java NetBeans

ADICIONANDO UM RELÓGIO EM UM FRAMECrie um label no frame que desejarCrie um label no frame que desejar.Faça o seu frame implementar a classe ActionListener. Compile. Veja que o NetBeans pedirá os pacotesCompile. Veja que o NetBeans pedirá os pacotes necessários e também implementar os métodos abstratos. Nesse momento, ele criará um método: actionPerformed(ActionEvent e) Crie um método dispararRelogio() e chame esse

ét d t t d f i l t f ãmétodo no construtor do frame e implemente a função actionPerformed(...)Para isso lembre de criar um atributo no frame do tipoPara isso, lembre de criar um atributo no frame, do tipo javax.swing.Timer.Olhe o arquivo relogio jar para vê lo funcionandoOlhe o arquivo relogio.jar para vê-lo funcionando.Adicione seu relógio ao projeto

Page 53: Minicurso Java NetBeans

public void dispararRelogio(){{

timer = new javax.swing.Timer(1000, this); timer.setInitialDelay(0); timer start();timer.start();

}

bli id ti P f d(A ti E t )public void actionPerformed(ActionEvent e) {

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 + ":" + ( (m < 10) ? "0" : "" ) + m + ":" +( (m < 10) ? 0 : ) + m + : + ( (s < 10) ? "0" : "" ) + s ;

jLabelHora setText(hora);jLabelHora.setText(hora); }

Page 54: Minicurso Java NetBeans

TRATAMENTO DE EXCEÇÕES COMTRATAMENTO DE EXCEÇÕES COMTRY-CATCH-FINALYT t d ló i i i d f lhTratando erros lógicos excepcionais, de falhas ao acesso de um BD até erros de divisão por zero.

Page 55: Minicurso Java NetBeans

CONHECENDO A ESTRUTURA DE UM TRY-CATCH-FINALLY

ttry{

// Código que tentará ser executado// Cód go que te ta á se e ecutado}catch( Exception e ){

// Se uma exceção for atingida, este código é // executado// executado

}finally{

// Finalmente, com ou sem exceção, este código é// executado// executado

}

Page 56: Minicurso Java NetBeans

VISÃO GERAL DAS EXCEÇÕES

Page 57: Minicurso Java NetBeans

CLASSE DE EXCEÇÕES

Existem basicamente duas classes de exceções: exceções verificadas e exceções não verificadas.E õ ã ifi d ã iExceções não-verificadas não precisam ser listadas na clausula throws. Em geral são as exceções de execução (RuntimeException) comoexceções de execução (RuntimeException), como ponteiro nulo, erro de ‘casting’, erro de aritmética, de limite de arrays, etc. Podem ser evitadas facilmente através de uma boa programação.Exceções verificadas devem ser listadas na cláusula throws, porque ela depende de vários fatores que não são influenciados pela programação mas sim pelo estado de execução doprogramação, mas sim pelo estado de execução do programa, como em BD, abertura de imagens, etc.

Page 58: Minicurso Java NetBeans

THROW

Um método pode ser declarado como throws.A grosso modo, significa que o método não vai t t ã th El átratar a exceção que segue throws. Ela será ‘jogada’ para o método que chamou este método em questãoem questão.O sentido disso é muito simples: quando ocorre um erro em uma inserção no bando de dados, nãoerro em uma inserção no bando de dados, não será naquela camada que eu avisarei o usuário deste erro. Então a exceção será lançada método a método até chegar à camada de Interface, que tratará a exceção e avisará o usuário com mensagens de erro apropriadasmensagens de erro apropriadas.

Page 59: Minicurso Java NetBeans

EXEMPLO DE THROWS

bli id d A()public void metodoA(){

trytry{

objeto.metodoB();j ();}catch( Exception1 ex ) { /* Código para a exceção */ }

}

bli id d B() h E i 1 E i 2public void metodoB() throws Exception1, Exception2{

// Codigo// Codigo ...}

Page 60: Minicurso Java NetBeans

MÉTODOS DOS OBJETOS DE EXCEÇÃO

Existem alguns métodos que os objetos de exceção oferecem para analisarmos os erros.

// Imprime a pilha de chamada de métodosi tSt k T ()excecao.printStakeTrace()

// Retorna uma string descrevendo o erro ocorridoexcecao.getMessage()

Page 61: Minicurso Java NetBeans

CONEXÃO COM BANCO DE DADOSCONEXÃO COM BANCO DE DADOSVIA JDBC

Page 62: Minicurso Java NetBeans

CONEXÃO COM O BANCO DE DADOS - JDBC

A conexão com o banco de dados vai JDBC utiliza um arquivo .jar que constitui o elo de ligação da aplicação com o SGBD utilizado Ele deve seraplicação com o SGBD utilizado. Ele deve ser incluído nas Opções do Projeto.Na janela Runtime é possível fazer uma conexãoNa janela Runtime, é possível fazer uma conexão local com o banco de dados para fazer algumas consultas ou atualizações.Utilize a classe de apoio Conexao.java, já pronta.Três métodos principais que você deve conhecer p p qdesta classe: conecta(), desconecta() e getConection() .

Page 63: Minicurso Java NetBeans

PASSOS PARA FAZER UMA APLICAÇÃO COMÇBANCO DE DADOS

1. Inicialmente e ironicamente não se preocupe com o banco de dados da aplicação. Faça os formulários e tudo o que necessita para aformulários e tudo o que necessita para a aplicação.

2 Utilizando um SGBD faça um banco de dados2. Utilizando um SGBD, faça um banco de dados para a aplicação.

3. Inclua no projeto a classe Conexao.java e faça3. Inclua no projeto a classe Conexao.java e faça uma outra abstrata, que vai ser sua camada de persistência.

4. Nesta classe de persistência, implemente os métodos insert, updade, etc, como estáticos.

5. Em Projeto/Propriedades – Libraries, inclua o conector JBDC (add JAR/Folder)

Page 64: Minicurso Java NetBeans

PASSOS PARA FAZER UMA APLICAÇÃO COMÇBANCO DE DADOS

1. Já foi feito!2. Vamos fazer um BD para o último exercício.

V i t b l PESSOAVamos criar uma tabela PESSOA com os campos rg (chave primária), nome, idade, cidade e estado, sendo do tipo varchar(tamanho de restrição)sendo do tipo varchar(tamanho de restrição)

3. ---4 Agora vamos ver como os comandos sql devem4. Agora vamos ver como os comandos sql devem

ser inseridos no código. Lembrando que devemos passar a classe que desejamos salvar e a p q jconexão atual usada.

Page 65: Minicurso Java NetBeans

IMPLEMENTANDO O MÉTODO SAVARREGISTRO

Método savarRegistro(Pessoa p, Conexao conexao)conexao.conecta();Connection con = conexao getConection();Connection con = 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.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();

Page 66: Minicurso Java NetBeans

IMPLEMENTANDO O MÉTODO ATUALIZAREGISTRO

ÉÉ semelhante ao método anterior, diferenciando apenas no comando SQL a ser usado.

IMPLEMENTANDO O MÉTODO CARREGAREGISTROIMPLEMENTANDO O MÉTODO CARREGAREGISTRO

A maneira de como proceder permanece quase a P é d t l émesma. Porém, o comando que executa a sql é

outro: executeQuery(...). Este comando retorna os resultados da consulta de um select em umaresultados da consulta de um select em uma estrutura denominada ResultSet.

Page 67: Minicurso Java NetBeans

IMPLEMENTANDO O MÉTODO CARREGAREGISTRO

()conexao.conecta();Connection con = conexao.getConection();Statement st = con createStatement();Statement st = con.createStatement();ResultSet rs;String query = "SELECT nome, idade, estado FROM pessoa g q y , , p

WHERE rg = " + rg;rs = st.executeQuery(query);Pessoa p = null;if( !rs.next() ) return p;p = new Pessoa( rg rs getString("nome") rs getShort("idade")p = new Pessoa( rg,rs.getString( nome ), rs.getShort( idade ),

rs.getString("estado") );st.close();conexao.desconecta();

Page 68: Minicurso Java NetBeans

IMPLEMENTANDO O MÉTODO CARREGAREGISTRO

O método anterior carrega apenas um registro. Porém, é necessário em formulários que retornemos vários registros de uma só vezretornemos vários registros de uma só vez.Para isso, ao invés de retornarmos uma Pessoa, podemos retornar uma lista de pessoas A classepodemos retornar uma lista de pessoas. A classe ResultSet tem um método 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() );

Page 69: Minicurso Java NetBeans

EXERCÍCIO

Vamos aplicar os passos visto anteriormente eVamos aplicar os passos visto anteriormente e implementar a classe ControladorDePersistencia para tratar apenas inserções e carregamento nopara tratar apenas inserções e carregamento no Banco de Dados.Antes de começar, vamos adaptar o nosso ç pexercício já com GUI. Abra o projeto do último exercício.Primeiro vamos modificar a classe Pessoa. Crie um construtor simplificado para a classe com os seguintes parâmetros: nome idade e estadoseguintes parâmetros: nome, idade e estado.Agora pense em como será seu banco de dados. F d t b l ‘ t d ’ t dFaça duas tabelas: uma ‘estado’ contendo apenas o nome do UF como chave primária;

Page 70: Minicurso Java NetBeans

EXERCÍCIOE a outra ‘pessoa’ contendo o nome (key) idade eE a outra pessoa , contendo o nome (key), idade e estado (chave estrangeira)Adicione na tabela estado no BD os UF que estãoAdicione na tabela estado no BD os UF que estão no seu comboBox (GUI do exercício anterior).Adicione a classe Conexao.java ao projeto, declare j p j ,uma variavel deste tipo e instancie ela no construtor do frame principal.Agora vamos implementar a classe de persistência. Faça os dois métodos (salvar e carregar) como vistos anteriormente passando os parâmetros devistos anteriormente, passando os parâmetros de acordo com a estrutura do banco de dados.Para o método carregar vamos passar o nome daPara o método carregar, vamos passar o nome da pessoa como parâmetro

Page 71: Minicurso Java NetBeans

EXERCÍCIO

Agora passe para o construtor do InternalFrame oAgora passe para o construtor do InternalFrame o objeto de conexão a ser usado, para que ele possa ter uma visualização do objeto.ter uma visualização do objeto.Após feito isso, no botão cadastrar do formulário MDI, vamos inserir uma pessoa no BD e verificar pse ela realmente foi inserida utilizando um SGBD.Por último, vamos fazer uma busca simples. Utilize o método JOptionPane.showInputDialog(...) para receber o nome da pessoa e ao carregar, imprima os dados na tela pelo System out println( );os dados na tela pelo System.out.println(...);

Page 72: Minicurso Java NetBeans

UTILIZANDO O DEBUG DOUTILIZANDO O DEBUG DONETBEANSU d D b d N tB d ódiUsando o Debug do NetBeans para depurar código e encontrar erros lógicos.

Page 73: Minicurso Java NetBeans

CONCEITOS ENVOLVIDOS

BreakPoint: Primeiro passo para ‘debugar’. Adiciona linhas de parada no código, para que você possar ver o estado do programavocê possar ver o estado do programaLocal Variables: Com essa janela pode-se ver o valor das variaveis no instante da parada acionadavalor das variaveis no instante da parada acionada pelo breakpointWatchs: Você pode selecionar quais variáveisWatchs: Você pode selecionar quais variáveis deseja olhar, ao invés de todas. Para isso, selecione a variável que desejar e com o Popup, escolha New Watch (Observador)...CallStack: Pilha de chamada de métodos.

Page 74: Minicurso Java NetBeans

EXERCÍCIO 6

Abra o projeto Debug. Você pode ver que não há nenhum erro de compilação. Rodando, você verá uma mensagem de erro indicando que há umauma mensagem de erro indicando que há uma tentativa de acesso à um ponteiro nulo.Com a ajuda do debug do NetBeans descubra oCom a ajuda do debug do NetBeans, descubra o que está errado e corrija.

Page 75: Minicurso Java NetBeans

DESENHANDO PRIMITIVASGEOMÉTRICAS SOBRESCREVENDOGEOMÉTRICAS SOBRESCREVENDOO MÉTODO PAINTCOMPONENT()A ili d d l i t d li õAuxiliando no desenvolvimento de aplicações que precisam desenhar primitivas geométricas, como elipses, retângulos, retas e polígonos.

Page 76: Minicurso Java NetBeans

OBJETIVOSOBJETIVOS

Compreender a classe Graphics.

Desenhar primitivas geométricas

Entender o Sistemas de Coordenadas do JavaDesenhar primitivas geométricas sobrescrevendo o método paintComponet(...).p p ( )

Compreender a API Java2D

Utilizar recursos do mouse para desenhar figurasCompreender a API Java2D

Utilizar recursos avançados para desenhar ç pfiguras

Page 77: Minicurso Java NetBeans

API JAVAAPI JAVA

Java fornece uma API para desenhar formas geométricas no espaço euclidiano 2-D.g p ç

Classes Importantes na manipulação de objetos gráficos:

Classe Color Classe PolygonClasse ColorClasse FontClasse FontMetrics

Classe PolygonClasse BasicStrokeClasse GradientPaintClasse FontMetrics

Classe Graphics2DClasse GradientPaintClasse TexturePaint

Outras classes...

Page 78: Minicurso Java NetBeans

API

Page 79: Minicurso Java NetBeans

CLASSE GRAPHICS

Um objeto Graphics desenha pixels na tela que pode representar um texto ou um objeto q p p jgráfico (linhas, elipses, retangulos, etc).

Além do mais, fornece métodos para manipular Cor, Font e outros atributos.

Toda aplicação Java de desenho sobre a l bj G hi itela, usa um objeto Graphics para gerenciar

aplicações gráficas.

Page 80: Minicurso Java NetBeans

CLASSE GRAPHICS

A Classe Graphics é uma classe abstrata, ou seja, objetos Graphics não podem ser instanciados.

Contribui para Portabilidade.

Desenhos na tela são diferentes para as plataformas que suportam Java.

Quando Java é implementado para cada plataforma, uma subclasse de Graphics é p , pcriada que implementa a capacidade de desenhar.

Page 81: Minicurso Java NetBeans

DESENHANDO

Todo componente Java, por exemplo, JPanel, JButton, JFrame, possui seu próprio objeto Graphics que é responsável por desenharGraphics que é responsável por desenhar somente neste componente.Para obter este objeto Graphics do componentePara obter este objeto Graphics do componente, basta invocar o método getGraphics()

Obtido o objeto Graphics, basta invocar os métodos deste objeto para desenhar sobre ométodos deste objeto para desenhar sobre o componente

Page 82: Minicurso Java NetBeans

SISTEMAS DE COORDENADAS JAVA

Para começar desenhar em Java, devemos entender o sistema de coordenadas Java que é um esquema de identificar cada ponto possível na telaidentificar cada ponto possível na tela

Page 83: Minicurso Java NetBeans

EXERCÍCIO 1

Crie um novo projeto com o nome “Desenho”Adicione ao projeto a classe JFrameAdicione o componente JButton e o JPanel ao JFrame,

Lembre-se de alterar o nome das variáveis JButton e JPanelseguindo as regras de Engenharia de Software!!!

No método ActionPerformed() do JButton, faça o seguinte:

bli id jB tt 1A ti P f d(j t t A ti E t t)public void jButton1ActionPerformed(java.awt.event.ActionEvent evt){

Graphics g = jPanel1.getGraphics();g.drawLine(0,0,jPanel1.getWidth(), jPanel1.getHeight());

}

Page 84: Minicurso Java NetBeans

DESENHANDO CORRETAMENTE

Todo componente Java possui o método paintComponent. Este método é utlizado para fazer os desenhos gráficosos desenhos gráficos.

O método paintComponent possui como argumento o objeto Graphics Este objeto é passado aoobjeto Graphics. Este objeto é passado ao paintComponent pelo sistema quando este componente precisa ser repintado.componente precisa ser repintado.

Cabeçalho do Método:public void paintComponent( Graphics g )public void paintComponent( Graphics g )

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

Page 85: Minicurso Java NetBeans

DESENHANDO CORRETAMENTE

O método paintComponent nada faz por default:

O programador deve sobrescrever este método!p gRaramente o método paintComponent é chamado diretamente pelo programador. Este método é p p gautomaticamente chamado quando executa-se o programa. Para chamar novamente o método, um

t d l i ievento deve ocorrer, por exemplo, maximizar e minimizar a tela, redimensionar a tela, e outros...

Quando há necessidade de chamar explicitamente o método paintComponent, faz-se uma chamada ao p p ,método repaint.

Page 86: Minicurso Java NetBeans

EXERCÍCIO 2

Utilizando o mesmo projeto do exercício anterior:Crie quatro atributos do tipo inteiro (int ) para a l F 1 1 2 2classe Form, x1, y1, x2, y2.

Sobrescreva o método paintComponent:new = JPanel(){

void paintComponent( Graphics g ){super.paintComponent(g);super.paintComponent(g);g.drawLine(x1,y1,x2, y2);

}};};

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

Page 87: Minicurso Java NetBeans

CONTINUAÇÃO DO EXERCÍCIO 2

No JButton do exercício anterior, altere o evento ActionPerformed, faça as variáveis x1, y1, x2, y2 , ç , y , , yreceber os valores dos TextFilds respectivos.

Ai d t i ét dAinda no mesmo evento, invoque o método repaint do componente Jpaint.

Execute seu Programa!!!

Dúvidas???

Page 88: Minicurso Java NetBeans

APROFUNDANDO O CONHECIMENTO

Classe Color: fornece métodos e constantes para manipular cores em um programa em Java. A cor é criada a partir do componente RGBcriada a partir do componente RGB.Existem constantes pré-definidas que retornam uma cor

public void setColor( Color c )

uma corEx: Color c = Color.red;

public void setColor( Color c )

Depois de invocar este método, todos os objetos a serem desenhados terão a cor atribuídaEx: g.setColor( new Color(0,0,255) ) ouserem desenhados terão a cor atribuída.

E tC l ( C l bl )Ex: g.setColor( Color.blue );

Page 89: Minicurso Java NetBeans

COMPONENTE GUI JCOLORCHOOSER

A componente GUI JColorChooser permite ao usuário escolher a cor desejada por meio de uma Dialog:Dialog:Abaixo segue um exemplo de como utilizar o recurso JColorChooser:

public void jButtonCorActionPerformed(java.awt.event.ActionEvent evt){

recurso JColorChooser:

{ Color cor = jPanelDesenho.getBackground();cor = JColorChooser.showDialog( this, “Escolha uma cor", color ); jPanelDesenho.setBackground(cor);

}

Page 90: Minicurso Java NetBeans

DESENHANDO LINHAS, RETÂNGULOS E ELIPES

Mét d G hi d hMétodos Graphics para desenho:public void drawLine( int x1, int y1, int x2, int y2 )

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

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

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

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

Page 91: Minicurso Java NetBeans

LARGURA E ALTURA

public void drawRoundRect( int x, int y, int width, int height, int arcWidth, int arcHeight )

Page 92: Minicurso Java NetBeans

DESENHANDO STRINGS

O método de Graphics responsável por desenhar uma String na tela é:

bli id d St i ( St i t i t i t )public void drawString( String str, int x, int y )

O usuário, às vezes ,necessita de alterar a fonte, tipo e tamanho da String. Para isto, utilizamos a classe Font para fazer estas alterações.

Exemplo de como alterar a fonte, tipo e o tamanho:Font f = new Font(“Serif ” Font BOLD 12);Font f = new Font( Serif , Font.BOLD,12);g.setFont(f);

Page 93: Minicurso Java NetBeans

EXERCÍCIO 3

Faça uma rotina que permita ao usuário escolher a cor de fundo do Jpanel.

Faça o desenho de reta, retângulo, elipse, retângulo preenchido elipse preenchida retânguloretângulo preenchido, elipse preenchida, retângulo com canto arredondado. A cor deve ser diferente para cada figura.para cada figura.

Faça o desenho de três strings, para cada string utilize font tipo e tamanho:utilize font, tipo e tamanho:

“serif”,BOLD,12“Monospaced” ITALIC 24Monospaced ,ITALIC,24“SansSerif”,PAIN,14

Page 94: Minicurso Java NetBeans

TRATAMENTO DE EVENTO DO MOUSE

Os eventos do mouse captura evento de qualquer componente GUI.

No nosso contexto, queremos desenhar figuras geométricas dinamicamente utilizando os recursos ddo mouse.

Cada um dos métodos de tratamento de evento doCada um dos métodos de tratamento de evento do mouse recebe um objeto MouseEvent como argumento.O MouseEvent contém as informações sobre o evento que ocorreu, incluindo as coordenadas (x, ) d iy) da posição em que o evento ocorreu.

Page 95: Minicurso Java NetBeans

MÉTODOS DE EVENTO DO MOUSE

mousePressed( MouseEvent event )Chamado quando se pressiona um botão do mouse com o cursor sobre um componentesobre um componente.

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

mouseReleased ( MouseEvent event )mouseReleased ( MouseEvent event )Chamado quando se libera um botão 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.

Page 96: Minicurso Java NetBeans

MÉTODOS DE EVENTO DO MOUSE

mouseExited( MouseEvent event )Chamado quando o cursor do mouse deixa os limites de um componentecomponente.

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

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

Page 97: Minicurso Java NetBeans

DESENHANDO FIGURA DINAMICAMENTE

Para fazer o desenhos de figuras, fazemos uso de três eventos do mouse: mousePressed,mouseDragged e mouseReleasedmouseDragged e 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...)

Page 98: Minicurso Java NetBeans

EXERCÍCIO 4

Faça uma rotina que implementa o desenho de figuras por meio do mouse.

Utilize as variáveis inteiras x1,y1,x2,y2 para o desenho de retas, retângulos e elipses.

Use o recurso do radioButton para escolher qual figura desenhar.

Lembre-se que x2, y2 da elipse e retângulo são diferentes da retareta.

Observe o problema de se desenhar elipses e retangulos!!!

Page 99: Minicurso Java NetBeans

UTILIZANDO A API DO JAVA

Como vimos anteriormente, Java fornece uma API para manipulação de desenhos geométricos.

Um bom programador Java deve ao máximo utilizar os recursos que a API do Java oferece.os recursos que a API do Java oferece.

POO incentiva o reuso, ou seja, devemos it l já tã taproveitar as classes que já estão prontas

(consolidadas).

As classes Arc2D, Ellipse2D, Line2D, Rectangle2D e RoundRectangle2D definem uma variedade de formas em Java2D.

Page 100: Minicurso Java NetBeans

COMPREENDENDO AS CLASSES

Todas as classes de formas geométricas da API JAVA são abstratas, assim como alguns de seus métodos isto é a classe não pode ser instanciadasmétodos, isto é, a classe não pode ser instanciadas e seus métodos devem ser implementados. Contudo, para cada uma destas classes, existem , p ,subclasses que herdam delas e implementam os seus métodos.P lPor exemplo:

Observem no NetBeans a classe Line2D.A b l Fl t D bl h d d Li 2DA subclasse Float e Double herdam de Line2De implementam os métodos abstratos.Estas subclasses definem a precisão dasEstas subclasses definem a precisão das coordenadas da reta.

Page 101: Minicurso Java NetBeans

COMPREENDENDO AS CLASSES

As outras classes de forma geométrica também definem subclasses Float e Double. Logo, para instanciar um objeto por exemplo da classeinstanciar um objeto, por exemplo, da classe Ellipse2D, fazemos da seguinte forma:

Ellipse2D elipse;elipse = new Ellipse2D.Float(0,0,10,10);

Utilizar estas classes permite ao programador evitar de reescrever código. Já que, os métodos destas classes estão bem implementados

Page 102: Minicurso Java NetBeans

OUTRAS VANTAGENS

Existem métodos destas classes que podem ser proveitoso para alguns casos, em nosso contexto, faremos uso do seguinte método:faremos uso do seguinte método:

public boolean contains( Point2D p )

public boolean contains( double x double y)public boolean contains( double x, double y)

Este método devolve true se o ponto pertence ao interior da figura.

Page 103: Minicurso Java NetBeans

EXERCÍCIO 5

Crie outro projeto no NetBeans

Faça uma rotina que verifica se o mouse está sobre a figura.g

Utilize somente a figura da elipse para verificar se oUtilize somente a figura da elipse para verificar se o ponteiro do mouse está sobre ela.

Page 104: Minicurso Java NetBeans

UTILIZANDO ARRAYLIST

Até o momento, todas as figuras desenhadas são apagadas da tela quando desenha-se outra figura.

Uma solução é armazenar as figuras já desenhadas em uma estrutura de dadosdesenhadas em uma estrutura de dados.

Especificamente queremos armazenar os objetosEspecificamente, queremos armazenar os objetos elipses, retângulos, retas, etc.

A estrutura de dados pertinente ao caso é a ArrayList.y

Page 105: Minicurso Java NetBeans

COMO ARMAZENAMOS AS FIGURAS?

A lista de figuras é um atributo da classe.

Toda vez que o evento do mouseReleasedacontece, armazenamos a figura que terminamos de desenhar na lista de figurasde desenhar na lista de figuras.

A lista de figura contém objetos da classe Line2D, Ellipse2D ou Rectangle2D.

Estas classes tem em comum a implementação daEstas classes tem em comum a implementação da interface Shape, logo a minha lista de figuras vai armazenas objetos que implementa a interfacearmazenas objetos que implementa a interface Shape.

Page 106: Minicurso Java NetBeans

DETALHES DE IMPLEMENTAÇÃO

Declara-se figuras como atributo da classeArrayList<Shape> figuras;y p g ;... No construtor instancia-se o objeto:figuras = new ArrayList<Shape>();

No método MouseReleased, supondo o desenhoNo método MouseReleased, supondo o desenho de uma reta :

Line2D linha = Line2D.Float(x1,y1,x2,y2)Figuras.add(linha);

Page 107: Minicurso Java NetBeans

DESENHANDO A LISTA DE FIGURAS

No método responsável para desenhar as figuras, devemos em primeiro lugar imprimir a lista de figuras.A grande Questão: Como identificamos que um objeto da lista é uma reta retângulo ou elipse jáobjeto da lista é uma reta, retângulo ou elipse já 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 retângulo ou elipse!instancia da reta, retângulo ou elipse!

Page 108: Minicurso Java NetBeans

DETALHES DE COMO DESENHAR A LISTAfor( int i = 0 ; i < figuras size() ; i++ ){for( int i = 0 ; i < figuras.size() ; i++ ){

if( figuras.get(i) instanceof Ellipse2D ){

Ellipse2D elipse = (Ellipse2D) figuras get(i);Ellipse2D elipse = (Ellipse2D) 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());

}

}

Page 109: Minicurso Java NetBeans

EXERCÍCIO 6

Utilizando o projeto do exercício 4, implementes as figuras como objetos de Line2D, Ellipse2D e Rectangle2DRectangle2D.

Adicione o objeto à lista de figuras no método mouseReleased.

No método responsável por fazer o desenho, percorra a lista de figuras e desenhe elas.

Page 110: Minicurso Java NetBeans

GRAPHICS2D

Graphics2D herda da classe Graphics e implementa outros métodos para um desenho mais apuradoapurado.Dois métodos que destacamos da Graphics2Dsão:

public void setStroke( Stroke s )

Este método controla o tipo de borda seuEste método controla o tipo de borda, seu argumento é uma classe que implementa a interface Stroke, a classe que implementa Stroke é , q pa BasicStroke.

g.setStroke( new BasicStroke(2) );

A borda da figura terá borda de largura 2A borda da figura terá borda de largura 2

Page 111: Minicurso Java NetBeans

CONTINUAÇÃO...tSt k ( B i St k (4g.setStroke( new BasicStroke(4,

BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) );

A borda da figura terá borda de largura 4, os extremos da reta serão arredondados, e quando os extremos de duas retas se unem, o vértice será arredondado.

E t ét d d fi ti d d i ã d fipublic void setRenderingHint(Key hintKey, Object hintValue);

Este método define o tipo de renderização da figura :

As figuras que desenhamos contém serrilhados(aliasing) este serrilhado aconteceserrilhados(aliasing), este serrilhado acontece devido o monitor que contém número limitado de pixels.

Page 112: Minicurso Java NetBeans

ANTIALIASING

Para diminuir o serrilhado, devemos usar AntiAliasing para renderizar a figura: g p g

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE ANTIALIAS ON);G,RenderingHints.VALUE_ANTIALIAS_ON);

O primeiro argumento indica a chave da renderização que será aplicada o segundorenderização que será aplicada, o segundo indica o tipo de renderização.

Page 113: Minicurso Java NetBeans

EXERCÍCIO 7

No método paintComponent, depois de chamar a super classe, escreva o seguinte código:p , g g

Graphics2D g2d = (Graphics2D) g;

P i t( 2d)myPaint(g2d);

No escopo do método, altere de Graphics para p p pGraphics2D

Aplique o tipo de borda e renderização.