curso de linguagem java 2010 - marcos mendes

445
1 Curso de Linguagem Java Marcos Mendes 2010

Upload: renan-faganello-silva

Post on 25-Jun-2015

696 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Curso de Linguagem Java 2010 - Marcos Mendes

1

Curso de Linguagem Java

Marcos Mendes

2010

Page 2: Curso de Linguagem Java 2010 - Marcos Mendes

2

Principais Objetivos do Curso

Utilização de ferramentas de desenvolvi-mento gratuitas e/ou livres.

Parte IFamiliaridade com as estruturas de programação e criação de interfaces gráficas com o usuário.

Parte IIUso das principais estruturas de dados. Construção de uma aplicação de banco de dados

na Web.

Page 3: Curso de Linguagem Java 2010 - Marcos Mendes

3

Bibliografia de Referência Core Java 2

Volume 1 – Fundamentos Volume 2 – Recursos Avançados Cay S. Horstmann & Gary Cornell Editora Makron Books - Sun microsystems

Aprenda Programação Orientada a Objetos em 21 dias

Anthony Sintes Editora Makron Books

JDBC e Java - Programação para banco de dados George Reese Editora Berkeley – O´Reilly

Java - Servlet: Programação Jason Hunter & William Crawford Editora Ciência Moderna – O´Reilly

Certificação Sun para Programadores e Desenvolvedores Kathy Sierra & Bert Bates Editora AltaBooks - Osborne

Page 4: Curso de Linguagem Java 2010 - Marcos Mendes

4

Bibliografia de Referência Desenvolvendo Sites de e-Commerce

Como Criar um Eficaz e Lucrativo Site de e-Commerce Passo a Passo

Vivek Sharma & Rajiv Sharma Editora Makron Books

Desenvolvendo na Web com JavaServer Pages Duane K. Fields & Mark A. Kolb Editora Ciência Moderna – Manning

Java - Guia de Consulta Rápida Fábio Ramon Editora Novatec

JDBC 2 - Guia de Consulta Rápida Acesso a banco de dados usando a linguagem Java – Guia

de Consulta Rápida Fábio Ramon Editora Novatec

Page 5: Curso de Linguagem Java 2010 - Marcos Mendes

5

Bibliografia Complementar Java Use a Cabeça

Kathy Sierra e Bert Bates Editora Alta Books

Java Como Programar Deitel Editora Pearson / Prentice Hall

Simplesmente Java Michael Wenstrom Editora Alta Books

Big Java Cay Horstmann Editora Bookman

Tudo Sobre a JSP: com o NetBeans em Aplicações Distribuídas

Fernando Anselmo Visual Books

Page 6: Curso de Linguagem Java 2010 - Marcos Mendes

6

Sites para Consulta http://java.net www.java.sun.com www.soujava.org.br www.guj.com.br www.sobresites.com.br/java www.j2eebrasil.com.br www.portaljava.com.br www.javafree.com.br www.javasoft.com.br www.mundooo.com.br www.caelum.com.br www.globalcode.com.br www.argonavis.com.br www.tarcisiolopes.com.br www.javaman.com.br www.rsjug.org/html-2004/artigos/robocode.pdf http://uniclick.unisul.br/robocode

Page 7: Curso de Linguagem Java 2010 - Marcos Mendes

7

Tópicos Abordados no Curso Introdução à Linguagem Java

Histórico Utilização Características Ambiente de Desenvolvimento Estruturas de Programação

Programação Orientada a Objetos Nomenclatura Propriedades Construção de classes

Interface Gráfica (AWT, Swing) Contâineres Componentes Gerenciamento de Layout Manipulação de Eventos

Page 8: Curso de Linguagem Java 2010 - Marcos Mendes

8

Tópicos Abordados no Curso Applets (mini-aplicações cliente)

Conceitos Métodos Particulares Construção e Acesso

Conectividade de Banco de Dados (JDBC) Conceito da Arquitetura JDBC Etapas da Programação JDBC Manutenção de Tabelas de Banco de Dados

Servlets / JSP (aplicações servidor) Servidores HTTP Formato de um Servlet. Gravação de dados de um formulário HTML em um

Banco de Dados Remoto. Exibição de dados de um Banco de Dados em uma

página HTML.

Page 9: Curso de Linguagem Java 2010 - Marcos Mendes

9

Histórico da Linguagem 1991 – Início do Projeto Green

Linguagem Oak criada por James Gosling, Mike Sheridan e Patrick Naughton. Inspirada na UCSD Pascal de Niklaus Wirth, porém, baseada em C++ (Unix)

1994 – HotJava Gosling desenvolve o navegador Webrunner depois

chamado de HotJava para demonstrar o uso de Java no desenvolvimento de aplicativos para redes.

O compilador Java, originalmente escrito em C, é reescrito em Java.

1995 – Início da Era Java Lançamento oficial da Linguagem Java, kit JDK 1.0

alpha. Netscape com suporte à Java

Page 10: Curso de Linguagem Java 2010 - Marcos Mendes

10

Histórico da Linguagem 1996 – Lançamento do kit JDK 1.0

JVM para MacOS. Primeiro JavaOne

1997 – Lançamento da versão 1.1 Conectividade de bancos de dados, servlets e

objetos distribuídos. Novo modelo de eventos, internacionalização,

modelo de componentes JavaBeans) JDK 1.1.3 para Linux. JavaCard

1998 – Lançamento do Java2 JDK 1.2 - JFC Swing e segurança. Formalização do JCP – Java Community Process. API Java 3D.

Page 11: Curso de Linguagem Java 2010 - Marcos Mendes

11

Histórico da Linguagem 1999 – Edições da plataforma: J2SE, J2EE e

J2ME Lançamento de JSP – Java Server Pages. Apache Jakarta. Tecnologia JavaCard adotada como padrão mundial.

2000 – J2SE 1.3 400 grupos de usuários no mundo. JavaOne com mais de 25.000 desenvolvedores. NetBeans Open-Source

2001 – IDE Eclipse J2ME para Linux. Catálogo J2EE Patterns. Lançamento do SDK J2EE 1.3

Page 12: Curso de Linguagem Java 2010 - Marcos Mendes

12

Histórico da Linguagem 2002 – Lançamento do JDK J2SE 1.4

Web Services Developers Pack 1.0 Java 3D API 1.3 MIDP 2.0 API Java Server Faces Mais de 50 milhões de celulares J2ME

2003 – java.net 500 grupos de usuários Java no mundo. Anúncio do protótipo do robô de exploração enviado

à Marte. J2ME Mobile 3D Graphics API. J2EE 1.4

2004 – J2SE 1.5 (Tiger) Mais de 250 milhões de telefones móveis. Projeto Looking Glass

Page 13: Curso de Linguagem Java 2010 - Marcos Mendes

13

Edições Java Java Standard Edition (JavaSE)

API´s padrão, base da linguagem Java.

Aplicações Desktop.

Java Micro Edition (JavaME)

API´s para aplicações em micro-dispositivos (pda, celulares, pagers,...)

Java Enterprise Edition (JavaEE)

Destinada à aplicações corporativas distribuídas e de arquitetura multicamadas.

Page 14: Curso de Linguagem Java 2010 - Marcos Mendes

14

Plataforma Java 2 Standard Edition

Page 15: Curso de Linguagem Java 2010 - Marcos Mendes

15

Alguns motivos para você usar Java Em 2003 foi eleita pelo quarto ano consecutivo como a

linguagem do ano pela revista Info Exame. A tecnologia Java está em 100% das empresas Fortune

500; 78% dos executivos vêem Java como a melhor plataforma

para web services (fonte: Giga, Computerworld); Java está instalada e rodando em quase 500 milhões de

computadores desktop; Mais de 300 milhões de smart cards seguros baseados em

Java já foram distribuídos; sem contar os quase 1 bilhão de SIMM cards para telefonia celular.

Quase 74% de profissionais usam Java como sua principal linguagem de desenvolvimento, ultrapassando os 51% que usam Visual Basic (fonte: IDC).

Page 16: Curso de Linguagem Java 2010 - Marcos Mendes

16

Características da Linguagem PortabilidadePortabilidade

O código binário das aplicações Java (byte codes) podem ser executados em várias plataformas sem nenhuma alteração.

Uso GeralUso GeralAplicações que vão desde smart-cards até mainframes.

Linguagem Distribuída (RMI, EJB)Java possui api´s para a criação de objetos distribuídos onde partes de uma única aplicação podem estar sendo executada em várias máquinas transparentemente.

Segurança (SandBox – Caixa de Areia)Controle de segurança do ambiente de execução das aplicações.

Page 17: Curso de Linguagem Java 2010 - Marcos Mendes

17

Características da Linguagem Multithreading

Suporta a programação de aplicações multi-tarefa compostas por várias linhas de execução (threads).

Linguagem Dinâmica (JCP)Linguagem Dinâmica (JCP)A linguagem Java está em constante evolução, suas extensões e sua evolução não são controladas por uma única empresa, ou por seu criador, mas sim pela comunidade.

Java e a Internet (Applets, Servlets / JSP / JSF)Total suporte para criação de aplicações em rede especialmente para Web.

Orientação a ObjetosSegue o paradigma de orientação a objetos.

Page 18: Curso de Linguagem Java 2010 - Marcos Mendes

18

Java Community Process - JCP Processo estabelecido pela Sun, responsável

pela evolução da tecnologia Java. Composto por empresas, universidades, membros individuais e público em geral (www.jcp.orgwww.jcp.org).

Page 19: Curso de Linguagem Java 2010 - Marcos Mendes

19

Java Specification Request - JSR JSR 1 – Real-Time Specification for Java

ObjetivoA especificação Real-Time para Java amplia a plataforma Java para suportar a programação de avançados sistemas de aplicações em tempo real.

Specification LeadDoug Locke – TimeSys Corporation.

Expert GroupAjile Systems, Apogee Software, Belliardi, Brosgol, Cyberonix, Mitre Corporation, Motorola, NSI Com, Nortel Networks, QNX, Rockwell Collins, Sun Microsystems, Thales Group, TimeSys Corporation, WindRiver Systems.

Page 20: Curso de Linguagem Java 2010 - Marcos Mendes

20

Ambiente de Desenvolvimento

Ambiente Open Source Sistema Operacional

Linux

Servidores Web Apache (http://apache.org)

Tomcat (http://jakarta.apache.org/tomcat)

Jboss (www.jboss.org)

Ferramentas de Desenvolvimento (IDE) eclipse (www.eclipse.org)

NetBeans (www.netbeans.org)

Page 21: Curso de Linguagem Java 2010 - Marcos Mendes

21

Ambiente de Desenvolvimento

Ferramenta de Build Ant (http://ant.apache.org)

Controle de Versionamento CVS (www.cvshome.org)

Testes Automatizados Junit (http://junit.org)

Ferramenta de Log Log4J (http://jakarta.apache.org/log4j)

Controle de Alterações Bugzilla (http://bugzilla.org)

Page 22: Curso de Linguagem Java 2010 - Marcos Mendes

22

Ambiente de Desenvolvimento

Gerenciadores de Bancos de Dados MySQL

www.mysql.com Postgrees

www.postgresql.org HSQLDB

www.hsqldb.org Firebird

www.firebirdsql.org

Page 23: Curso de Linguagem Java 2010 - Marcos Mendes

23

Ambiente de Desenvolvimento Utilizando um ambiente Microsoft

Win XP pro = R$ 1.000,00 Win XP home = R$ 670,00 SQL Server = R$ 1.900,00 Visual Studio .Net = R$ 4.260,00

Total em torno de R$ 7.100,00Total em torno de R$ 7.100,00

(valores consultados no 1º sem. de 2004)(valores consultados no 1º sem. de 2004)

Page 24: Curso de Linguagem Java 2010 - Marcos Mendes

24

Ambiente de Desenvolvimento

Ferramentas de Programação JBuilder (Borland), Visual J++ (Microsoft),

JDeveloper (Oracle), WebSphere (IBM), SunOne

Studio (Sun), NetBeans (free), Eclipse (free),

etc.

Aquisição e instalação do J2SDK (Java 2

Software Development Kit) Através do site www.java.sun.comwww.java.sun.com, revistas

de CDRom, livros, etc.

O JSDK é um software de livre distribuição.

Page 25: Curso de Linguagem Java 2010 - Marcos Mendes

25

Ambiente de Desenvolvimento Exemplo para instalação do J2SDK versão 1.4.2

para Windows (98/ME) na unidade <c:> Clique duas vezes no arquivo

j2sdk-1_4_2-windows-i586.exe. Efetue a instalação com os parâmetros padrão Edite o arquivo c:\autoexec.bat

Inclua as seguintes linhas no final do arquivo:set JAVA_HOME=c:\j2sdk1.4.2set PATH=%JAVA_HOME%\bin;%PATH%set CLASSPATH=.

Reinicie o computador

É aconselhavel baixar os tutoriais de instalação nos

sites referidos anteriormente no tópico Sites para

Consulta.

Page 26: Curso de Linguagem Java 2010 - Marcos Mendes

26

Ambiente de Desenvolvimento Edição dos programas fontes

Editores de texto (ascii).

Compilação Compilador javacjavac executado

no prompt do DOS.

Execução Interpretador java java também

executado no prompt do DOS. Applets executadas em

browsers.

CódigoFonte(.java)

ByteCode(.class)

Compilação

Page 27: Curso de Linguagem Java 2010 - Marcos Mendes

27

Estruturas de Programação Formato geral de um programa Comentários Tipos de Dados Operadores Entrada e Saída via Console Declaração e Inicialização de Variáveis Declaração e Inicialização de Arrays Conversão de Tipos Controle de Fluxo Tratamento de Exceções

Page 28: Curso de Linguagem Java 2010 - Marcos Mendes

28

Formato Geral de um Programa

public public classclass HelloWord {

public static voidpublic static void main ( String args[ ] ) {

System.out.println ("Oi tudo bem" );

}

}

Page 29: Curso de Linguagem Java 2010 - Marcos Mendes

29

Padrões de Codificação Java da Sun

Padrões de Espaçamento

Recuo

Cada nível de recuo de ter exatamente 4(quatro) espaços em branco.

O início de comentários, declarações de pacotes, instruções de importação, declarações de interface e de classe não deve ser recuado.

Variáveis estáticas e de instância, construtores, métodos e seus respectivos comentários, devem ser recuados em um nível.

Dentro de construtores e métodos, variáveis locais, instruções e seus comentários devem ser recuados em um nível.

As instruções (e seus comentários) que estiverem dentro de instruções de bloco devem ser recuadas em mais um nível para cada nível de aninhamento envolvido.

Page 30: Curso de Linguagem Java 2010 - Marcos Mendes

30

Padrões de Codificação Java da Sun

Padrões de Espaçamento (Cont.)

Comprimento e Quebra de linha

Uma linha não deve ter mais que 80 caracteres. Recomenda-se 65.

Insira a quebra depois da vírgula.

Insira a quebra antes de um operador.

Alinhe a nova linha pelo espaço de dois níveis de recuo além do início da linha na qual a quebra foi inserida.

Procure não inserir quebras dentro de uma expressão entre parênteses.

Page 31: Curso de Linguagem Java 2010 - Marcos Mendes

31

Padrões de Codificação Java da Sun

Padrões de Espaçamento (Cont.) Espaço em branco

Utilize uma linha em branco Entre métodos e construtores; depois de sua última variável de instância; dentro de um método entre as variáveis locais e a

primeira instrução; dentro de um método para separar segmentos

lógicos de código; antes de comentários de uma linha ou um bloco.

Utilize um espaço em branco Entre operadores binários; depois de vírgulas em uma lista de argumentos; depois de expressões em uma instrução for. entre uma palavra-chave e um parêntese; depois de conversões.

Page 32: Curso de Linguagem Java 2010 - Marcos Mendes

32

Padrões de Codificação Java da Sun

Padrões de Espaçamento (Cont.) Formatação de Chaves

Chaves para classes, interfaces, construtores e métodos A chave de abertura deve ocorrer no final da

mesma linha da declaração. A chave de fechamento inicia uma nova linha, e é

recuada para coincidir com o início da declaração. Chaves

Page 33: Curso de Linguagem Java 2010 - Marcos Mendes

33

Comentários Comentário de uma única linha

// comentário

Comentário de múltiplas linhas

/* primeira linha de comentário

segunda linha de comentário */

Comentário para Documentação

(Javadoc)

/** comentário */

Page 34: Curso de Linguagem Java 2010 - Marcos Mendes

34

Tipos de Dados Numéricos

Inteiros int short long byte

Ponto Flutuante float double

Caracter char

Lógico boolean

Page 35: Curso de Linguagem Java 2010 - Marcos Mendes

35

Tipos de Dados (cont.)

Inteiros

Faixa de Armazenamento

Tamanho

Tipo

-128 a +1271 bytebyte

-9.223.372.036.854.775.808L a+9.223.372.036.854.775.807L

8 byteslong

-32.768 a +32.7672 bytesshort

-2.147.483.648 a +2.147.483.647

4 bytesint

Page 36: Curso de Linguagem Java 2010 - Marcos Mendes

36

Tipos de Dados (cont.)

Ponto Flutuante

Faixa de Armazenamento

Tamanho

Tipo

Aproximadamente± 1.79769313486231570E+308

8 bytesdouble

Aproximadamente± 3.40282347E+38F

4 bytesfloat

Page 37: Curso de Linguagem Java 2010 - Marcos Mendes

37

Tipos de Dados (cont.) Caracter

Faixa de Armazenamento

Tamanho

Tipo

\u0000 a \uFFFF (Unicode)

(www.unicode.org)

2 byteschar

Lógico (booleano)

Valores PossíveisTipotrue / falseboolean

Page 38: Curso de Linguagem Java 2010 - Marcos Mendes

38

Operadores

Aritméticos

Atribuição

Relacionais

Lógicos

bit a bit

Page 39: Curso de Linguagem Java 2010 - Marcos Mendes

39

Operadores Aritméticos

Decremento--Incremento++

Resto da divisão%

Divisão/Multiplicação*

Subtração / Menos Unário

-Adição+

OperaçãoOperador

Page 40: Curso de Linguagem Java 2010 - Marcos Mendes

40

Operadores de Atribuição

Atribuições Acumulativas (Compostas)

Atribuição=

Resto da divisão%=

Divisão/=Multiplicação*=

Subtração-=Adição+=

OperaçãoOperador

Page 41: Curso de Linguagem Java 2010 - Marcos Mendes

41

Operadores Relacionais

Diferente de!=

Igual a==

Maior ou igual a>=

Menor ou igual a<=

Maior que>

Menor que<

OperaçãoOperador

Page 42: Curso de Linguagem Java 2010 - Marcos Mendes

42

Operadores Lógicos

Condicional

(Ternário)

? :

Ou lógico (or)||

E lógico (and)&&

Negação (not)!

OperaçãoOperador

Page 43: Curso de Linguagem Java 2010 - Marcos Mendes

43

Operadores bit a bit

Not bit a bit (complemento)

~

Deslocamento à direita com preenchimento de zeros

>>>

Deslocamento à direita>>

Deslocamento à esquerda<<

Xor bit a bit^

Or bit a bit|

And bit a bit&

OperaçãoOperador

Page 44: Curso de Linguagem Java 2010 - Marcos Mendes

44

Entrada e Saída via Console Entrada através do array de

argumentos da linha de comando

Saída através do método println( )

Exemplo:class EntraSai {

public static void main(String args [ ] ) {

System.out.println( args[0] );

}

}

Page 45: Curso de Linguagem Java 2010 - Marcos Mendes

45

Entrada e Saída com printf e Scannerimport java.util.*;

public class EntradaSaida {public static void main(String args[]) {

Scanner sc = new Scanner(System.in);System.out.printf("Digite seu nome: ");String nome = sc.next();System.out.printf("Digite um número: ");double n1 = sc.nextDouble();System.out.printf("Digite outro número: ");double n2 = sc.nextDouble();double media = (n1 + n2) / 2;System.out.printf("Olá " + nome +

", a média entre %1$3.2f e %2$3.2f é: %3$6.2f", n1, n2, media);

Date d = new Date();System.out.printf("\nHoje é %1$td/%1$tm/%1$ty", d);System.out.printf("\nHoje é %1$td/%1$tm/%1$tY", d);System.out.printf("\nHoje é %1$td/%1$tb/%1$tY", d);System.out.printf("\nHoje é %1$td de %1$tB de %1$tY", d);String hora = String.format("\nAgora é %1$tkh%1$tMm%1$tSs", d);System.out.println(hora);

}} // mais detalhes em java.util.Scanner e java.util.Formatter

Page 46: Curso de Linguagem Java 2010 - Marcos Mendes

46

Declaração e Inicialização de Variáveis

class Variaveis {

static int x = 10; // Variável de Classe

public static void main ( String args [ ] ) {

int y; // Variável de Instância

y = 5;

System.out.println ("A soma é " + (x+y) );

}

}

Page 47: Curso de Linguagem Java 2010 - Marcos Mendes

47

Conversão de Tipos

Conversão entre Tipos Numéricos

Conversões Automáticas

Conversões Explícitas (cast)

Conversão de String para int

Page 48: Curso de Linguagem Java 2010 - Marcos Mendes

48

Conversão entre Tipos Numéricos Conversões Automáticas

Conversão de tipos menores para maiores

byte x = 10; // byte – 8 bits

short y = x; // short – 16 bits

int w = y; // int – 32 bits

long z = w; // long – 64 bits

Page 49: Curso de Linguagem Java 2010 - Marcos Mendes

49

Conversão entre Tipos Numéricos

Conversões Explícitas (cast)

Conversão de tipos maiores para

menores (quando há uma possível

perda de dados).

long x = 123456L; // long – 64 bits

short y = (short) x;// short – 16 bitscast

Page 50: Curso de Linguagem Java 2010 - Marcos Mendes

50

Conversão entre Strings e Números Integer.parseInt ( String s ) Integer.valueOf ( String s ).intValue( ) String.valueOf ( int n )

Exemplo:class Converte { public static void main( String args[ ] ) { int x = Integer.parseInt( args[0] ); int y = Integer.valueOf( args[1] ).intValue(); System.out.println("A soma é " + (x+y) ); }}

Page 51: Curso de Linguagem Java 2010 - Marcos Mendes

51

Controle de Fluxo Blocos

(seqüências) {

comando1;

comando2;

}

Decisão (desvios) if switch

Repetição (laços) while do while for

Controles de laço break continue System.exit(0)

Page 52: Curso de Linguagem Java 2010 - Marcos Mendes

52

Desvio - ifSintaxe:

ifif (condição)comando1;

elseelsecomando2;

Exemplo:

if (x == 10) {y = x * 2;z = x / 2;

}else {

y = x * 3;z = x / 3;

}

Page 53: Curso de Linguagem Java 2010 - Marcos Mendes

53

Desvio - switchSintaxe:

switchswitch (expressão) {casecase valor1: comando1;

break;casecase valor2:

comando2;break;

defaultdefault:comandosDefault;

}

Exemplo:switch (ch) {

case ‘8’: setaAcima++;

break;case ‘2’:

setaAbaixo++;

break;default:

outros++;}

Page 54: Curso de Linguagem Java 2010 - Marcos Mendes

54

Laço - whileSintaxe:

whilewhile (condição) comando;

Exemplo:

int x = 1;while (x <= 10) {

System.out.println( x );x++;

}

Page 55: Curso de Linguagem Java 2010 - Marcos Mendes

55

Laço – do...whileSintaxe:

dodo comando;

whilewhile (condição) ;

Exemplo:

int x = 1; do {

System.out.println( x );x++;

} while (x <= 10) ;

Page 56: Curso de Linguagem Java 2010 - Marcos Mendes

56

Laço – forSintaxe:

forfor ( inicialização ; condição ; incremento )comando;

Exemplo:

for ( int x=1 ; x <= 10 ; x++)System.out.println( x );

Page 57: Curso de Linguagem Java 2010 - Marcos Mendes

57

Controles de laço breakbreak

Encerra a execução do laço. Desviando o fluxo para a instrução seguinte ao bloco.

continuecontinue

Desvia o fluxo para o teste condicional do laço.

System.exit(0)System.exit(0)

Encerra o programa (não bem um controle de laço).

Page 58: Curso de Linguagem Java 2010 - Marcos Mendes

58

JOptionPane (javax.swing.JOptionPane)

Principais Métodos Estáticos showConfirmDialogshowConfirmDialog ( ComponentComponent parent, ObjectObject

mensagem, StringString título, intint opção, intint tipoMensagem

)

Exibe uma caixa de confirmação.

showInputDialogshowInputDialog ( )

Exibe uma caixa de entrada de dados.

showMessageDialogshowMessageDialog ( )

Exibe uma caixa de mensagem.

Os três métodos possuem a mesma assinatura.

Page 59: Curso de Linguagem Java 2010 - Marcos Mendes

59

JOptionPane (javax.swing.JOptionPane)

Principais Campos

Valores de retorno para showConfirmDialog

( )

CANCEL_OPTION

NO_OPTION

OK_OPTION

YES_OPTION

Page 60: Curso de Linguagem Java 2010 - Marcos Mendes

60

JOptionPane (javax.swing.JOptionPane)

Tipos de Mensagens

ERROR_MESSAGE

INFORMATION_MESSAGE

PLAIN_MESSAGE

QUESTION_MESSAGE

WARNING_MESSAGE

Page 61: Curso de Linguagem Java 2010 - Marcos Mendes

61

JOptionPane (javax.swing.JOptionPane)

import javax.swing.*;

public class OptionDos {public static void main(String args[]) {

String n = JOptionPane.showInputDialogshowInputDialog(null, "Digite seu nome");

int x = JOptionPane.showConfirmDialogshowConfirmDialog(null, "Oi " + n + ", tudo bem ? ");

if (x == JOptionPane.YES_OPTION)System.out.print("Sim");

elseif (x == JOptionPane.NO_OPTION)

System.out.print("Não");System.out.println(", " + n);JOptionPane.showMessageDialogshowMessageDialog(null, "Tchau !");System.exit(0);

}}

Page 62: Curso de Linguagem Java 2010 - Marcos Mendes

62

JOptionPane (javax.swing.JOptionPane)

JOptionPane com botões personalizados

import javax.swing.JOptionPane;

public class TestaDialogo {

public static void main(String[] args) {

String opt[] = {"sim", "não"};

int resp = JOptionPane.showOptionDialogshowOptionDialog(null, "Mensagem",

"Título", 0, JOptionPane.QUESTION_MESSAGE, null, optopt, "sim");

System.out.println(resp);

}

}

Page 63: Curso de Linguagem Java 2010 - Marcos Mendes

63

Na mesma pasta que estiver o arquivo .class, crie um arquivo texto com o nome de manifest.txt contento o seguinte:

Main-class: NomeClasseMain-class: NomeClasse

(linha em branco)(linha em branco)

Não esquecer da linha em branco no final do manifest. Execute o seguinte comando:

jar cvfm arquivo.jar manifest.txt classe.classjar cvfm arquivo.jar manifest.txt classe.class Será criado um aquivo jar executável, basta clicá-lo que

ele será executado.

Jar Executável

Page 64: Curso de Linguagem Java 2010 - Marcos Mendes

64

Exercícios Propostos1) Dado N, calcular a soma dos números naturais de 1 até N.

2) Dado N, imprimir os N primeiros naturais ímpares.

3) Dado N, imprimir o fatorial de N.

4) Dados X inteiro e N natural, calcular X elevado a N.

5) Dada uma lista de 10 números inteiros, exibir o menor e

o maior número dessa seqüência.

6) Dado N natural, informar se N é primo.

7) Dado N natural, informar se N é perfeito.

8) Dada uma lista de números inteiros, calcular a soma dos

números pares.

Page 65: Curso de Linguagem Java 2010 - Marcos Mendes

65

Exercícios Propostos1) Dado N, calcular quantas vezes N pode ser dividido por

2 (calcular o ).

2) Dado N e dois números naturais I e J diferentes de 0,

exibir em ordem crescente os N primeiros naturais que

são múltiplos de I ou de J e ou de ambos. Exemplo:

Para N=6, I=2 e J=3 a saída deverá ser: 0, 2, 3, 4, 6, 8.

3) Dado N, exibir seus algarismos na ordem inversa.

4) Dado N, exibir a soma de N com N invertido

(algarismos).

5) Dado N na base binária, exibi-lo na base decimal.

Page 66: Curso de Linguagem Java 2010 - Marcos Mendes

66

Entrada em tempo de execução (antes da classe Scanner)

import java.io.*;import java.io.*;public class Entrada {

public static void main(String[] args) throws throws IOExceptionIOException {

System.out.print("Digite um número: ");InputStreamReaderInputStreamReader isr = new

InputStreamReaderInputStreamReader(System.in);BufferedReaderBufferedReader br = new BufferedReaderBufferedReader(isr);String s = br.readLinereadLine();int x = Integer.parseInt(s);System.out.print("Digite um número: ");s = br.readLinereadLine();int y = Integer.parseInt(s);System.out.println(" A soma e " + (x + y));

}}

Page 67: Curso de Linguagem Java 2010 - Marcos Mendes

67

Declaração e Inicialização de Arrays

Declara-se um array utilizando colchetes após o tipo de dado base ou após o nome do array:

int[ ] numeros;

String nomes[ ] = new String[5]; Assim como variáreis, pode-se declarar e

inicializar arrays:

int[ ] primos = { 2, 3, 5, 7, 11, 13 }; O atributo lengthlength armazena o tamanho do array:

int tam = primos.length;

Page 68: Curso de Linguagem Java 2010 - Marcos Mendes

68

Carga e exibição de Arraysimport javax.swing.*;public class CarregaExibeArray {

public static void main(String[] args) {String nomes[] = new String[3];for (int cont = 0; cont < nomes.length; cont++) {

nomes[cont] = JOptionPane.showInputDialog("Digite um nome");

}for (int cont = 0; cont < nomes.length; cont++) {

System.out.println(nomes[cont]);}

System.out.println("Usando for estendido");for (String n:nomes) {

System.out.println(n);}

}}

Page 69: Curso de Linguagem Java 2010 - Marcos Mendes

69

Exercícios com arrays Criar um método min( )min( ) que recebe um array a[0..n-1]a[0..n-1]

e retorne o menor elemento do array. Criar um método max( )max( ) que recebe um array a[0..n-a[0..n-

1]1] e retorne o maior elemento do array. Criar um método isSorted( )isSorted( ) que recebe um array

a[0..n-1]a[0..n-1] e retorne truetrue se os elementos do array estiverem em ordem crescente ou falsefalse caso contrário.

Criar um método inverte( )inverte( ) que recebe um array a[0..n-1]a[0..n-1] e inverte a posição de seus elementos.

Criar um método append( )append( ) que recebe um array a[0..n-1]a[0..n-1] e um inteiro xx. E acrescenta xx ao final do array.

Criar um método insert( )insert( ) que recebe um array a[0..n-a[0..n-1]1] e um inteiro xx. E insere xx no início do array.

Page 70: Curso de Linguagem Java 2010 - Marcos Mendes

70

Exceções Sintaxe

trytry {

código que pode provocar umaexceção;

} catchcatch ( Tipo_Exceção variavel ) {

código de tratamento;

} finalyfinaly {

código a ser executado ocorrendo ou

nãoexceções;

}

Page 71: Curso de Linguagem Java 2010 - Marcos Mendes

71

Exceções

Exemplotry {

int x = Integer.parseInt(args[0]);

System.out.println ( "O quadrado do valor é " +

x*x );

} catch (Exception e){

System.out.println( "Problemas " + e);

}

Page 72: Curso de Linguagem Java 2010 - Marcos Mendes

72

Usando import staticimport static javax.swing.JOptionPane.*;

import static java.lang.Integer.parseInt;

import static java.lang.Math.*;

import static java.lang.System.out;

public class UsandoImportStatic {

public static void main(String[] args) {

String entrada = showInputDialog("Digite um número");

int numero = parseInt(entrada);

out.println("O quadrado desse número é " + pow(numero, 2));

}

}

Page 73: Curso de Linguagem Java 2010 - Marcos Mendes

73

Algumas Classes JavaO JDK é fornecido com uma quantidade muito grande de classes já implementadas. Veremos algumas:

String / StringBuffer Date / Calendar / GregorianCalendar Math Empacotadores de Objetos (wrappers) Arrays Vector

Page 74: Curso de Linguagem Java 2010 - Marcos Mendes

74

Classe String (java.lang.String)

Um objeto String tal como os wrappers não podem ter seu conteúdo alterado após sua inicialização.

Declaração e InicializaçãoString str;str = “Oi tudo bem”;

String str = “Oi tudo bem”;

String str = new String(“Oi tudo bem”);

Page 75: Curso de Linguagem Java 2010 - Marcos Mendes

75

Classe String (cont.)

Principais Construtores StringString ( ) StringString ( byte [ ] bytes ) StringString ( char [ ] value ) StringString ( String value ) StringString ( StringBuffer buffer )

Page 76: Curso de Linguagem Java 2010 - Marcos Mendes

76

Classe String (cont.)

Principais Métodos char charAtcharAt ( int índice )

Retorna o caracter na posição índice.

int compareTocompareTo ( String str2 )Compara lexicograficamente com str2. Retorna 0 se for igual; um número negativo se for menor; um número positivo se for maior.

boolean equalsequals ( Object o )Verifica se o é uma string com a mesma seqüência de caracteres.

Page 77: Curso de Linguagem Java 2010 - Marcos Mendes

77

Classe String (cont.)

boolean equalsIgnoreCaseequalsIgnoreCase ( String str2 )Compara com str2 ignorando diferenças entre letras maiúsculas e minúsculas.

boolean startsWithstartsWith ( String str2 )Retorna true se a string começar com str2.

boolean endsWithendsWith ( String str2 )Retorna true se a string terminar com str2.

String replacereplace ( char ant, char novo )Retorna uma nova string com os caracteres ant substituídos por novo.

Page 78: Curso de Linguagem Java 2010 - Marcos Mendes

78

Classe String (cont.)

int lengthlength ( )Retorna o comprimento da string.

String substringsubstring ( int início)String substringsubstring ( int início, int fim )Retorna uma nova string com os caracteres a partir de início até o final da string ou até o índice fim (exclusivo).

char [ ] toCharArraytoCharArray ( )Retorna um novo array de caracteres contendo a string.

String trimtrim ( )Retorna uma nova string eliminando todos os espaços iniciais e finais.

Page 79: Curso de Linguagem Java 2010 - Marcos Mendes

79

Classe String (cont.)

String toLowerCasetoLowerCase ( )

Retorna uma nova string com as letras maiúsculas convertidas para minúsculas.

String toUpperCasetoUpperCase ( )

Retorna uma nova string com as letras minúsculas convertidas para maiúsculas.

int indexOfindexOf ( String str2)

int indexOfindexOf ( String str2, int início )

Retorna o início da primeira incidência de str2 començando no índice 0 ou início

Page 80: Curso de Linguagem Java 2010 - Marcos Mendes

80

Classe StringBuffer (java.lang.StringBuffer)

Principais Construtores StringBufferStringBuffer ( ) StringBufferStringBuffer ( int tamanho ) StringBufferStringBuffer ( String str )

Page 81: Curso de Linguagem Java 2010 - Marcos Mendes

81

Classe StringBuffer (cont.)

Principais Métodos StringBuffer appendappend (char ch ) StringBuffer appendappend (int i )

Acrescenta um dado ao final do conteúdo do String Buffer.

int capacitycapacity ( )

Retorna a capacidade atual do String Buffer. char charAtcharAt ( int indice )

Retorna o caractere indicado por indice.

Page 82: Curso de Linguagem Java 2010 - Marcos Mendes

82

Classe StringBuffer (cont.)

StringBuffer deletedelete (int inicio, int final )

Remove os caracteres entre os índices

inicio e final.

StringBuffer deleteCharAtdeleteCharAt (int indice )

Remove o caractere indicado por indice.

StringBuffer insertinsert (int indice, char ch )

StringBuffer insertinsert (int indice, String s )

Insere um dado no String Buffer a partir da

posição indice.

Page 83: Curso de Linguagem Java 2010 - Marcos Mendes

83

Classe StringBuffer (cont.)

int lengthlength ( )

Retorna a quantidade de caracteres do String Buffer.

void setLengthsetLength ( int novotamanho )

Ajusta o tamanho do String Buffer. String substringsubstring ( int inicio, int final )

Retorna uma nova String contendo os caracteres de índice inicio até final.

String toStringtoString ( )

Retorna uma String com o conteúdo do String Buffer.

Page 84: Curso de Linguagem Java 2010 - Marcos Mendes

Manipulação de Datas

Calendar

GregorianCalendar

Object

Date

Classe Abstrata

Page 85: Curso de Linguagem Java 2010 - Marcos Mendes

85

Classe Date (java.util.Date) Contrutores

DateDate ( ) DateDate ( long tempo )

Principais Métodos boolean after after ( Date quando )

verifica se a data do objeto é posterior a quando. boolean before before ( Date quando )

verifica se a data do objeto é anterior a quando. boolean equalsequals ( Object quando )

verifica se a data do objeto é igual a quando. long getTime getTime ( )

Retorna o número de milisegundos desde 01/01/1970, 00:00:00 GMT até a data do objeto.

void setTime setTime ( long time )Ajusta a data do objeto.

Page 86: Curso de Linguagem Java 2010 - Marcos Mendes

86

Classe Calendar (java.util.Calendar)

Contrutores CalendarCalendar ( ) CalendarCalendar ( TimeZone zona, Locale local )

Principais Métodos void addadd ( int campo, int quantidade )

Adiciona quantidade a um campo do objeto. boolean afterafter ( Object quando )

verifica se a data do objeto é posterior a quando. boolean beforebefore ( Object quando )

verifica se a data do objeto é anterior a quando. boolean equalsequals ( Object quando )

verifica se a data do objeto é igual a quando.

Page 87: Curso de Linguagem Java 2010 - Marcos Mendes

87

Classe Calendar (java.util.Calendar)

Principais Métodos int getget ( int campo )

Retorna o valor de um campo do objeto. Date getTimegetTime ( )

Retorna a data do objeto. void setset ( int campo, int valor )

Ajusta o valor de um campo do objeto. void setset ( int ano, int mes, int dia) void setset ( int ano, int mes, int dia, int hora,

int minuto, int segundo )Ajusta os campos indicados.

void setTimesetTime ( Date quando )Ajusta a data do objeto.

Page 88: Curso de Linguagem Java 2010 - Marcos Mendes

88

Classe Calendar (java.util.Calendar)

Principais Campos Calendar.DATE Calendar.YEAR Calendar.MONTH Calendar.DAY_OF_MONTH Calendar.DAY_OF_WEEK Calendar.DAY_OF_WEEK_IN_MONTH Calendar.AM_PM Calendar.HOUR Calendar.HOUR_OF_DAY Calendar.MINUTE Calendar.SECOND

Page 89: Curso de Linguagem Java 2010 - Marcos Mendes

89

Exemplo de Manipulação de Datas

import java.util.*;public class Agora {

public static void main(String[] args) {GregorianCalendarGregorianCalendar now = new GregorianCalendar()GregorianCalendar();System.out.println(new Date()Date());int dia = now.getget(Calendar.DAY_OF_MONTH);// Janeiro = 0int mes = now.getget(Calendar.MONTHCalendar.MONTH) + 1;int ano = now.getget(Calendar.YEARCalendar.YEAR);// Domingo = 1int semana = now.getget(Calendar.DAY_OF_WEEKCalendar.DAY_OF_WEEK);// hora 24:00int hora = now.getget(Calendar.HOUR_OF_DAYCalendar.HOUR_OF_DAY);System.out.println("data: " + dia + "/" + mes + "/" + ano);System.out.println("dia da semana: " + semana);System.out.println("hora: " + hora);

}}

Page 90: Curso de Linguagem Java 2010 - Marcos Mendes

90

Classe Math (java.lang.Math)

É uma classe final, portanto, não pode ser derivada. Não possui contrutores acessíveis. Seus métodos são static.

Devem ser utilizados da seguinte

forma:double potencia = Math.pow ( 2, 5 );

Campos double MATH.E

double MATH.PI

Page 91: Curso de Linguagem Java 2010 - Marcos Mendes

91

Classe Math (java.lang.Math)

Principais Métodos

double absabs ( double a )Retorna o valor absoluto de a.

double maxmax ( double a, double b )Retorna o maior valor entre a e b.

double minmin ( double a, double b )Retorna o menor valor entre a e b.

Page 92: Curso de Linguagem Java 2010 - Marcos Mendes

92

Classe Math (java.lang.Math) double powpow ( double a, double b )

Retorna a elevado a b.

double randomrandom ( )Retorna um número aleatório ente 0.0 e 1.0

long roundround (float a )Retorna o valor de a arredondado.

double sqrtsqrt ( double a )Retorna a raiz quadrada de a.

Page 93: Curso de Linguagem Java 2010 - Marcos Mendes

93

Empacotadores de Objetos (wrappers)

São classes que armazenam tipos básicos:Integer, Long, Float, Double, Short, Byte, Character, Void e Boolean.

São utilizados para armazenamento de tipos básicos onde objetos são requeridos. E também para conversão em String.

Assim como String, um wrapper é imutável.

Page 94: Curso de Linguagem Java 2010 - Marcos Mendes

94

Wrappers (cont.)

Construtores ( Integer ) IntegerInteger ( int valor ) IntegerInteger ( String string )

Principais Campos Integer.MIN_VALUEMIN_VALUE

Menor valor possível em um int (-231) Integer.MAX_VALUEMAX_VALUE

Maior valor possível em um int (231-1)

Page 95: Curso de Linguagem Java 2010 - Marcos Mendes

95

Wrappers (cont.)

Principais Métodos int intintValueValue ( )

Retorna o valor como tipo primitivo int. String toStringtoString ( int i )

Retorna uma String que representa um valor int. int parseparseIntInt ( String s )

Retorna um int representado em uma String. Integer valueOfvalueOf ( String s )

Retorna um Integer representado em uma String. int compareTocompareTo ( Integer valor)

Compara com outro objeto Integer. boolean equalsequals ( Object obj )

Verifica se os dois objetos representam o mesmo valor.

Page 96: Curso de Linguagem Java 2010 - Marcos Mendes

96

Classe Arrays (java.util.Arrays)

Principais Métodos boolean equalsequals ( int[ ] a, int[ ] a2 )

Verifica se o array a é igual ao array a2. void fillfill ( int[ ] a, int valor ) void fillfill ( int[ ] a, int deindice, int ateindice, int

valor )

Preenche um array com um determinado valor. int binarySearchbinarySearch ( int[ ] a, int chave )

Efetua uma busca do valor chave no array a. void sortsort ( int[ ] a ) void sortsort ( int[ ] a, int deindice, int ateindice )

Classifica um array.

Page 97: Curso de Linguagem Java 2010 - Marcos Mendes

97

Classe Vector (java.util.Vector)

Construtores VectorVector ( ) VectorVector ( int capacidadeInicial ) VectorVector ( int capacidadeInicial, int incremento )

Principais Métodos boolean addadd ( Object obj ) void addadd ( int indice, Object obj )

Inclui um elemento no índice especificado. Object getget ( int indice )

Retorna o elemento do índice especificado.

Page 98: Curso de Linguagem Java 2010 - Marcos Mendes

98

Classe Vector (java.util.Vector)

Principais Métodos void removeremove ( int indice )

Remove o elemento do índice especificado. void setset ( int indice, Object obj )

Sobrescreve o elemento do índice especificado. void setSizesetSize ( int n )

Ajusta a quantidade de elementos do vetor. int sizesize ( )

Retorna a quantidade de elementos do vetor.

Page 99: Curso de Linguagem Java 2010 - Marcos Mendes

99

Programação Orientada a Objetos

Atributos Métodos Propriedades

Encapsulamento Herança Polimorfismo

Construtores Instanciação (new) Pacotes Construção de uma Classe (class)

Page 100: Curso de Linguagem Java 2010 - Marcos Mendes

100

Formato geral de uma classe

packagepackage NomeDoPacote;

importimport NomeDoPacote;

ModificadorClasse classclass NomeClasse extendsextends Superclasse implementsimplements ListaDeInterfaces {

TipoAtributo NomeAtributo, ... ;

ModificadorMétodo TipoMétodo NomeMétodo (ListaDeParâmetros) {

Corpo do Método}...

}

Page 101: Curso de Linguagem Java 2010 - Marcos Mendes

101

Modificadores de Acesso

Sem efeito.(não aplicável)static

Não permite definição de subclasses.

Não permite definição de subclasses.final

Não pode ser instanciada.Não pode ser instanciada.

abstract

Pode ser utilizada apenas na classe externa.

(não aplicável)private

Pode ser instanciada e utilizada apenas no mesmo package.

Pode ser instanciada e utilizada apenas no mesmo package.

(sem modificador)

Pode ser utilizada apenas no mesmo package ou em subclasses da classe externa.

(não aplicável)protected

Pode ser instanciada e utilizada livremente.

Pode ser instanciada e utilizada livremente.public

Classe InternaClasse InternaClasseClasseModificadModificadoror

Page 102: Curso de Linguagem Java 2010 - Marcos Mendes

102

Modificadores de Acesso

Podem ser utilizadas a partir do nome da classe.

Podem ser invocados a partir do nome da classe.static

Constantes.Não podem ser sobrescritos.final

(não aplicável).Não podem ser definidos; sem corpo (devem ser sobrescritos).

abstract

Podem ser utilizadas apenas na classe.

Podem ser invocados apenas na classe.private

Podem ser utilizadas apenas no mesmo package.

Podem ser invocados apenas no mesmo package.

(sem modificador)

Podem ser utilizadas apenas no mesmo package ou em subclasses.

Podem ser invocados apenas no mesmo package e em subclasses.

protected

Podem ser utilizadas livremente.

Podem ser invocados livremente.public

Variáveis MembroVariáveis MembroMétodosMétodosModificadModificadoror

Page 103: Curso de Linguagem Java 2010 - Marcos Mendes

103

Instalação do IDE Livre Eclipse Baixe o Eclipse no endereço:

http://www.eclipse.org Clique no link Download EclipseDownload Eclipse; Clique em Other downloads for 3.2.1Other downloads for 3.2.1 (ou mais recente); Baixe os seguintes itens para a sua plataforma:

Platform Runtime Binary JDT Runtime Binary

Após o download, descompacte os dois arquivos na pasta raiz de seu hd.

Será criada uma pasta c:\eclipse. Crie um atalho na área de trabalho para eclipse.exe que está na pasta c:eclipse\bin.

Page 104: Curso de Linguagem Java 2010 - Marcos Mendes

104

Interface Gráfica - AWT

Page 105: Curso de Linguagem Java 2010 - Marcos Mendes

105

Pacote java.awt

DescriçãoAWT (Abstract Window Toolkit) é uma biblioteca para a programação de interface gráfica onde seus elementos dependem do sistema de interface gráfica nativo (plataforma de execução).

Containers Componentes

Gerenciadores de Layout

Cores, Desenhos e Fontes

Page 106: Curso de Linguagem Java 2010 - Marcos Mendes

106

Hierarquia AWT

Component

Container

Window

FrameDialog

FileDialog

Panel

Applet

Object

Page 107: Curso de Linguagem Java 2010 - Marcos Mendes

107

Component (java.awt.Component) Construtores

ComponentComponent ( ) Principais Métodos

void addadd ( PopupMenu menu )Adiciona um menu popup ao componente.

void paintpaint ( Graphics g )Executado toda vez que o componente precisa ser desenhado.

void removeremove ( MenuComponent menu )Remove o menu popup do componente.

void repaintrepaint ( )Redesenha o componente chamando paint()

void setBackgroundsetBackground ( Color cor )Define a cor de fundo do componente

void setBoundssetBounds ( int x, int y, int larg, int alt )Define a localização e a dimensão do coponente.

Page 108: Curso de Linguagem Java 2010 - Marcos Mendes

108

Component (java.awt.Component)

void setCursorsetCursor ( Cursor tipoCursor )Define o tipo de cursor.

void setEnablesetEnable ( boolean b )Abilita ou desabilita o componente.

void setFontsetFont ( Font tipoFonte )Define a Fonte.

void setForegroundsetForeground ( Color cor )Define a cor de frente (Fonte).

void setLocationsetLocation ( int x, int y )Define a localização dentro do container.

void setSizesetSize ( int largura, int altura )Define o tamanho.

void setVisiblesetVisible ( boolean b )Define se o componente está visível ou não.

Void updateupdate ( Graphics g )Redesenha o componente.

Page 109: Curso de Linguagem Java 2010 - Marcos Mendes

109

Container (java.awt.Container)

Construtores ContainerContainer ( )

Principais Métodos void addadd ( Component componente, int pos )

Adiciona um componente ao container. void removeremove ( Component componente )

Remove um componente do container. void removeremove ( int pos )

Remove um componente do container. void removeAllremoveAll ( )

Remove todos os componentes do container. void setLayoutsetLayout ( LayoutManager mgr )

Define o gerenciador de layout do container.

Page 110: Curso de Linguagem Java 2010 - Marcos Mendes

110

Window (java.awt.Window) Construtores

WindowWindow ( Frame aplicacao ) WindowWindow ( Window aplicacao )

Principais Métodos void disposedispose ( )

Elimina a janela. void hidehide ( )

Esconde a janela (depricado, substituido por setVisible(false)).

void packpack ( )Ajusta tamanho e posicionamento dos componentes.

void setVisiblesetVisible ( booleanboolean b)Define se a janela está visível ou não.

void showshow ( )Exibe a janela (depricado, substituido por setVisible(true) ).

Page 111: Curso de Linguagem Java 2010 - Marcos Mendes

111

Frame (java.awt.Frame) Construtores

FrameFrame ( ) FrameFrame ( String titulo )

Principais Métodos void setIconImagesetIconImage ( Image imagem )

Define um ícone para a frame. void setMenuBarsetMenuBar ( MenuBar menu )

Define uma barra de menus para a frame. void setResizablesetResizable ( boolean ajustavel )

Define se a frame pode ser redimensionada pelo usuário ou não.

void setTitlesetTitle ( String titulo )Define o título da frame.

Gerenciador de Layout default BorderLayout

Page 112: Curso de Linguagem Java 2010 - Marcos Mendes

112

Panel (java.awt.Panel)

Construtores PanelPanel ( ) PanelPanel ( LayoutManager layout )

Gerenciador de Layout default FlowLayout

Page 113: Curso de Linguagem Java 2010 - Marcos Mendes

113

Componentes AWT

Label

Button

TextField

TextArea

Checkbox

CheckboxGroup

Choice

List

Page 114: Curso de Linguagem Java 2010 - Marcos Mendes

114

Label (java.awt.Label)

Principais Campos CENTER LEFT RIGHT

Construtores LabelLabel ( ) LabelLabel ( String texto ) LabelLabel ( String texto, int alinhamento )

Page 115: Curso de Linguagem Java 2010 - Marcos Mendes

115

Label (java.awt.Label)

Principais Métodos int getAlignmentgetAlignment ( )

Retorna o alinhamento horizontal.

String getTextgetText ( )

Retorna o texto do Label.

void setAlignmentsetAlignment ( int alinhamento )

Ajusta o alinhamento horizontal.

void setTextsetText ( String texto )

Define o texto do Label.

Page 116: Curso de Linguagem Java 2010 - Marcos Mendes

116

Button (java.awt.Button)

Construtores ButtonButton ( ) ButtonButton ( String texto )

Principais Métodos void addActionListeneraddActionListener ( ActionListener l )

Adiciona um ouvinte de ação ao botão. Void addMouseListener ( MouseListener m)

Adiciona um ouvinte de mouse ao botão. String getLabelgetLabel ( )

Retorna o texto do botão. void setLabelsetLabel ( String texto )

Define o texto do botão.

Page 117: Curso de Linguagem Java 2010 - Marcos Mendes

117

TextField (java.awt.TextField) Construtores

TextFieldTextField ( ) TextFieldTextField ( int colunas ) TextFieldTextField ( String texto ) TextFieldTextField ( String texto, int colunas )

Principais Métodos int getColumnsgetColumns ( )

Retorna a quantidade de colunas visíveis. String getTextgetText ( )

Retorna o texto do componente. void setColumnssetColumns ( int colunas )

Define a quantidade de colunas visíveis. void setEditablesetEditable ( boolean b )

Define se o TextField pode ser editado ou não. void setTextsetText ( String texto )

Define o texto do componente.

Page 118: Curso de Linguagem Java 2010 - Marcos Mendes

118

TextArea (java.awt.TextArea)

Construtores TextAreaTextArea ( )

TextAreaTextArea ( int linhas, int colunas )

TextAreaTextArea ( String texto )

TextAreaTextArea ( String texto, int linhas, int

colunas )

TextAreaTextArea ( String texto, int linhas, int

colunas, int barrasDeRolagem )

Page 119: Curso de Linguagem Java 2010 - Marcos Mendes

119

TextArea (java.awt.TextArea)

Principais Métodos void appendappend ( String texto )

Acrescenta uma string ao conteúdo do texto. int getRowsgetRows ( )

Retorna a quantidade de linhas do texto. void insertinsert ( String texto, int pos )

Insere uma string ao texto. void replaceRangereplaceRange ( String texto, int inicio, int fim )

Substitui uma área do texto por uma string. void setRowssetRows ( int linhas )

Define a quantidade de linhas.

Page 120: Curso de Linguagem Java 2010 - Marcos Mendes

120

Checkbox (java.awt.Checkbox)

Construtores CheckboxCheckbox ( ) CheckboxCheckbox ( String texto) CheckboxCheckbox ( String texto, boolean estado) CheckboxCheckbox ( String texto, boolean estado,

CheckboxGroup grupo) CheckboxCheckbox ( String texto, CheckboxGroup

grupo, boolean estado)

Page 121: Curso de Linguagem Java 2010 - Marcos Mendes

121

Checkbox (java.awt.Checkbox)

Principais Métodos void addItemListeneraddItemListener ( ItemListener l )

Adiciona um ouvinte de itens à caixa. String getLabelgetLabel ( )

Retorna o texto da caixa. boolean getStategetState ( )

Retorna o estado (se está selecionada ou não). void setCheckboxGroupsetCheckboxGroup ( CheckboxGroup grupo )

Define um grupo de seleção (RadioBox). void setLabelsetLabel ( String texto )

Define o texto da caixa. void setStatesetState ( boolean estado )

Define o estado da caixa.

Page 122: Curso de Linguagem Java 2010 - Marcos Mendes

122

CheckboxGroup (java.awt.CheckboxGroup)

Construtores CheckboxGroupCheckboxGroup ( )

Principais Métodos Checkbox getSelectedCheckboxgetSelectedCheckbox ( )

Retorna o Checkbox que está selecionado.

void setSelectedCheckboxsetSelectedCheckbox ( Checkbox

item )

Seleciona um Checkbox.

Page 123: Curso de Linguagem Java 2010 - Marcos Mendes

123

Choice (java.awt.Choice)

Construtores ChoiceChoice ( )

Principais Métodos void addadd ( String item )

Adiciona um item ao menu de opções. void addItemListeneraddItemListener ( ItemListener l)

Adiciona um ouvinte de itens. String getItemgetItem ( int indice )

Retorna o rótulo do item especificado. int getItemCountgetItemCount ( )

Retorna a quantidade de itens.

Page 124: Curso de Linguagem Java 2010 - Marcos Mendes

124

Choice (java.awt.Choice)

Principais Métodos int getSelectedIndexgetSelectedIndex ( )

Retorna o índice do item selecionado. String getSelectedItemgetSelectedItem ( )

Retorna o rótulo do item selecionado. void insertinsert ( String item, int indice )

Insere um item no menu. void removeremove ( int posição ) void removeremove ( String item )

Remove um item do menu. void removeAllremoveAll ( )

Remove todos os itens do menu. void selectselect ( int posição ) void selectselect ( String item )

Seleciona um item do menu.

Page 125: Curso de Linguagem Java 2010 - Marcos Mendes

125

List (java.awt.List)

Construtores ListList ( ) ListList ( int linhas ) ListList ( int linhas, boolean seleçãoMultipla )

Principais Métodos void addadd ( String item ) void addadd ( String item, int indice )

Adiciona um item à lista. void addActionListeneraddActionListener ( ActionListener l)

Adiciona um ouvinte de ação à lista. void deselectdeselect ( int indice )

Retira a seleção de um item. String getItemgetItem ( int indice)

Retorna o rótulo de um item.

Page 126: Curso de Linguagem Java 2010 - Marcos Mendes

126

List (java.awt.List)

Principais Métodos (cont.) int getItemCountgetItemCount ( )

Retorna a quantidade de itens na lista. String [ ] getItemsgetItems ( )

Retorna os itens da lista como um array de strings. int getRowsgetRows ( )

Retorna a quantidade de linhas visíveis. int getSelectedIndexgetSelectedIndex ( ) int [ ] getSelectedIndexesgetSelectedIndexes ( )

Retorna o(s) índice(s) do(s) iten(s) selecionados. String getSelectedItemgetSelectedItem () String [ ] getSelectedItemsgetSelectedItems ()

Retorna o(s) rótulo(s) do(s) iten(s) selecionados.

Page 127: Curso de Linguagem Java 2010 - Marcos Mendes

127

List (java.awt.List)

boolean isIndexSelectedisIndexSelected ( int indice)Retorna se um item está selecionado ou não.

boolean isMultipleModeisMultipleMode ( )Retorna se a lista é de seleção múltipla ou não.

void removeremove ( int posição ) void removeremove ( String item )

Remove um item da lista. void removeAllremoveAll ( )

Remove todos os itens da lista. void replaceItemreplaceItem ( String novoItem, int indice )

Troca um item da lista. void selectselect ( int indice )

Seleciona um item da lista. void setMultipleModesetMultipleMode ( boolean b )

Define se a lista é de seleção múltipla ou não.

Page 128: Curso de Linguagem Java 2010 - Marcos Mendes

128

Interface Gráfica - JFC Swing

Page 129: Curso de Linguagem Java 2010 - Marcos Mendes

129

Pacote javax.swing Descrição

Biblioteca de componentes de interface gráfica. Possui um conjunto maior de componentes do que o AWT. Seus componentes não dependem da plataforma de execução. As aplicações java podem ter a aparência de aplicações nativas (look and feel), a aparência default é chamada de Metal.

Containers Componentes Caixas de Diálogo Menus Bordas

Page 130: Curso de Linguagem Java 2010 - Marcos Mendes

130

Diagrama de Classes Swing

Component

Container

Window

FrameJWindow

Panel

Applet

Object

JFrame JApplet

JComponent

JPanel JButton JLabel

AWT

ComponentesComponentes

SwingSwing

Page 131: Curso de Linguagem Java 2010 - Marcos Mendes

131

Containers Swing (javax.swing)

JFrame

JPanel

JEditorPane

JTabbedPane

JOptionPane

JFileChooser

JColorChooser

Page 132: Curso de Linguagem Java 2010 - Marcos Mendes

132

JFrame (javax.swing.JFrame) Construtores

JFrameJFrame ( ) JFrameJFrame ( String titulo )

Principais Métodos Container getContentPanegetContentPane ( )

Retorna a referência do painel de conteúdo. void setDefaultCloseOperationsetDefaultCloseOperation ( int operação )

Define qual operação será realizada ao fechar a frame.

void setJMenuBarsetJMenuBar ( JMenuBar menu)Define o menu da frame.

void setLayoutsetLayout ( LayoutManager gerenciador)Define o gerenciador de layout da frame.

Para adicionar um componente:frame.getContentPane.add ( componente, pos )

Page 133: Curso de Linguagem Java 2010 - Marcos Mendes

133

JFrame (javax.swing.JFrame)

void setDefaultCloseOperationsetDefaultCloseOperation ( int operação )Define a operação que deve ser executada quando o usuário fecha a frame.

O valor de operação pode ser um dos seguintes: DO_NOTHING_ON_CLOSEDO_NOTHING_ON_CLOSE (definido em

WindowConstants): Não faz nada; o programa deve controlar o fechamento através do método windowClosing.

HIDE_ON_CLOSEHIDE_ON_CLOSE (definido em WindowConstants): Automatica-mente esconde a frame.

DISPOSE_ON_CLOSEDISPOSE_ON_CLOSE (definido em WindowConstants): Automati-camente esconde e elimina a frame.

EXIT_ON_CLOSEEXIT_ON_CLOSE (definido em JFrame): Encerra a aplicação usando o método System exit.

O valor default é HIDE_ON_CLOSEHIDE_ON_CLOSE..

Page 134: Curso de Linguagem Java 2010 - Marcos Mendes

134

JFrame (javax.swing.JFrame)

import java.awt.*;import javax.swing.*;

public class TamanhoFrame extends JFrameJFrame {public TamanhoFrame() {

ToolkitToolkit tk = Toolkit.getDefaultToolkit()getDefaultToolkit();DimensionDimension d = tk.getScreenSize()getScreenSize();int largura = d.widthwidth/2;int altura = d.heightheight/2;setBounds(largura/2, altura/2, largura, altura);ImageImage img = tk.getImagegetImage("fig.gif");setIconImagesetIconImage(img);setVisible(true);

}

public static void main(String[] args) {new TamanhoFrame();

}}

Page 135: Curso de Linguagem Java 2010 - Marcos Mendes

135

Passos sugeridos para a criação de uma interface gráfica

Importe os pacotes necessários. Declare a classe como sendo derivada de JFrame. Declare os componentes como atributos da

classe. No construtor:

Defina as características da frame. Crie (instancie) os componentes com o

operador newnew. Adicione os componentes aos painéis, caso

necessário. Adicione os componentes e/ou painéis na

frame. Redimensione e exiba a frame.

Instancie a classe no método main( ).

Page 136: Curso de Linguagem Java 2010 - Marcos Mendes

136

JPanel (javax.swing.JPanel)

Principais Construtores JPanelJPanel ( ) JPanelJPanel ( LayoutManager

gerenciador )

JPanel é um container, porém, também é subclasse de JComponent.

Page 137: Curso de Linguagem Java 2010 - Marcos Mendes

137

Componentes Swing

JLabel

JButton

JToggleButton

JTextField

JTextArea

JCheckbox

ButtonGroup

JRadioButton

JList

JComboBox

Page 138: Curso de Linguagem Java 2010 - Marcos Mendes

138

JComponent ( javax.swing.JComponent )

Construtor JComponentJComponent ( )

Principais Métodos Graphics getGraphicsgetGraphics ( )

Retorna o contexto gráfico do componente. void paintComponentpaintComponent ( Graphics g )

Pinta o componente. Normalmente é sobreposto. void setBordersetBorder ( Border borda )

Define a borda do componente. void setFontsetFont ( Fonte tipo )

Define a fonte do componente. void setOpaquesetOpaque ( boolean flag )

Define se o componente é opaco ou transparente. void setToolTipTextsetToolTipText ( String dica )

Define o texto de ajuda do componente. void setVisiblesetVisible ( boolean flag )

Define se o componente está visível ou não.

Page 139: Curso de Linguagem Java 2010 - Marcos Mendes

139

JLabel ( javax.swing.JLabel )

Construtores JLabelJLabel ( ) JLabelJLabel ( Icon ícone ) JLabelJLabel ( Icon imagem, int alinhamento ) JLabelJLabel ( String texto ) JLabelJLabel ( String texto, Icon ícone, int

alinhamento ) JLabelJLabel ( String texto, int alinhamento )

Page 140: Curso de Linguagem Java 2010 - Marcos Mendes

140

JLabel ( javax.swing.JLabel )

Principais Métodos String getTextgetText ( )

Retorna o texto do label. void setHorizontalAlignmentsetHorizontalAlignment ( int alinhamento )

Define o alinhamento horizontal. void setHorizontalTextPositionsetHorizontalTextPosition ( int posição )

Define a posição do texto em relação à imagem. void setIconsetIcon ( Icon ícone )

Define uma imagem para o label void setTextsetText ( String texto )

Define o texto do label void setVerticalAlignmentsetVerticalAlignment ( int alinhamento )

Define o alinhamento vertical. void setVerticalTextPositionsetVerticalTextPosition ( int posição )

Define a posição do texto em relação à imagem.

Page 141: Curso de Linguagem Java 2010 - Marcos Mendes

141

JButton ( javax.swing.JButton )

Construtores

JButtonJButton ( )

JButtonJButton ( Icon ícone )

JButtonJButton ( String texto)

JButtonJButton ( String texto, Icon ícone)

Page 142: Curso de Linguagem Java 2010 - Marcos Mendes

142

JButton ( javax.swing.JButton ) Principais Métodos (AbstractButton)

void addActionListeneraddActionListener ( ActionListener l )Adiciona um ouvinte de ação para o componente.

String getTextgetText ( )Retorna o texto do componente.

void setEnablesetEnable ( boolean estado )Define se o componente está ativado.

void setHorizontalAlignmentsetHorizontalAlignment ( int alinhamento )Define o alinhamento horizontal do texto.

void setHorizontalPositionsetHorizontalPosition ( int posição )Define a posição do texto em relação à imagem.

void setIconsetIcon ( Icon ícone )Define uma imagem para o componente.

Page 143: Curso de Linguagem Java 2010 - Marcos Mendes

143

JButton ( javax.swing.JButton )

void setPressedIconsetPressedIcon ( Icon ícone )Define a imagem que será exibida quando o componente for pressionado.

void setRolloverEnabledsetRolloverEnabled ( boolean estado )Define se o efeito rollover está ativado ou não.

void setRolloverIconsetRolloverIcon ( Icon ícone )Define a imagem que será exibida quando o mouse passar por cima do componente.

void setTextsetText ( String texto )Define o texto do componente.

void setVerticalAlignmentsetVerticalAlignment ( int alinhamento )Define o alinhamento vertical do texto.

void setVerticalPositionsetVerticalPosition ( int posição )Define a posição do texto em relação à imagem.

Page 144: Curso de Linguagem Java 2010 - Marcos Mendes

144

JTextField ( javax.swing.JTextField )

Principais Construtores

JTextFieldJTextField ( )

JTextFieldJTextField ( int colunas )

JTextFieldJTextField ( String texto )

JTextFieldJTextField ( String texto, int

colunas )

Page 145: Curso de Linguagem Java 2010 - Marcos Mendes

145

JTextField ( javax.swing.JTextField ) Principais Métodos

void addActionListeneraddActionListener ( ActionListener l )Adiciona um ouvinte de ação para o componente.

String getSelectedTextgetSelectedText ( )Retorna o texto selecionado.

int getSelectionEndgetSelectionEnd ( )Retorna a posição final da seleção.

int getSelectionStartgetSelectionStart ( )Retorna a posição inicial da seleção.

String getTextgetText ( ) String getTextgetText ( int posição, int tamanho )

Retorna o texto do componente. bollean isEditableisEditable ( )

Informa se o componente pode ser editado.

Page 146: Curso de Linguagem Java 2010 - Marcos Mendes

146

JTextField ( javax.swing.JTextField )

void replaceSelectionreplaceSelection ( String texto )Troca o texto selecionado.

void selectselect ( int início, int final )Seleciona uma parte do texto.

void selectAllselectAll ( )Seleciona todo o texto.

void setColumnssetColumns ( int colunas )Define a quantidade de colunas do componente.

void setEditablesetEditable ( boolean b ) Define se o componente poderá ser editado.

void setFontsetFont ( Font f )Define o tipo de fonte do componente.

void setHorizontalAlignmentsetHorizontalAlignment ( int alinhamento )Define o alinhamento horizontal do texto.

void setTextsetText ( String texto )Define o texto do componente.

Page 147: Curso de Linguagem Java 2010 - Marcos Mendes

147

Exemplo de Interface Gráficaimport javax.swing.*;public class ExemploGUI extends JFrame {

JButton btnNorte, btnSul, btnOeste, btnCentro, btnLeste;public ExemploGUI() {

btnNorte = new JButton("Norte");btnSul = new JButton("Sul");btnOeste = new JButton("Oeste");btnCentro = new JButton("Centro");btnLeste = new JButton("Leste");add(btnNorte, "North");add(btnSul, "South");add(btnOeste, "West");add(btnCentro, "Center");add(btnLeste, "East");pack();setVisible( true );

}public static void main(String args[]) {

new ExemploGUI();}

}

Page 148: Curso de Linguagem Java 2010 - Marcos Mendes

148

Exemplo de Componentes Swing

import java.awt.*;import javax.swing.*;javax.swing.*;

class BotaoFrame extends JFrameJFrame {JButtonJButton btn;public BotaoFrame ( ) {

setTitle ("Oi Tudo Bem" );setSize (300, 200);btn = new JButton ("Botão Norte" );btn.setIcon ( new ImageIcon ("figura.gif") );btn.setToolTipText ("Ativa comando" );btn.setMnemonic ( ‘B’ );addadd ( btn, "North" );setVisible( true );

}}

Page 149: Curso de Linguagem Java 2010 - Marcos Mendes

149

Gerenciadores de Layout Um container utiliza algo chamado

Gerenciador de Layout para controlar o posicionamento e dimensionamento de seus componentes. Alguns desses gerenciadores são descritos a seguir: BorderLayout FlowLayout GridLayout GridBagLayout

Page 150: Curso de Linguagem Java 2010 - Marcos Mendes

150

BorderLayout (java.awt.BorderLayout)

North

South

CenterWest East

Page 151: Curso de Linguagem Java 2010 - Marcos Mendes

151

BorderLayout (java.awt.BorderLayout)

Construtores BorderLayoutBorderLayout ( ) BorderLayoutBorderLayout ( int hgap, int vgap )

Principais Campos CENTER “Center” EAST “East” NORTH “North” SOUTH “South” WEST “West”

Principais Métodos void setHgapsetHgap ( int hgap )

Define o espaço horizontal entre as áreas. void setVgapsetVgap ( int vgap )

Define o espaço vertical entre as áreas.

Page 152: Curso de Linguagem Java 2010 - Marcos Mendes

152

FlowLayout (java.awt.FlowLayout)

Page 153: Curso de Linguagem Java 2010 - Marcos Mendes

153

FlowLayout (java.awt.FlowLayout)

Construtores FlowLayoutFlowLayout ( ) FlowLayoutFlowLayout ( int alinhamento ) FlowLayoutFlowLayout (int alinhamento, int hgap, int vgap )

Principais Campos (alinhamento) CENTER LEFT RIGHT

Principais Métodos void setAlignmentsetAlignment ( int alinhamento )

Define o alinhamento horizontal dos componentes. void setHgapsetHgap ( int hgap )

Define o espaço horizontal entre os componentes. void setVgapsetVgap ( int vgap )

Define o espaço vertical entre os componentes.

Page 154: Curso de Linguagem Java 2010 - Marcos Mendes

154

GridLayout (java.awt.GridLayout)

Page 155: Curso de Linguagem Java 2010 - Marcos Mendes

155

GridLayout (java.awt.GridLayout)

Construtores GridLayoutGridLayout ( ) GridLayoutGridLayout ( int rows, int cols ) GridLayoutGridLayout (int rows,int cols, int hgap,int vgap )

Principais Métodos void setColumnssetColumns ( int cols )

Define a quantidade de colunas da grade. void setHgapsetHgap ( int hgap )

Define o espaço horizontal entre as células. void setRowssetRows ( int rows )

Define a quantidade de linhas da grade. void setVgapsetVgap ( int vgap )

Define o espaço vertical entre as células.

Page 156: Curso de Linguagem Java 2010 - Marcos Mendes

156

GridBagLayout (java.awt.GridBagLayout)

Page 157: Curso de Linguagem Java 2010 - Marcos Mendes

157

GridBagLayout (java.awt.GridBagLayout)

Construtor GridBagLayoutGridBagLayout ( )

UtilizaçãoGridBagLayoutGridBagLayout gbl = new GridBagLayout( );

painel.setLayout (gbl);

GridBagConstraintsGridBagConstraints gbc = new GridBagConstraints( );gbc.weightx = 100; gbc.weighty = 100; // pesopesogbc.gridx = 0; gbc.gridy = 0; // posiçãoposiçãogbc.gridwidth = 1; gbc.gridheight = 3; // tamanhotamanhopainel.add ( componente, gbc );

Page 158: Curso de Linguagem Java 2010 - Marcos Mendes

158

GridBagConstraints (java.awt.GridBagConstraints)

Construtores GridBagConstraintsGridBagConstraints ( )

GridBagConstraintsGridBagConstraints (intint gridx, intint gridy,

intint gridwidth, intint gridheight, doubledouble

weightx, doubledouble weighty, intint anchor, intint

fill, InsetsInsets insets, int ipadx, intint ipady )

Page 159: Curso de Linguagem Java 2010 - Marcos Mendes

159

GridBagConstraints (java.awt.GridBagConstraints)

Principais Campos fill gridx gridy gridheight gridwidth anchor weightx weighty insets ipadx ipady

BOTH HORIZONTAL NONENONE VERTICAL

RELATIVE

REMAINDER

CENTERCENTER, EAST, NORTH, NORTHEAST, NORTHWEST, SOUTH, SOUTHEAST, SOUTHWEST, WEST

Page 160: Curso de Linguagem Java 2010 - Marcos Mendes

160

Exemplo de GridBagLayoutimport java.awt.*;import javax.swing.*;

public class ExemploGBL extends JFrame {JButton btnNorte, btnEsq1, btnEsq2, btnEsq3, btnCentro;

public ExemploGBL() {setLayout (new GridBagLayout( ));setLayout (new GridBagLayout( ));GridBagConstraints gbc = new GridBagConstraints gbc = new

GridBagConstraints( );GridBagConstraints( );btnNorte = new JButton("Norte");btnNorte = new JButton("Norte");gbc.weightx = 30; gbc.weighty = 30; // pesogbc.gridx = 0; gbc.gridy = 0; // posiçãogbc.gridwidth = 3; gbc.gridheight = 1; // tamanhogbc.fill = GridBagConstraints.BOTH; // preenchimentoadd (btnNorte, gbc);btnEsq1 = new JButton("Esquerdo 1");btnEsq1 = new JButton("Esquerdo 1");gbc.gridx = 0; gbc.gridy = 1; // posiçãogbc.gridwidth = 1; gbc.gridheight = 1; // tamanhoadd(btnEsq1, gbc);

Page 161: Curso de Linguagem Java 2010 - Marcos Mendes

161

Exemplo de GridBagLayout

btnEsq2 = new JButton("Esquerdo 2");btnEsq2 = new JButton("Esquerdo 2");gbc.gridx = 0; gbc.gridy = 2; // posiçãoadd(btnEsq2, gbc);btnEsq3 = new JButton("Esquerdo 3");btnEsq3 = new JButton("Esquerdo 3");gbc.gridx = 0; gbc.gridy = 3; // posiçãoadd(btnEsq3, gbc);btnCentro = new JButton("Posição Central");btnCentro = new JButton("Posição Central");gbc.weightx = 100; gbc.weighty = 100; // pesogbc.gridx = 1; gbc.gridy = 1; // posiçãogbc.gridwidth = 2; gbc.gridheight = 3; // tamanhoadd(btnCentro, gbc);pack();setBounds(100, 50, 300, 200);setVisible(true);

}public static void main(String args[]) {

new ExemploGBL();}

}

Page 162: Curso de Linguagem Java 2010 - Marcos Mendes

162

Modificando o Layout dos containers

Para alterar o gerenciador de layout de um container, você invoca o método setLayout( ) com uma instância do gerenciador de layout desejado. Normalmente a chamada deste método ocorre no construtor da classe.

...

setLayout( new FlowLayout( ) );setLayout( new FlowLayout( ) );...

Quando utilizado o gerenciador de layout GridBagLayout, deve-se definir um constraints para cada componente.

Page 163: Curso de Linguagem Java 2010 - Marcos Mendes

163

Agrupando componentes em paineis Uma forma de se adicionar vários componentes

em uma única área do layout é agrupando esses componentes em painéis, aí então adicionamos o painel na posição desejada.

Anterior

Próximo

Sair

Page 164: Curso de Linguagem Java 2010 - Marcos Mendes

164

Agrupando componentes em paineisimport javax.swing.*;

public class Paineis extends JFrame {JButton btn1, btn2, btn3;JPanel p;public Paineis() {

btn1 = new JButton("Botão 1");btn2 = new JButton("Botão 2");btn3 = new JButton("Botão 3");p = new JPanel();p.add(btn1);p.add(btn2);p.add(btn3);add(p, "South");setBounds(100, 50, 200, 300);setVisible( true );

}public static void main(String args[]) {

new Paineis();}

}

Page 165: Curso de Linguagem Java 2010 - Marcos Mendes

165

Exercício proposto Crie a seguinte interface:

Anterior

Próximo

Sair

Agenda Pessoal

Nome:

Endereço:

Telefone:

Page 166: Curso de Linguagem Java 2010 - Marcos Mendes

166

Exercício Programa de Cálculos

Programa de Cálculos

Número:

Par / Ímpar Fatorial

Primo Perfeito

___________Resultado:

Page 167: Curso de Linguagem Java 2010 - Marcos Mendes

167

Criação de um Painel com TítuloCriação de um Painel com TítuloJPanel p = new JPanel ( new GridLayout(linhas, colunas) );TitledBorder titulo =

BorderFactory.createTitledBorder("Título");p.setBorder(titulo);

Outros métodos da classe BorderFactory para criação de bordas:

createLineBorder ( )Borda de linha simples

createMatteBorder ( )Borda larga preenchida com uma cor ou ícone repetido.

createEmptyBorder ( )Borda vazia

createEtechedBorder ( )Borda de linha com efeito 3D.

createBevelBorder( ) createLoweredBevelBorder ( ) createRaisedBevelBorder ( )

Bordas com efeito de superfície em relevo.

Page 168: Curso de Linguagem Java 2010 - Marcos Mendes

168

JCheckBox ( javax.swing.JCheckBox )

Alguns Construtores

JCheckBoxJCheckBox ( )

JCheckBoxJCheckBox ( String texto )

JCheckBoxJCheckBox ( String texto, boolean

estado )

Page 169: Curso de Linguagem Java 2010 - Marcos Mendes

169

JCheckBox ( javax.swing.JCheckBox ) Alguns Métodos

boolean isSelectedisSelected ( )Retorna true se o componente estiver selecionado.

void setSelectedsetSelected ( boolean estado )Define o estado do componente.

String getTextgetText ( )Retorna o rótulo do componente.

void setTextsetText ( String texo )Define o rótulo do componente.

void setActionCommandsetActionCommand ( String texto)Define o texto de ação de commando do componente.

void addAcitonListeneraddAcitonListener ( ActionListener a ) void addItemListeneraddItemListener ( ItemListener i )

Page 170: Curso de Linguagem Java 2010 - Marcos Mendes

170

Exemplo com JCheckBoximport javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*;public class ExemploJCheckBox extends JFrame implements ActionListener {

JCheckBox chkProgramacao, chkBancoDados, chkAnalise;JButton btn;public ExemploJCheckBox() {

chkProgramacao = new JCheckBox("Programação");chkBancoDados = new JCheckBox("Banco de Dados");chkAnalise = new JCheckBox("Análise de Sistemas");btn = new JButton("krikaki");btn.addActionListener(this);JPanel p = new JPanel(new GridLayout(3,1));TitledBorder titulo = BorderFactory.createTitledBorder("Assunto");p.setBorder(titulo);p.add(chkProgramacao);p.add(chkBancoDados);p.add(chkAnalise);add(p, "Center");add(btn, "South");pack();setVisible(true);

}

Page 171: Curso de Linguagem Java 2010 - Marcos Mendes

171

Exemplo com JCheckBoxpublic void actionPerformed(ActionEvent evt) {

String resp = "";boolean nada = true;if (chkProgramacao.isSelected()) {

resp = chkProgramacao.getText();nada = false;

}if (chkBancoDados.isSelected()) {

resp += "\n" + chkBancoDados.getText();nada = false;

}if (chkAnalise.isSelected()) {

resp += "\n" + chkAnalise.getText();nada = false;

}if (nada) {

JOptionPane.showMessageDialog(null, "Nenhum Assunto");} else

JOptionPane.showMessageDialog(null, resp);}public static void main(String[] args) {

new ExemploJCheckBox();}

}

Page 172: Curso de Linguagem Java 2010 - Marcos Mendes

172

JRadioButton ( javax.swing.JRadioButton )

Alguns Construtores

JRadioButtonJRadioButton ( )

JRadioButtonJRadioButton ( String texto )

JRadioButtonJRadioButton ( String texto,

boolean estado )

Page 173: Curso de Linguagem Java 2010 - Marcos Mendes

173

JRadioButtonRadioButton ( javax.swing.JRadioButton )

Alguns Métodos boolean isSelectedisSelected ( )

Retorna true se o componente estiver selecionado. void setSelectedsetSelected ( boolean estado )

Define o estado do componente. String getTextgetText ( )

Retorna o rótulo do componente. void setTextsetText ( String texo )

Define o rótulo do componente. void setActionCommandsetActionCommand ( String texto)

Define o texto de ação de commando do componente. void addAcitonListeneraddAcitonListener ( ActionListener a ) void addItemListeneraddItemListener ( ItemListener i )

Page 174: Curso de Linguagem Java 2010 - Marcos Mendes

174

ButtonGroupButtonGroup ( javax.swing.ButtonGroup ) Utilizado para agrupar JRadioButton's

Construtor ButtonGroup ( )

Alguns Métodos void addadd ( AbstractButton b )

Adiciona um botão no grupo. void clearSelectionclearSelection ( )

Limpa a seleção no grupo. String getSelection.getActionCommandgetSelection.getActionCommand ( )

Retorna o texto de ação de comando do componente selecionado.

Page 175: Curso de Linguagem Java 2010 - Marcos Mendes

175

Exemplo com JRadioButtonimport javax.swing.*;import javax.swing.border.*;import java.awt.*;import java.awt.event.*;

public class ExemploJRadioButton extends JFrame implements ActionListener {JRadioButton rbMasc, rbFem;JButton btn;ButtonGroup bgSexo;

public ExemploJRadioButton() {rbMasc = new JRadioButton("Masc.", true);rbMasc.setActionCommand("Masculino");rbFem = new JRadioButton("Fem.");rbFem.setActionCommand("Feminino");

bgSexo = new ButtonGroup();bgSexo.add(rbMasc);bgSexo.add(rbFem);

btn = new JButton("krikaki");btn.addActionListener(this);

Page 176: Curso de Linguagem Java 2010 - Marcos Mendes

176

Exemplo com JRadioButtonJPanel p = new JPanel(new GridLayout(3,1));TitledBorder titulo = BorderFactory.createTitledBorder("Sexo");p.setBorder(titulo);p.add(rbMasc);p.add(rbFem);

add(p, "Center");add(btn, "South");pack();setVisible(true);

}public void actionPerformed(ActionEvent evt) {

String resp = bgSexo.getSelection().getActionCommand();JOptionPane.showMessageDialog(null, resp);

}public static void main(String[] args) {

new ExemploJRadioButton();}

}

Page 177: Curso de Linguagem Java 2010 - Marcos Mendes

177

JListJList (javax.swing.JList) Alguns Construtores

JList ( ) JList ( Object[] elementos ) JList ( ListModel modelo )

Alguns Métodos int getSelectedIndexgetSelectedIndex ( )

retorna o índice do primeiro elemento selecionado. int [ ] getSelectedIndicesgetSelectedIndices ( )

retorna um array com os índices de todos os elementos selecionados.

Object getSelectedValuegetSelectedValue ( )Retorna o primeiro elemento selecionado.

Object [ ] getSelectedValuesgetSelectedValues ( )Retorna um array com todos os elementos selecionados.

void clearSelectionclearSelection ( )Limpa a seleção dos elementos.

ListModel getModelgetModel ( )Retorna o modelo de dados da lista.

void setListDatasetListData ( Object [ ] elementos )Cria um ListModel através do array e o aplica à lista.

Page 178: Curso de Linguagem Java 2010 - Marcos Mendes

178

JListJList (javax.swing.JList) boolean isSelectedIndexisSelectedIndex ( int índice )

retorna true se o elemento estiver selecionado. boolean isSelectionEmptyisSelectionEmpty ( )

retorna true se não houver nenhum elemento selecionado.

void setVisibleRowCountsetVisibleRowCount (int qtd)Define a quantidade de elementos exibidos.

void setSelectedIndexsetSelectedIndex ( int índice )Seleciona um elemento.

void setSelectedIndicessetSelectedIndices ( int [] índices )Seleciona todos os elementos indicados no array.

void setSelectionModesetSelectionMode ( int modo)Define o modo de seleção, modo pode ser:

ListSelectionModel.SINGLE_SELECTION ListSelectionModel.SINGLE_INTERVAL_SELECTION ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

Page 179: Curso de Linguagem Java 2010 - Marcos Mendes

179

DefaultListModelDefaultListModel (javax.swing.DefaultListModel)

Construtor DefaultListModel ( )

Alguns Métodos void addElementaddElement ( Object elemento )

Adiciona um elemento ao final da lista. void clearclear ( )

Remove todos os elementos da lista. Object getElementAtgetElementAt ( int índice )

Retorna o elemento especificado. int getSizegetSize ( )

Retorna o número de elementos na lista. boolean isEmptyisEmpty ( )

Retorna true se a lista estiver vazia. Object removeremove ( int índice )

Remove um elemento de índice especificado.

Page 180: Curso de Linguagem Java 2010 - Marcos Mendes

180

Exemplo JListExemplo JListimport javax.swing.*;import java.awt.event.*;

public class ExemploJList extends JFrame implements ActionListener {JList lista;DefaultListModel modelo;JButton btn;

public ExemploJList() {String dados[] = {"JavaSE", "JavaEE", "JavaME"};modelo = new DefaultListModel();for (String texto:dados) {

modelo.addElement(texto);}

// No lugar do for, você pode usar: // lista.setListData(dados);

lista = new JList(modelo);

lista.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

JScrollPane sp = new JScrollPane(lista);add(sp, "Center");

Page 181: Curso de Linguagem Java 2010 - Marcos Mendes

181

Exemplo JListExemplo JListbtn = new JButton("krikaki");btn.addActionListener(this);add(btn, "South");

pack();setVisible(true);

}public void actionPerformed(ActionEvent evt) {

Object selecionados[] = lista.getSelectedValues();for (Object texto:selecionados) {

System.out.println(texto);}

}public static void main(String[] args) {

new ExemploJList();}

}

Page 182: Curso de Linguagem Java 2010 - Marcos Mendes

182

JComboBoxJComboBox (javax.swing.JComboBox) Alguns Construtores

JComboBox ( ) JComboBox ( Object[] elementos ) JComboBox ( ComboBoxModel modelo )

Alguns Métodos int getSelectedIndexgetSelectedIndex ( )

Retorna o índice do primeiro elemento selecionado. Object getSelectedItemgetSelectedItem ( )

Retorna o primeiro elemento selecionado. void addItemaddItem ( Object elemento )

Adiciona um item na lista. void removeAllItemsremoveAllItems ( )

Remove todos os elementos da lista. void setMaximumRowCountsetMaximumRowCount ( int qtdLinhas)

Define o número máximo de linhas a ser exibido. void setSelectedIndexsetSelectedIndex ( int índice )

Seleciona um determinado elemento. ComboBoxModel getModelgetModel ( )

Retorna o modelo da lista.

Page 183: Curso de Linguagem Java 2010 - Marcos Mendes

183

DefaultComboBoxModelDefaultComboBoxModel(javax.swing.DefaultComboBoxModel)

Alguns Construtores DefaultComboBoxModel ( ) DefaultComboBoxModel ( Object [] elementos)

Alguns Métodos void addElementaddElement ( Object elemento )

Adiciona um elemento ao final da lista. Object getElementAtgetElementAt ( int índice )

Retorna o elemento especificado. int getSizegetSize ( )

Retorna o número de elementos na lista. void removeAllElementsremoveAllElements ( )

Remove todos os elementos da lista. Object removeElementAtremoveElementAt ( int índice )

Remove um elemento de índice especificado.

Page 184: Curso de Linguagem Java 2010 - Marcos Mendes

184

Exemplo JComboBoxExemplo JComboBoximport javax.swing.*;import java.awt.event.*;

public class ExemploJComboBox extends JFrame implements ActionListener {JComboBox combo;JButton btn;

public ExemploJComboBox() {String dados[] = {"JavaSE", "JavaEE", "JavaME"};combo = new JComboBox(dados);combo.addItem("Todas");combo.setSelectedIndex(3);combo.setMaximumRowCount(2);add(combo, "Center");

btn = new JButton("krikaki");btn.addActionListener(this);add(btn, "South");

Page 185: Curso de Linguagem Java 2010 - Marcos Mendes

185

Exemplo JComboBoxExemplo JComboBoxpack();setVisible(true);

}public void actionPerformed(ActionEvent evt) {

Object selecionado = combo.getSelectedItem();JOptionPane.showMessageDialog(null, selecionado);

}public static void main(String[] args) {

new ExemploJComboBox();}

}

Page 186: Curso de Linguagem Java 2010 - Marcos Mendes

186

JTable JTable (javax.swing.JTable)

Alguns Construtores JTable ( ) JTable ( Object [] [] dados, Object [] nomeColunas ) JTable ( TableModel modelo )

Alguns Métodos TableModel getModelgetModel ( )

Retorna o TableModel da tabela. int getRowCountgetRowCount ( )

Retorna a quantidade de linhas no modelo da tabela. int getSelectedColumngetSelectedColumn ( )

Retorna o índice da coluna selecionada, -1 se nenhuma coluna estiver selecionada. int getSelectedRowgetSelectedRow ( )

Retorna o índice da linha selecionada, -1 se nenhuma linha estiver selecionada. int [ ] getSelectedRowsgetSelectedRows ( )

Retorna um array contendo os índices de todas as linha selecionadas. int getSelectedRowCountgetSelectedRowCount ( )

Retorna a quantidade de linhas selecionadas. Object getValueAtgetValueAt (int linha, int coluna )

Retorna o valor de uma célula. void setValueAtsetValueAt ( Object valor, int linha, int coluna )

Define o valor de uma célula.

Page 187: Curso de Linguagem Java 2010 - Marcos Mendes

187

DefaultTableModelDefaultTableModel

(javax.swing.table.DefaultTableModel)

Alguns Construtores DefaultTableModel ( ) DefaultTableModel ( int linhas, int colunas ) DefaultTableModel ( Object [] [] dados, Object []

nomeColunas )

Alguns Métodos void addRowaddRow ( Object [] linha )

Adiciona uma linha no final do modelo da tabela. int getColumnCountgetColumnCount ( )

Retorna a quantidade de colunas do modelo da tabela. int getRowCountgetRowCount ( )

Retorna a quantidade de linhas do modelo da tabela. Object getValueAtgetValueAt (int linha, int coluna )

Retorna o valor de uma célula. void insertRowinsertRow ( int índice, Object [] linha )

Insere uma linha no modelo da tabela. void removeRowremoveRow ( int índice )

Remove uma linha no modelo da tabela. void setValueAtsetValueAt ( Object valor, int linha, int coluna )

Define o valor de uma célula.

Page 188: Curso de Linguagem Java 2010 - Marcos Mendes

188

Exemplo JTableExemplo JTableimport javax.swing.*;import javax.swing.table.*;import java.awt.event.*;public class ExemploJTable extends JFrame implements ActionListener {

JTable tabela;DefaultTableModel modelo;JButton btn;public ExemploJTable() {

String colunas[] = {"Nome", "Endereço", "Telefone"};String dados[][] = { {"João", "Rua Tal", "4444"}, {"Maria", "Av Tal",

"3333"} };modelo = new DefaultTableModel(dados, colunas);tabela = new JTable(modelo);JScrollPane sp = new JScrollPane(tabela);add(sp, "Center");

btn = new JButton("krikaki");btn.addActionListener(this);add(btn, "South");pack();setVisible(true);

}

Page 189: Curso de Linguagem Java 2010 - Marcos Mendes

189

Exemplo JTableExemplo JTablepublic void actionPerformed(ActionEvent evt) {

int linha = tabela.getSelectedRow();int coluna = tabela.getSelectedColumn();if (linha != -1 && coluna != -1) {

String dado = (String) tabela.getValueAt(linha, coluna);JOptionPane.showMessageDialog(this, dado);

} else {JOptionPane.showMessageDialog(this, "Nenhuma célula selecionada");

}}public static void main(String[] args) {

new ExemploJTable();}

}

Page 190: Curso de Linguagem Java 2010 - Marcos Mendes

190

Exemplo JTable usando um Exemplo JTable usando um ResultSetResultSet

import java.sql.*;import javax.swing.*;

public class ExemploDBGrid extends JFrame {JTable tabela;DBGridModel modelo;Connection con;ResultSet rs;public ExemploDBGrid( ) {

try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/uniban";con = DriverManager.getConnection(url, "root", "admin");Statement st =

con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

rs = st.executeQuery("Select * from Cliente order by Nome");} catch (Exception ex) {

ex.printStackTrace( );}

Classe Principalonde a tabela é

criada

Page 191: Curso de Linguagem Java 2010 - Marcos Mendes

191

Exemplo JTable usando um Exemplo JTable usando um ResultSetResultSet

modelo = new DBGridModel(rs);tabela = new JTable(modelo);JScrollPane sp = new JScrollPane(tabela);add(sp, "Center");

pack();setVisible(true);

}public static void main(String[] args) {

new ExemploDBGrid();}

}

Page 192: Curso de Linguagem Java 2010 - Marcos Mendes

192

Exemplo JTable usando um Exemplo JTable usando um ResultSetResultSet

import javax.swing.table.*;import java.sql.*;public class DBGridModel extends AbstractTableModel {

private ResultSet rs;private ResultSetMetaData estrutura; public DBGridModel(ResultSet rs) {

this.rs = rs;try {

estrutura = rs.getMetaData();rs.first();

} catch (SQLException e) {e.printStackTrace();

}}public int getColumnCount() {

int qtdColunas = 0;try {

qtdColunas = estrutura.getColumnCount();} catch (SQLException e) {

e.printStackTrace();}return qtdColunas;

}

Classe que Implementa osmétodos obrigatórios

de AbstractTableModel

Page 193: Curso de Linguagem Java 2010 - Marcos Mendes

193

Exemplo JTable usando um Exemplo JTable usando um ResultSetResultSet

public int getRowCount() {int qtdLinhas = 0;try {

rs.last();qtdLinhas = rs.getRow();

} catch (SQLException e) {e.printStackTrace();

}return qtdLinhas;

}public Object getValueAt(int linha, int coluna) {

Object valor = null;try {

rs.absolute(linha + 1);valor = rs.getObject(coluna + 1);

} catch (SQLException e) {e.printStackTrace();

}return valor;

}}

Page 194: Curso de Linguagem Java 2010 - Marcos Mendes

194

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

import java.sql.*;import javax.swing.*;import java.awt.event.*;

public class ExemploDBGridRW extends JFrame implements ActionListener {JTable tabela;DBGridModelRW modelo;Connection con;ResultSet rs;

JButton btnIncluir, btnExcluir;

public ExemploDBGridRW() {try {

Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/uniban";con = DriverManager.getConnection(url, "root", "admin");Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);rs = st.executeQuery("Select * from Cliente");

} catch (Exception ex) {ex.printStackTrace();

}

Classe Principalonde a tabela é

criada

Page 195: Curso de Linguagem Java 2010 - Marcos Mendes

195

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

modelo = new DBGridModelRW(rs);tabela = new JTable(modelo);JScrollPane sp = new JScrollPane(tabela);add(sp, "Center");

btnIncluir = new JButton("Incluir");btnIncluir.addActionListener(this);btnExcluir = new JButton("Excluir");btnExcluir.addActionListener(this);JPanel pBtn = new JPanel();pBtn.add(btnIncluir);pBtn.add(btnExcluir);add(pBtn, "South");

pack();setVisible(true);

}

Page 196: Curso de Linguagem Java 2010 - Marcos Mendes

196

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

public void actionPerformed(ActionEvent evt) {Object btn = evt.getSource();if (btn == btnIncluir) {

Object dados[] = new Object[5];dados[0] = JOptionPane.showInputDialog("Qual o nome?");dados[1] = JOptionPane.showInputDialog("Qual o sexo?");dados[2] = JOptionPane.showInputDialog("Qual a data?");dados[3] = JOptionPane.showInputDialog("Qual o estado?");dados[4] = new Boolean(JOptionPane.showInputDialog("Está ativo?"));modelo.addRow(dados);

} else if (btn == btnExcluir) {if (tabela.getSelectedRowCount() == 0) { JOptionPane.showMessageDialog(this, "Não há linhas selecionadas");} else {

int linhas[] = tabela.getSelectedRows();for (int cont = linhas.length - 1; cont >= 0; cont--) {

modelo.removeRow(linhas[cont]);}

}}

}public static void main(String[] args) {

new ExemploDBGridRW();}

}

Page 197: Curso de Linguagem Java 2010 - Marcos Mendes

197

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

import javax.swing.table.*;import java.sql.*;

public class DBGridModelRW extends AbstractTableModel {private ResultSet rs;private ResultSetMetaData estrutura;

public DBGridModelRW(ResultSet rs) {this.rs = rs;try {

estrutura = rs.getMetaData();rs.first();

} catch (SQLException e) {e.printStackTrace();

}}public int getColumnCount() {

int qtdColunas = 0;try {

qtdColunas = estrutura.getColumnCount();} catch (SQLException e) {

e.printStackTrace();}return qtdColunas;

}

Classe que Implementa osmétodos obrigatórios

de AbstractTableModel

Page 198: Curso de Linguagem Java 2010 - Marcos Mendes

198

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

public int getRowCount() {int qtdLinhas = 0;int linhaCorrente = 1;try {

linhaCorrente = rs.getRow();rs.last();qtdLinhas = rs.getRow();if (linhaCorrente > 0) {

rs.absolute(linhaCorrente);}

} catch (SQLException e) {e.printStackTrace();

}return qtdLinhas;

}

public Object getValueAt(int linha, int coluna) {Object valor = null;try {

rs.absolute(linha + 1);valor = rs.getObject(coluna + 1);

} catch (SQLException e) {e.printStackTrace();

}return valor;

}

Page 199: Curso de Linguagem Java 2010 - Marcos Mendes

199

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

public String getColumnName(int coluna) {String nomeColuna = "";try {

nomeColuna = estrutura.getColumnName(coluna + 1);} catch (SQLException e) {

e.printStackTrace();}return nomeColuna;

}public void setValueAt(Object value, int linha, int coluna) {

try {rs.absolute(linha + 1);rs.updateObject(coluna + 1, value);rs.updateRow();

} catch (SQLException e) {e.printStackTrace();

}}public boolean isCellEditable(int linha, int coluna) {

//Coluna Id não deve ser editávelif (coluna == 0) {

return false;}return true;

}

Page 200: Curso de Linguagem Java 2010 - Marcos Mendes

200

Exemplo JTable ResultSet Exemplo JTable ResultSet AtualizávelAtualizável

public void addRow(Object[] linha) {try {

rs.moveToInsertRow();for (int cont = 0; cont < linha.length; cont++) {

rs.updateObject(cont + 2, linha[cont]);}rs.insertRow();//Atualiza a tabelafireTableDataChanged();

} catch (SQLException e) {e.printStackTrace();

}}public void removeRow(int linha) {

try {rs.absolute(linha + 1);rs.deleteRow();//Atualiza a tabelafireTableRowsDeleted(linha, linha);

} catch (SQLException e) {e.printStackTrace();

}}

}

Page 201: Curso de Linguagem Java 2010 - Marcos Mendes

201

Cores, Desenhos e Fontes

Color

Graphics

Font / FontMetrics

Page 202: Curso de Linguagem Java 2010 - Marcos Mendes

202

Color (java.awt.Color)

Principais Construtores ColorColor ( float r, float g, float b ) ColorColor ( float r, float g, float b, float a )

ColorColor ( int r, int g, int b ) ColorColor ( int r, int g, int b, int a )

ColorColor ( int rgb ) ColorColor ( int rgb, boolean hasalpha )

bits: 24-31=alpha; 16-23=red;8-15=green; 0-7=blue

Valores entre

0.0f e 1.0fValores entre

0 e 255

Page 203: Curso de Linguagem Java 2010 - Marcos Mendes

203

Color (java.awt.Color)

Principais Campos

yellow255, 255, 0

white255, 255, 255

redred255, 0, 0255, 0, 0

pinkpink255, 175, 255, 175, 175175

orangeorange255, 200, 0255, 200, 0

magentamagenta255, 0, 255255, 0, 255

lightGray192, 192, 192

greengreen0, 255, 00, 255, 0

graygray128, 128, 128, 128, 128128

darkGraydarkGray64, 64, 6464, 64, 64

cyan0, 255, 255

blueblue0, 0, 2550, 0, 255

blackblack0, 0, 00, 0, 0

Page 204: Curso de Linguagem Java 2010 - Marcos Mendes

204

Color (java.awt.Color)

Principais Métodos Color brighterbrighter ( )

Cria uma nova cor mais clara. Color darkerdarker ( )

Cria uma nova cor mais escura.

int getAlphagetAlpha ( ) int getBluegetBlue ( ) int getGreengetGreen ( ) int getRedgetRed ( ) int getRGBgetRGB ( )

Retorna o valor do campo determinado.

Não possuimétodos set

Page 205: Curso de Linguagem Java 2010 - Marcos Mendes

205

Font (java.awt.Font)

Construtores FontFont ( Map atributos )

FontFont ( String nome, int estilo, int tamanho

)

Principais Campos BOLD

ITALIC

PLAIN

Page 206: Curso de Linguagem Java 2010 - Marcos Mendes

206

Font (java.awt.Font)

Principais Métodos String getFontNamegetFontName ( )

Retorna o nome do font face. String getNamegetName ( )

Retorna o nome lógico da fonte. int getSizegetSize ( )

Retorna o tamanho em pontos da fonte. int getStylegetStyle ( )

Retorna o estilo da fonte. boolean isBoldisBold ( )

indica se o estilo da fonte é BOLD. boolean isItalicisItalic ( )

indica se o estilo da fonte é ITALIC. boolean isPlainisPlain ( )

indica se o estilo da fonte é PLAIN.

Page 207: Curso de Linguagem Java 2010 - Marcos Mendes

207

Font (java.awt.Font)

Nomes Lógicos de FontesNomes Lógicos de Fontes Dialog DialogInput Monospaced SansSerif Serif

Exemplo de definição de Font de um

componente:Font f1 = new Font ( “Serif”, Font.BOLD, 14 );Button btn = new Button ( “Oi tudo bem”);btn.setFont ( f1 );

Page 208: Curso de Linguagem Java 2010 - Marcos Mendes

208

Font (java.awt.Font)

import java.awt.*;import javax.swing.*;

public class FontComp extends JFrame {public FontComp( ) {

setTitle("Tipo de Fonte do Componente");Font f = new Font ("SansSerif", Font.BOLD+Font.ITALIC,

20);JButton btn = new JButton ("krikaki");btn.setFont ( f );getContentPane().add ( btn, "North" );pack();setVisible(true);

}}

Exemplo que Exemplo que mostra como mostra como

alterar a fonte de alterar a fonte de um componenteum componente

Page 209: Curso de Linguagem Java 2010 - Marcos Mendes

209

Font (java.awt.Font)

import java.awt.*;class Fontes extends Frame {

public Fontes(){setTitle("Tipos de Fontes");List lst = new List();lst.setBackground(Color.lightGray);String fontfamily[] = GraphicsEnvironment.GraphicsEnvironment.

getLocalGraphicsEnvironment().getLocalGraphicsEnvironment(). getAvailableFontFamilyNames();getAvailableFontFamilyNames();

for (int x=0; x< fontfamily.length; x++) lst.add(fontfamily[x]);

add(lst);pack();setVisible(true);

}}

Classe para obter Classe para obter as fontes as fontes

instaladas no instaladas no computador localcomputador local

Page 210: Curso de Linguagem Java 2010 - Marcos Mendes

210

Alteração de Look And Feel

import javax.swing.*;public class TestaGUI extends JFrame {

public TestaGUI() { add(new JButton("Oi tudo bem"), "North");pack(); setVisible(true);

} public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

// UIManager.getCrossPlatformLookAndFeelClassName()//"com.sun.java.swing.plaf.motif.MotifLookAndFeel"

//"javax.swing.plaf.metal.MetalLookAndFeel" //"com.sun.java.swing.plaf.gtk.GTKLookAndFeel"//"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

new TestaGUI(); }

}

Page 211: Curso de Linguagem Java 2010 - Marcos Mendes

211

Manipulação de Eventos

Eventos de Ação

Eventos de Janela

Eventos de Mouse

Page 212: Curso de Linguagem Java 2010 - Marcos Mendes

212

Eventos de Ação

Interface ActionListener Método

actionPerformed

Não possui classe adaptadora

Eventos gerados por: Button

List

MenuItem

TextField

Page 213: Curso de Linguagem Java 2010 - Marcos Mendes

213

Eventos de Açãoimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class AcaoBtn1 extends JFrame {JButton btn;public AcaoBtn1 ( ) {

btn = new JButton ("Botão de Comando" );btn.addActionListener addActionListener ( new ActionListenerActionListener( ) {

public void actionPerformedactionPerformed ( ActionEventActionEvent evt ) {btn.setBackground ( Color.red );

}} );add ( btn, "North" );setVisible( true );

}public static void main (String args[ ]) {

new AcaoBtn1( );}

}

Ação de umAção de um

Botão 1Botão 1

Page 214: Curso de Linguagem Java 2010 - Marcos Mendes

214

Eventos de Açãoimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class AcaoBtn2 extends JFrame implements implements ActionListenerActionListener {JButton btn;public AcaoBtn2 ( ) {

btn = new JButton ("Botão de Comando" );btn.addActionListeneraddActionListener ( thisthis ) ;add( btn, "North" );setVisible ( true );

}public void actionPerformed ( ActionEventActionEvent evt ) {

ObjectObject source = evt.getSourceevt.getSource( );if ( source == btn )

btn.setBackground(Color.red);}public static void main (String args[ ]) {

new AcaoBtn2( );}

}

Ação de umAção de um

Botão 2Botão 2

Page 215: Curso de Linguagem Java 2010 - Marcos Mendes

215

Exercício Implementar a funcionalidade do

programa de cálculos.

Page 216: Curso de Linguagem Java 2010 - Marcos Mendes

216

Eventos de Janela Interface WindowListener

Métodos windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated

Classe adaptadora: WindowAdapterWindowAdapter

Page 217: Curso de Linguagem Java 2010 - Marcos Mendes

217

Eventos de Janelaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class FechaFrame extends JFrame {

public FechaFrame ( ) { setTitle ( "Oi Tudo Bem" );

setSize (300, 200); setDefaultCloseOperationsetDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSDO_NOTHING_ON_CLOSEE); addWindowListeneraddWindowListener ( new WindowAdapterWindowAdapter ( ) {

public void windowClosingwindowClosing ( WindowEventWindowEvent e ) { int resp = JOptionPane.showConfirmDialog(null, "Deseja

sair ?"); if ( resp == JOptionPane.YES_OPTION )

System.exit ( 0 ); }

} ); setVisible ( true );}public static void main ( String args [ ] ) { new FechaFrame( );}

}

FechamentoFechamento

de Janelade Janela

Page 218: Curso de Linguagem Java 2010 - Marcos Mendes

218

Eventos de Janelaimport java.awt.event.*;import javax.swing.*;public class EventosJanela extends JFrame { public EventosJanela() {

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);addWindowListener(new WindowListener() { public void windowClosing (WindowEvent e) {

int resp = JOptionPane.showConfirmDialog(null, "Deseja sair ?");if (resp == JOptionPane.YES_OPTION)

System.exit(0); } public void windowOpened (WindowEvent arg0) {

System.out.println("Janela Aberta!"); } public void windowClosed (WindowEvent arg0) {

System.out.println("Janela Fechada!"); }

Page 219: Curso de Linguagem Java 2010 - Marcos Mendes

219

Eventos de Janela public void windowIconified (WindowEvent arg0) {

System.out.println("Janela Minimizada!"); } public void windowDeiconified (WindowEvent arg0) {

System.out.println("Janela Restaurada!"); } public void windowActivated (WindowEvent arg0) {

System.out.println("Janela Ativada!"); } public void windowDeactivated (WindowEvent arg0) {

System.out.println("Janela Desativada!"); }});setVisible(true);

}

public static void main(String args[]) { new EventosJanela();

}}

Page 220: Curso de Linguagem Java 2010 - Marcos Mendes

220

JColorChooser (javax.swing.JColorChooser)

import java.awt.*;import java.awt.event.*;import javax.swing.*;

public class DialogoCor extends JFrame implements ActionListener {JButton btn;public DialogoCor() {

btn = new JButton("krikaki");btn.addActionListener(this);getContentPane().add(btn, "West");pack();setVisible(true);

}public void actionPerformed(ActionEvent e) {

Color corAtualcorAtual = btn.getBackground();Color novaCornovaCor = JColorChooser.showDialogshowDialog(DialogoCor.this,

"Escolha a cor", corAtualcorAtual);btn.setBackground(novaCor);

}public static void main ( Stirng args [ ] ) {

new DialogoCor ( );}

}

Page 221: Curso de Linguagem Java 2010 - Marcos Mendes

221

Eventos de Mouse Interface MouseListener

Métodos mousePressed mouseReleased mouseEntered mouseExited mouseClicked

Classe adaptadora: MouseAdapterMouseAdapter

Interface MouseMotionListener Métodos

mouseDragged mouseMoved

Classe adaptadora: MouseMotionAdapterMouseMotionAdapter

Page 222: Curso de Linguagem Java 2010 - Marcos Mendes

222

Eventos de Mouseimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class Botao extends JFrame {JButton btn;public Botao ( ) {

btn = new JButton ("Passe o mouse aqui !");btn.addMouseListeneraddMouseListener ( new MouseAdapterMouseAdapter ( ) {

public void mouseEnteredmouseEntered ( MouseEvent evt ) {btn.setBackground ( Color.yellow );

}public void mouseExitedmouseExited ( MouseEvent evt ) {

btn.setBackground ( Color.red );}

} );add ( btn, "South" );setVisible ( true );

}public static void main ( Stirng args [ ] ) {

new Botao ( );}

}

Eventos de Eventos de Mouse no BotãoMouse no Botão

Page 223: Curso de Linguagem Java 2010 - Marcos Mendes

223

Eventos de Teclado

Page 224: Curso de Linguagem Java 2010 - Marcos Mendes

224

Exemplo: Várias Janelasimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class Janelas extends JFrame implements ActionListener {JFrame fr1, fr2;JButton btnFr1, btnFr2, btnVolta1, btnVolta2;public Janelas() {

setTitle("Janela Principal");btnFr1 = new JButton("Chama Janela 1");btnFr1.addActionListener(this);btnFr2 = new JButton("Chama Janela 2");btnFr2.addActionListener(this);add(btnFr1, "North");add(btnFr2, "South");

Page 225: Curso de Linguagem Java 2010 - Marcos Mendes

225

Exemplo: Várias Janelasfr1 = new JFrame("Janela 1");fr1.setBounds(100, 100, 300, 100);fr1.getContentPane().setBackground(Color.yellow);btnVolta1 = new JButton("Voltar");fr1.add(btnVolta1, "South");btnVolta1.addActionListener(this);

fr2 = new JFrame("Janela 2");fr2.setBounds(200, 200, 300, 100);fr2.getContentPane().setBackground(Color.green);btnVolta2 = new JButton("Voltar");fr2.add(btnVolta2, "South");btnVolta2.addActionListener(this);

setSize(300, 200);setVisible(true);

}

Page 226: Curso de Linguagem Java 2010 - Marcos Mendes

226

Exemplo: Várias Janelaspublic void actionPerformed(ActionEvent evt) {

Object btn = evt.getSource();if (btn == btnFr1) {

setVisible(false);fr1.setVisible(true);

}if (btn == btnFr2) {

setVisible(false);fr2.setVisible(true);

}if (btn == btnVolta1) {

setVisible(true);fr1.setVisible(false);

}if (btn == btnVolta2) {

setVisible(true);fr2.setVisible(false);

}}public static void main(String[] args) {

new Janelas();}

}

Page 227: Curso de Linguagem Java 2010 - Marcos Mendes

227

Exemplo: Várias Janelaspublic void actionPerformed(ActionEvent evt) {

Object btn = evt.getSource();if (btn == btnFr1) {

setVisible(false);fr1.setVisible(true);

}if (btn == btnFr2) {

setVisible(false);fr2.setVisible(true);

}if (btn == btnVolta1) {

setVisible(true);fr1.setVisible(false);

}if (btn == btnVolta2) {

setVisible(true);fr2.setVisible(false);

}}public static void main(String[] args) {

new Janelas();}

}

Page 228: Curso de Linguagem Java 2010 - Marcos Mendes

228

Exemplo: Botão Personalizadoimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class MeuBotão extends JButton {

String texto;Font letra;Color frente, fundo, realce;public MeuBotão(String texto, Font letra, Color frente, Color fundo, Color realce){ super(texto); this.texto = texto; this.letra = letra; this.frente = frente; this.fundo = fundo; this.realce = realce;

Page 229: Curso de Linguagem Java 2010 - Marcos Mendes

229

Exemplo: Botão Personalizado setFont(letra); setForeground(frente); setBackground(fundo); addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent evt) { setBackground(MeuBotão.this.realce); Font letra = MeuBotão.this.letra; letra = new Font(letra.getFamily(), letra.getStyle(), letra.getSize() + 5); MeuBotão.this.setFont(letra); } public void mouseExited(MouseEvent evt) { setBackground(MeuBotão.this.fundo); MeuBotão.this.setFont(MeuBotão.this.letra); } });}

}

Page 230: Curso de Linguagem Java 2010 - Marcos Mendes

230

Tipos de Cursor (java.awt.Cursor) CROSSHAIR_CURSOR

Cursor em formato de cruz. CUSTOM_CURSOR

Cursor personalizado. DEFAULT_CURSOR

Cursor default E_RESIZE

Redimensionamento Leste HAND_CURSOR

Cursor em formato de mão MOVE_CURSOR

Cursor de movimentação N_RESIZE_CURSOR

Redimensionamento Norte

Page 231: Curso de Linguagem Java 2010 - Marcos Mendes

231

Tipos de Cursor (java.awt.Cursor) NE_RESIZE_CURSOR

Redimensionamento Nordeste NW_RESIZE_CURSOR

Redimensionamento Noroeste S_RESIZE_CURSOR

Redimensionamento Sul SE_RESIZE_CURSOR

Redimensionamento Sudeste SW_RESIZE_CURSOR

Redimensionamento Sodoeste TEXT_CURSOR

Texto W_RESIZE_CURSOR

Redimensionamento Oeste WAIT_CURSOR

Cursor de pausa

Page 232: Curso de Linguagem Java 2010 - Marcos Mendes

232

Exemplo de Tipos de Cursorimport java.awt.*;import javax.swing.*;public class Cursores extends JFrame {

public Cursores() {setLayout(new FlowLayout());JButton btn1 = new JButton("Cruz");JButton btn2 = new JButton("Mão");JButton btn3 = new JButton("Movimento");JButton btn4 = new JButton("Texto");JButton btn5 = new JButton("Espera");btn1.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));btn2.setCursor(new Cursor(Cursor.HAND_CURSOR));btn3.setCursor(new Cursor(Cursor.MOVE_CURSOR));btn4.setCursor(new Cursor(Cursor.TEXT_CURSOR));btn5.setCursor(new Cursor(Cursor.WAIT_CURSOR));

Page 233: Curso de Linguagem Java 2010 - Marcos Mendes

233

Exemplo de Tipos de Cursorcp.add(btn1);cp.add(btn2);

cp.add(btn3);cp.add(btn4);cp.add(btn5);pack();setVisible(true);

}

public static void main(String[] args) {new Cursores( );

}}

Page 234: Curso de Linguagem Java 2010 - Marcos Mendes

234

Exemplo de Cursor Personalizadoimport java.awt.*; import javax.swing.*; public class CursorPessoal extends JFrame {

JButton btn; public CursorPessoal() {

Toolkit tk = Toolkit.getDefaultToolkit(); Image img = tk.getImage("imagem.gif"); setIconImage(img); Cursor cursor = tk.createCustomCursor(img, new Point(20, 20),

"Oi"); btn = new JButton("krikaki"); btn.setToolTipText("Oi tudo bem"); btn.setCursor(cursor); add(btn, "North"); setBounds(100,100, 200, 300); setVisible(true);

} public static void main(String[] args) { new CursorPessoal();

} }

Page 235: Curso de Linguagem Java 2010 - Marcos Mendes

235

Tratamento de Exceções

Page 236: Curso de Linguagem Java 2010 - Marcos Mendes

236

Tratamento de Exceçõesimport java.awt.*;import java.awt.event.*;import javax.swing.*;

public class Excecao extends JFrame implements ActionListener {JRadioButton divide, badCast, arrayBounds, nullPointer;public Excecao(){

Container cp = getContentPane();cp.setLayout(new GridLayout(7, 1));ButtonGroup g = new ButtonGroup();divide = new JRadioButton("Divisão por zero", false);divide.addActionListener(this);g.add(divide);cp.add(divide);

Page 237: Curso de Linguagem Java 2010 - Marcos Mendes

237

Tratamento de ExceçõesbadCast = new JRadioButton("Cast Inválido", false);badCast.addActionListener(this);g.add(badCast);cp.add(badCast);arrayBounds = new JRadioButton("Índice inválido",

false);arrayBounds.addActionListener(this);g.add(arrayBounds);cp.add(arrayBounds);nullPointer = new JRadioButton("Referência nula", false);nullPointer.addActionListener(this);g.add(nullPointer);cp.add(nullPointer);pack();setVisible(true);

}

Page 238: Curso de Linguagem Java 2010 - Marcos Mendes

238

Tratamento de Exceçõespublic void actionPerformed(ActionEvent evt) {

Object source = evt.getSource();trytry { if (source == divide) {

int a = 1, b; b = 5 / (a - a);} else if (source == badCast) {

Frame f = (Frame) evt.getSource();} else if (source == arrayBounds) {

int a[] = new int[5]; int b = a[5];} else {

Frame f = null; f.setSize(200, 300); }

} catchcatch (Exception e) {System.out.println("Exceção: " + e); }

}public static void main ( String args [ ] ) {

Excecao oi = new Excecao();}

}

Page 239: Curso de Linguagem Java 2010 - Marcos Mendes

239

Desenhando Formas Geométricas

import java.awt.*;import java.awt.geom.*;import javax.swing.*;public class Desenho extends JFrame {       PainelDesenhado painel;       public Desenho() {               painel = new PainelDesenhado();               add(painel);               setBounds(100, 100, 350, 250);               setVisible(true);       }       public static void main(String[] args) {               new Desenho();       }       class PainelDesenhado extends JPanel {               protected void paintComponent(Graphics g) {                       //super.paintComponent(g);                       g.setColor(new Color(0, 200, 0));                       g.fillRect(0, 0, 300, 200);                       g.setColor(Color.YELLOW);                       int x[] = {150, 300, 150, 0, 150};                       int y[] = {0, 100, 200, 100, 0};                       g.fillPolygon(x, y, 5);                       g.setColor(new Color(0, 0, 200));                       g.fillOval(100, 50, 100, 100);                       g.setColor(Color.WHITE);                       for (int cont = 1; cont <= 10; cont++)                               g.drawArc(100, cont + 80, 100, 50, 0, 180 );               }       }}

Page 240: Curso de Linguagem Java 2010 - Marcos Mendes

240

Imagens Como ler um arquivo de imagem:

Toolkit tk = Toolkit.getDefaultToolkit ( )getDefaultToolkit ( ) ;

// Arquivo Local:

Image imgimg = tk.getImagegetImage (“nomearq.gif”);

// Imagem na Internet:

URL u = new URL ("http://www.algumlugar.com/umaImg.gif");

Image imgimg = tk.getImagegetImage ( u );

Como alterar o ícone de uma Frame:setIconImage ( imgimg );

Page 241: Curso de Linguagem Java 2010 - Marcos Mendes

241

Imagens Como carregar uma imagem através de

um observador de imagens (ImageObserver):

ToolkitToolkit tk = Toolkit.getDefaultToolkit ( );getDefaultToolkit ( );

ImageImage img = tk.getImagegetImage ("nomearq.gif");

MediaTrackerMediaTracker mt = new MediaTrackerMediaTracker (this);mt.addImageaddImage (img, 0);

try {mt.waitForIDwaitForID ( 0 );

} catch (InterruptedException e) { }

Page 242: Curso de Linguagem Java 2010 - Marcos Mendes

242

Imagens (exemplo)

import java.awt.*;

public class TestPanelImg extends Frame {public TestPanelImg(String nomearq) {

setTitle ("Teste de Imagem");Panel p1 = new PanelImg (nomearq); add(p1);setBounds(100, 100, 200, 200);setVisible(true);

}public static void main (String args[ ] ) {

TestPanelImg oi = new TestPanelImg(args[0]);}

}

Page 243: Curso de Linguagem Java 2010 - Marcos Mendes

243

Imagens (exemplo)

class PanelImg extends Panel {Image img;public PanelImg (String nomearq) {

img = Toolkit.getDefaultToolkit( ).getImage(nomearq);MediaTracker mt = new MediaTracker(this);mt.addImage (img, 0); // Carrega a imagemtry {

mt.waitForID (0); // Aguarda pelo carregamento} catch ( InterruptedException e ) { }

}public void paint ( Graphics g ) {

super.paint ( g );Dimension d = getSize();int largura = d.width;int altura = d.height;g.drawImage(img, 0, 0, largura, altura, this);

}}

Page 244: Curso de Linguagem Java 2010 - Marcos Mendes

244

Imagens (exemplo 2)

import java.awt.*; import java.awt.event.*;import java.io.File; import javax.swing.*;

public class ViewImageFile extends JFrame implements ActionListener {PanelImg pImage; JButton btnFile;public ViewImageFile() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle("Visualizador de Imagens");pImage = new PanelImg(null);btnFile = new JButton("Carrega Arquivo");btnFile.addActionListener(this);Container cp = getContentPane();cp.add(pImage, BorderLayout.CENTER);cp.add(btnFile, BorderLayout.SOUTH);setBounds(100, 100, 300, 300);setVisible(true);

}

Page 245: Curso de Linguagem Java 2010 - Marcos Mendes

245

Imagens (exemplo 2)

public void actionPerformed(ActionEvent e) { File arquivo = null; JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(this) == 0) { arquivo = fc.getSelectedFile(); String nomearq = arquivo.getAbsolutePath(); pImage.load(nomearq); }

}public static void main(String[] args) {

new ViewImageFile();}

Page 246: Curso de Linguagem Java 2010 - Marcos Mendes

246

Imagens (exemplo 2)

class PanelImg extends Panel {Image img;public PanelImg (String nomearq) {

if (nomearq != null)load(nomearq);

}public void load(String nomearq) {

img = Toolkit.getDefaultToolkit().getImage(nomearq);MediaTracker mt = new MediaTracker(this);mt.addImage (img, 0); // Carrega a imagemtry {

mt.waitForID (0); // Aguarda pelo carregamento} catch ( InterruptedException e ) { }

}

Page 247: Curso de Linguagem Java 2010 - Marcos Mendes

247

Imagens (exemplo 2)

public void paint ( Graphics g ) {super.paint ( g );Dimension d = getSize();int largura = d.width;int altura = d.height;g.drawImage(img, 0, 0, largura, altura, this);

}}

}

Page 248: Curso de Linguagem Java 2010 - Marcos Mendes

248

Menus Barra de Menus (javax.swing.JMenuBar)

JMenuBar Menus (javax.swing.JMenu)

JMenu Itens de Menus (javax.swing.JMenuItem)

JMenuItem Separadores

addSeparator ( ) Adição da Barra de Menus à Frame

JFrame.setJMenuBar ( )

Page 249: Curso de Linguagem Java 2010 - Marcos Mendes

249

Menus Abilitar e Desabilitar Itens de Menus

setEnablesetEnable ( ) Ícones em Itens de Menus

setIconsetIcon ( ) JMenuItem item = new JMenuItemJMenuItem (“Cut”, new ImageIcon ( “cut.gif”

); Mnemônicos em Itens de Menus

setMnemonicsetMnemonic ( )item.setMnemonic ( ´C´ );

Teclas de Atalho em Itens de Menus setAcceleratorsetAccelerator ( )

item.setAccelerator ( KeyStroke.getKeyStroke ( KeyEvent.VK_C, InputEvent.CTRL_MASK) );

Page 250: Curso de Linguagem Java 2010 - Marcos Mendes

250

Menus Caixas de Seleção em Itens de Meuns

JCheckBoxMenuItem (javax.swing.JCheckBoxMenuItem)

JCheckBoxMenuItem item = new JCheckBoxMeunItem ("Ready" );menu.add ( item );

Botões de Rádio em Itens de Menus ButtonGroup (javax.swing.ButtonGroup)

JRadioButtonMenuItem (javax.swing.JRadioButtonMenuItem)

ButtonGroup bg = new ButtonGroup ( );JRadioButtonMenuItem mitem = new JRadioButtonMenuItem ("Masc" );mitem.setSelected ( true );JRadioButtonMenuItem fitem = new JRadioButtonMenuItem ("Fem" );bg.add ( mitem );bg.add ( fitem );menu.add ( mitem );menu.add ( fitem );

Page 251: Curso de Linguagem Java 2010 - Marcos Mendes

251

Menus (javax.swing.JMenu)class MeuMenu extends JFrame implements ActionListener {

public MeuMenu ( ) {JMenuBar barraMenu = new JMenuBar ( );JMenu editMenu = new JMenu ("Edit" );JMenuItem item1 = new JMenuItem ("Paste" );item1.addActionListener ( this );editMenu.add ( item1 );editMenu.addSeparator ( );JMenuItem item2 = new JMenuItem ("Copy" );item2.addActionListener ( this );editMenu.add ( item2 );barraMenu.add ( editMenu );setJMenuBar ( barraMenu );show( );

}public void actionPerformed ( ActionEvent evt ) {}

}

Importar: java.awt.*java.awt.event.*javax.swing.*

Page 252: Curso de Linguagem Java 2010 - Marcos Mendes

252

Menus Menus Flutuantes (pop-up)

JPopupMenu (javax.swing.JPopupMenu)btn = new JButton ("Oi tudo bem");getContentPane().add (btn, "South");itemAzul = new JMenuItem ( "Azul" );itemAzul.addActionListener ( this );itemVermelho = new JMenuItem ( "Vermelho" );itemVermelho.addActionListener ( this );popup = new JPopupMenu();popup.add ( itemAzul );popup.add ( itemVermelho );btn.addMouseListener ( new MouseAdapter ( ) {

public void mouseReleased ( MouseEvent evt ) {

if ( evt.isPopupTrigger() ) popup.show ( evt.getComponent(),

evt.getX(), evt.getY() );}

} );

Page 253: Curso de Linguagem Java 2010 - Marcos Mendes

253

Mini-aplicativos - Applets

Page 254: Curso de Linguagem Java 2010 - Marcos Mendes

254

Applet (java.applet.Applet)

Conceito e UtilizaçãoUma applet é uma classe Java executada dentro de um browser Web.

SegurançaUma applet não pode acessar os recursos locais de uma máquina. Como executar programas locais, se comunicar com outro computador a não ser o hospedeiro de origem, ler nem gravar no sistema de arquivos local, descobrir nomes de usuários ou endereços de e-mail.

Page 255: Curso de Linguagem Java 2010 - Marcos Mendes

255

Applet (java.applet.Applet) Métodos Particulares

init ( )init ( )Executado apenas uma vez após a carga da applet pelo browser. Utilizado para inicializar dados.

start ( )start ( )Executado após init( ) e a cada vez que o applet se tornar ativo.

stop ( )stop ( )Executado toda vez que o applet tiver de ser desativado. Quando a página não for a ativa.

destroy ( )destroy ( )Executado toda vez que a applet for completamente descartada. Utilizado para liberar recursos.

paint ( Graphics paint ( Graphics g))Executado toda vez que a applet precisar ser desenhada.Quando a applet possuir componentes de interface gráfica, é recomendável chamar o método paintComponents().paintComponents().

Page 256: Curso de Linguagem Java 2010 - Marcos Mendes

256

Applet – Arquivo HTML<html>

<body>

<appletapplet code="TestappTestapp" width=300 height=200 >

<paramparam name= "b1" value = "Anterior " >

<paramparam name= "b2" value = "Próximo" >

Este browser não suporta applets

</applet/applet>

</body>

</html>

Page 257: Curso de Linguagem Java 2010 - Marcos Mendes

257

Applet – Código da Classeimport java.awt.*;import javax.swing.*;

public class Testapp extends JApplet {JButton btn1, btn2;public void init ( ) {

Container cp = getContentPane();String textob1 = getParameter ("b1");String textob2 = getParameter ("b2");btn1 = new JButton(textob1);btn2 = new JButton(textob2);cp.add(btn1, "North");cp.add(btn2, "South");

}public void paint ( Graphics g ) {

paintComponents(g);g.drawString ("Oi tudo bem", 100, 100);

}}

Page 258: Curso de Linguagem Java 2010 - Marcos Mendes

258

Exercício

Transformar o programa de cálculos em uma applet.

Page 259: Curso de Linguagem Java 2010 - Marcos Mendes

259

Manipulação de Arquivos do Sistema de Arquivos – java.io

Page 260: Curso de Linguagem Java 2010 - Marcos Mendes

260

Gravação de dados em arquivo textoimport java.io.*;import javax.swing.*;public class GravaDados {

public static void main(String[] args) {try {

FileOutputStream out = new FileOutputStream("dados.txt");String texto = JOptionPane.showInputDialog(null,

"Qual o texto a gravar?");byte[] b = texto.getBytes();out.write(b);out.close();

} catch (FileNotFoundException e) {e.printStackTrace();

} catch (IOException ex) {ex.printStackTrace();

}}

}

Page 261: Curso de Linguagem Java 2010 - Marcos Mendes

261

Leitura de dados de arquivo textoimport java.io.*;

public class LeDados {public static void main(String[] args) {

try {FileInputStream in = new FileInputStream("dados.txt");int ch;while ((ch = in.read()) != -1)

System.out.print((char)ch);in.close();

} catch (FileNotFoundException e) {e.printStackTrace();

} catch (IOException ex) {ex.printStackTrace();

}}

}

Page 262: Curso de Linguagem Java 2010 - Marcos Mendes

262

Gravando dados em arquivo texto (como objetos)

import java.io.*;import javax.swing.*;public class GravaObjetos {

public static void main(String[] args) {try { FileOutputStream fos = new FileOutputStream("dados.txt");

ObjectOutputStream out = new ObjectOutputStream(fos);for (int cont = 1; cont <= 3; cont++) {

String nome = JOptionPane.showInputDialog("Digite o nome");String rg = JOptionPane.showInputDialog("Digite o Rg");Pessoa pessoa = new Pessoa();pessoa.setNome(nome);pessoa.setRg(rg);out.writeObject(pessoa);

}out.close();JOptionPane.showMessageDialog(null, "Dados Gravados");

} catch (FileNotFoundException e) {e.printStackTrace();

} catch (IOException ex) {ex.printStackTrace();

}}

}

Page 263: Curso de Linguagem Java 2010 - Marcos Mendes

263

Lendo dados de arquivo texto (como objetos)

import java.io.*;import javax.swing.JOptionPane;public class LeObjetos {

public static void main(String[] args) {try {

FileInputStream fis = new FileInputStream("dados.txt");ObjectInputStream in = new ObjectInputStream(fis);Pessoa pessoa = new Pessoa();while ( (pessoa = (Pessoa) in.readObject()) != null)

System.out.println(pessoa.getNome() + " - " + pessoa.getRg());in.close();fis.close();

} catch (FileNotFoundException e) {JOptionPane.showMessageDialog(null, "Arquivo não encontrado");

} catch (EOFException e) {JOptionPane.showMessageDialog(null, "Leitura completada");

} catch (IOException ex) {ex.printStackTrace();

} catch (ClassNotFoundException e) {e.printStackTrace();

}}

}

Page 264: Curso de Linguagem Java 2010 - Marcos Mendes

264

Conectividade de Banco de Dados(JDBC)

Page 265: Curso de Linguagem Java 2010 - Marcos Mendes

265

Conectividade de Banco de Dados

Arquitetura JDBC

Introdução à Linguagem SQL

Configuração ODBC

Etapas da Programação JDBC

Uso do MySQL

API – JDBC

Manutenção de Tabelas de Banco de Dados

Page 266: Curso de Linguagem Java 2010 - Marcos Mendes

266

Conectividade de Banco de Dados

Arquitetura JDBC

Programa JavaAPI JDBC(java.sql)

Driver JDBC

BancoDe Dados

Comandos SQL

Page 267: Curso de Linguagem Java 2010 - Marcos Mendes

267

Introdução à Linguagem SQL

Consulta SELECT

Alteração INSERT INTO

UPDATE

DELETE FROM

Page 268: Curso de Linguagem Java 2010 - Marcos Mendes

268

Introdução à Linguagem SQL

SELECT

SELECTSELECT colunas FROMFROM tabelas WHEREWHERE critério

Exemplos:SELECT * FROM cliente

SELECT Nome, Tel FROM Cliente

SELECT Nome FROM Cliente WHERE Estado = ‘SP’

SELECT Nome, Tel FROM Cliente WHERE Nome LIKE ‘João%’

SELECT Cliente.Nome, Pedido.NumPed FROM Cliente, Pedido WHERE Cliente.CodCli = Pedido.CodCli

Page 269: Curso de Linguagem Java 2010 - Marcos Mendes

269

Introdução à Linguagem SQL

INSERT INTO

INSERT INTOINSERT INTO tabela (nomeCol1, nomeCol2...)

VALUESVALUES (valor1, valor2...)

Exemplos:INSERT INTO Cliente ( CodCli, Nome ) VALUES ( ‘001’,

‘CIM Alcina’ )

INSERT INTO Pedido ( NumPed, Data ) VALUES ( ‘031/01’,

TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ ) )

Page 270: Curso de Linguagem Java 2010 - Marcos Mendes

270

Introdução à Linguagem SQL

UPDATE

UPDATEUPDATE tabela SETSET nomeCol1 = valor1,

nomeCol2 = valor2... WHEREWHERE critério

Exemplos:

UPDATE Pedido SET Preço = Preço * 1.1

UPDATE Pedido SET Preço = Preço * 0.85

WHERE CodProd = ‘XYZ’

Page 271: Curso de Linguagem Java 2010 - Marcos Mendes

271

Introdução à Linguagem SQL

DELETE FROM

DELETEDELETE FROMFROM tabela WHEREWHERE critério

Exemplos:

DELETE FROM Cliente WHERE CodCli = ‘001’

DELETE FROM Pedido WHERE Data < TO_DATE (’13-

MAR-2001’, ‘DD-MON-YYYY’ )

Page 272: Curso de Linguagem Java 2010 - Marcos Mendes

272

Mapeamento java.sql.Types para Java

long BIGINT

java.lang.String VARCHAR

java.lang.String CHAR

java.math.BigDecimal NUMERIC

java.math.BigDecimal DECIMAL

double DOUBLE

double FLOAT

float REAL

int INTEGER

short SMALLINT

byte TINYINT

boolean BIT

Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)

Page 273: Curso de Linguagem Java 2010 - Marcos Mendes

273

Mapeamento java.sql.Types para Java (cont.)

byte[ ] BINARY

java.sql.Struct STRUCT

java.sql.Ref REF

java.sql.Array ARRAY

java.sql.Clob CLOB

java.sql.Blob BLOB

byte[ ] LONGVARBINARY

byte[ ] VARBINARY

java.sql.Timestamp TIMESTAMP

java.sql.Time TIME

java.sql.Date DATE

java.lang.String LONGVARCHAR

Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)

Page 274: Curso de Linguagem Java 2010 - Marcos Mendes

274

Conectividade de Banco de Dados

Configuração ODBC ( Windows )Painel de Controle / Fontes de Dados ODBC (32

bits)

Você deve configurar os seguintes itens: Driver Nome da Fonte de Dados Banco de Dados correspondente

Opcionalmente definir: Nome de Logon Senha de acesso

Page 275: Curso de Linguagem Java 2010 - Marcos Mendes

275

Conectividade de Banco de Dados

Etapas da Programação JDBC1. Importar java.sql.*2. Carregar Driver JDBC3. Especificar um Banco de Dados4. Abrir uma conexão com o Banco de

Dados5. Criar um Statement (comando)6. Submeter um comando SQL7. Receber os resultados

Page 276: Curso de Linguagem Java 2010 - Marcos Mendes

276

Conectividade de Banco de Dados

Etapa 1 – Importar o Pacote java.sqlimport java.sql.*;import java.sql.*;

Etapa 2 – Carregar Driver JDBC (Depende do Banco de Dados)

Carga dinâmica da classe com o método Class.forName:Class.forName ( “sun.jdbc.odbc.JdbcOdbcDriver” );Class.forName ( “sun.jdbc.odbc.JdbcOdbcDriver” );

Instanciação de um objeto para forçar a carga da classe:new sun.jdbc.odbc.JdbcOdbcDriver ( );

Atribuição a variáveis do sistema com a opção –D:java –Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver programa

Page 277: Curso de Linguagem Java 2010 - Marcos Mendes

277

Conectividade de Banco de Dados

Etapa 3 – Criar uma url de conexão (Depende do Banco de Dados)

Especifica-se um banco de dados através de uma url no seguinte formato:jdbc:subprotocol:subnameonde: jdbc – Protocolo jdbc.

subprotocol – Mecanismo de conexãosubname – Fonte de Dados

Exemplo: String url = “jdbc:odbc:String url = “jdbc:odbc:db1db1”;”;

Etapa 4 – Abrir ConexãoConnection con = DriverManager.getConnection ( url, “user”, Connection con = DriverManager.getConnection ( url, “user”,

“senha” );“senha” );

Fonte de Dados

Page 278: Curso de Linguagem Java 2010 - Marcos Mendes

278

Conectividade de Banco de Dados

Etapa 5 – Criar um Statement (comando)

Statement stmt = con.createStatement ( );Statement stmt = con.createStatement ( );

Etapa 6 – Submeter um comando SQL

Neste exemplo, iremos submeter uma query.

String query = “SELECT * FROM tabela”;String query = “SELECT * FROM tabela”;

ResultSet rs = stmt.executeQuery ( query );ResultSet rs = stmt.executeQuery ( query );

Page 279: Curso de Linguagem Java 2010 - Marcos Mendes

279

Conectividade de Banco de Dados

Etapa 7 – Receber os resultadosNo caso de uma query, o resultado é na forma de um conjunto de linhas (registros) manipulados por métodos da interface ResultSet. Por exemplo, para exibir as linhas deste conjunto, percorre-se todas as linhas através do

método next ( ).

Resultset rs = stmt.executeQuery ( query );Resultset rs = stmt.executeQuery ( query );

while ( rs.next ( ) ) {while ( rs.next ( ) ) {

// primeira coluna// primeira coluna

System.out.println ( rs.getString( 1 ) );System.out.println ( rs.getString( 1 ) );

// segunda coluna// segunda coluna

System.out.println ( rs.getString( 2 ) );System.out.println ( rs.getString( 2 ) );

}}

Page 280: Curso de Linguagem Java 2010 - Marcos Mendes

280

Conectividade de Banco de Dados

import java.sql.*;public class Conexao {

public static void main ( String args [ ] ) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver");

String url = "jdbc:odbc:fonteDadosjdbc:odbc:fonteDados"; Connection con = DriverManager.getConnection(url, "usuáriousuário",

"senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY

nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {

System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") );

} } catch (Exception e) {

System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando uma fonte de dados ODBC.

Page 281: Curso de Linguagem Java 2010 - Marcos Mendes

281

Conectividade de Banco de Dados

import java.sql.*;public class Conexao {

public static void main ( String args [ ] ) { try { Class.forName("com.mysql.jdbc.Drivercom.mysql.jdbc.Driver");

String url = "jdbc:mysql://127.0.0.1:3306/nomeBancojdbc:mysql://127.0.0.1:3306/nomeBanco"; Connection con = DriverManager.getConnection(url, "usuáriousuário",

"senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY

nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {

System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") );

} } catch (Exception e) {

System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando o MySQL.

Page 282: Curso de Linguagem Java 2010 - Marcos Mendes

282

Conectividade de Banco de Dados

import java.sql.*;public class Conexao {

public static void main ( String args [ ] ) { try {

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver");

String url = "jdbc:sqlserver://127.0.0.1;" + jdbc:sqlserver://127.0.0.1;" + "databaseName=nomeBanco;" + "databaseName=nomeBanco;" + "user=usuário;password=senha"user=usuário;password=senha"";

Connection con = DriverManager.getConnection(url); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY

nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {

System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") );

} } catch (Exception e) {

System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando o SQLServer2005.

Page 283: Curso de Linguagem Java 2010 - Marcos Mendes

283

Usando o MySQL

Os tópicos a seguir que dizem respeito ao MySQL foram baseados na seguinte bibliografia:

Beginning PHP 4 Programando Wankyu Choi, Allan Kent, Chris Lea, Ganesh

Prasad e Chris Ullman. Makron Books – Wrox Press

SQL Magazine Edição 1 – Ano 1 SGBD no linux: MySQL por Clementino Leal

Java Magazine Edição 7 – Ano 1 Bancos de Dados Livres por Fernando Lozano

Page 284: Curso de Linguagem Java 2010 - Marcos Mendes

284

Instalação do MySQL (no Windows)

O MySQL pode ser obtido no site http://www.mysql.comhttp://www.mysql.com

Descompacte o arquivo mysql-4.0.16-win.zipmysql-4.0.16-win.zip em um diretório qualquer como c:\mysqlinstc:\mysqlinst

Execute o arquivo setup.exesetup.exe, escolha o diretório padrão c:\mysqlc:\mysql e a instalação típicainstalação típica

Abra uma janela do DOS e vá para o diretório c:\c:\mysql\binmysql\bin

Execute o comando winmysqladmin.exewinmysqladmin.exe para que o servidor seja carregado. Na primeira execução desse programa será pedido um nome de usuário e senha.

Page 285: Curso de Linguagem Java 2010 - Marcos Mendes

285

Criação de banco de dados com MySQL Inicie o cliente MySQL monitor:

c:\mysql\bin> mysql –umysql –u<usuário> -p-p<senha> Crie um banco de dados:

mysql > create databasecreate database pessoal; Torne o banco de dados ativo:

mysql > useuse pessoal; Crie uma tabela:

mysql > create tablecreate table agenda (-> id INT NOT NULL AUTO_INCREMENTINT NOT NULL AUTO_INCREMENT,-> nome VARCHARVARCHAR(30),-> telefone VARCHARVARCHAR(30),-> PRIMARY KEYPRIMARY KEY (id)) ;

Insira alguns registros:mysql > INSERT INTOINSERT INTO agenda VALUESVALUES (1, “Maria”, “4444-4444”) ;

Exiba os registros inseridos:mysql > SELECT * FROMSELECT * FROM agenda ORDER BYORDER BY nome ;

Encerre o cliente:mysql > exitexit;

Page 286: Curso de Linguagem Java 2010 - Marcos Mendes

286

Principais tipos de dados no MySQL

AAAAMMDDhhmmssTimestamp TIMESTAMP

AAAA-MM-DD hh:mm:ss

Data e hora DATETIME

AAAA-MM-DDData DATE

Igual a DOUBLEFlutuação String

DECIMAL

±2.225x10-308 a ±1.798x10+308

Flutuante dupla DOUBLE / REAL

±1.176x10-38 a ±3.403x10+38

Flutuante simples

FLOAT

-263 a 263 - 1Inteiro grande BIGINT

-27 a 27 - 1Int. muito peq. TINYINT

-231 a 231 - 1Inteiro normal INT

Intervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de dadodado

Page 287: Curso de Linguagem Java 2010 - Marcos Mendes

287

Principais tipos de dados no MySQL (cont.)

De 0 bytes a 4MB de extensão

Campo de texto longo

LONGTEXT

De 0 65.535 bytes de extensão

Campo de texto

TEXT

De 0 bytes a 4MB de extensão

BLOB de tamanho grande

LONGBLOB

De 0 65.535 bytes de extensão

Objeto binário grande

BLOB

De 0 a 255 caracteres

String de tamanho variável

VARCHAR

De 0 a 255 caracteres

String de tamanho fixo

CHAR

Intervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de dadodado

Page 288: Curso de Linguagem Java 2010 - Marcos Mendes

288

Principais comandos do MySQL monitor

Os comandos devem ser finalizados com “;” CREATE DATABASECREATE DATABASE

Cria um banco de dados. DROP DATABASEDROP DATABASE

Apaga um banco de dados CREATE TABLECREATE TABLE

Cria uma tabela no banco de dados ativo. SHOW DATABASESSHOW DATABASES

Exibe uma lista dos bancos de dados ativos. USEUSE

Seleciona um banco de dados como ativo. SHOW TABLESSHOW TABLES

Exibe as tabelas do banco de dados ativo. EXITEXIT

Encerra o monitor.Além dos comandos SQL padrão.

Page 289: Curso de Linguagem Java 2010 - Marcos Mendes

289

Conexão com MySQL

Instale o driver Connector/J descompactando o arquivo:

mysql-connector-java-3.1.0-alpha.zipmysql-connector-java-3.1.0-alpha.zip, será criado

um diretório com o mesmo nome.

Inclua o arquivo mysql-connector-java-3.1.0-mysql-connector-java-3.1.0-

alpha.jaralpha.jar no Classpath.

Defina o driver em Class.forName ( ) como:

"com.mysql.jdbc.Drivercom.mysql.jdbc.Driver"

Defina a URL de conexão como:

"jdbc:mysql://127.0.0.1:3306/jdbc:mysql://127.0.0.1:3306/banco"

onde banco é o nome do banco de dados.

Page 290: Curso de Linguagem Java 2010 - Marcos Mendes

290

Acesso a dados no MySQL com Eclipse

Para se executar uma aplicação que acesse um banco

de dados MySQL no Eclipse é necessário que se

adicione o arquivo mysql-connector-java-3.1.0-mysql-connector-java-3.1.0-

alpha.jaralpha.jar no classpath do Eclipse.

Para tanto, no Eclipse, Selecione o menu "ProjectProject"

opção "PropertiesProperties", clique em "Java Build PathJava Build Path",

selecione a aba "LibrariesLibraries", clique no botão "Add Add

External Jars...External Jars..." selecione o arquivo mysql-mysql-

connector-java-3.1.0-alpha.jarconnector-java-3.1.0-alpha.jar no diretório onde o

driver Connector/J foi instalado, clique em "abrirabrir" e

finalmente clique em "okok".

Page 291: Curso de Linguagem Java 2010 - Marcos Mendes

291

Usando o Apache Derby Baixe o pacote de distribuição bin do Derby na página:

http://db.apache.org/derby/derby_downloads.html Extraia o pacote baixado no diretório raiz. Renomeie a pasta de instalação para “derby” Adicione o diretório “derby\bin” à variável PATH Mais informações para instalação:

http://db.apache.org/derby/docs/dev/pt_BR/getstart/

Page 292: Curso de Linguagem Java 2010 - Marcos Mendes

292

Exercício

Criar uma interface que grave registros em uma tabela

Agenda

Nome:

Telefone:

Gravar

Page 293: Curso de Linguagem Java 2010 - Marcos Mendes

293

Comandos JDBC (java.sql.Statement)

ConsultaStatementStatement st = con.createStatementcreateStatement( );String sql = "SELECT * FROM tabela WHERE codigo =" + x;ResultSet rs = st.executeQueryexecuteQuery( sql );

InclusãoStatementStatement st = con.createStatementcreateStatement( );String sql = "INSERT INTO tabela (nome, cargo) " +

"VALUES ( ‘ ‘ "+ vNome + " ‘ , ‘ "+ vCargo + " ‘ ) ";int res = st.executeUpdateexecuteUpdate( sql );

Page 294: Curso de Linguagem Java 2010 - Marcos Mendes

294

Comandos preparados JDBC (java.sql.PreparedStatement)

ConsultaString sql = "SELECT * FROM tabela WHERE codigo = ? "; PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setIntsetInt (1, x);ResultSet rs = pst.executeQueryexecuteQuery( );

InclusãoString sql = "INSERT INTO tabela (nome, cargo) " +

"VALUES ( ?, ?) ";

PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setStringsetString (1, vNome);pst.setStringsetString (2, vCargo);int res = pst.executeUpdateexecuteUpdate( );

Page 295: Curso de Linguagem Java 2010 - Marcos Mendes

295

Conjuntos de Resultados ( ResultSet ) Os valores que definem o tipo de um ResultSetResultSet

são especificados no método createStatement ( ) createStatement ( ) ou no método prepareStatement ( ) prepareStatement ( )

Valores de Tipos de conjuntos TYPE_FORWARD_ONLYTYPE_FORWARD_ONLY

Conjunto de resultados não rolável. TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE

Conjunto de resultados rolável, mas não sensível às alterações do banco de dados.

TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVEConjunto de resultados rolável e sensível às alterações do banco de dados.

Valores de Concorrência de conjuntos CONCUR_READ_ONLYCONCUR_READ_ONLY

Conjunto de resultado apenas para leitura. CONCUR_UPDATABLECONCUR_UPDATABLE

Conjunto de resultado atualizável.

JDBC 2.0

Page 296: Curso de Linguagem Java 2010 - Marcos Mendes

296

Conjuntos de Resultados Atualizáveis

ResultSet atualizáveis são gerados utilizando-se a concorrência CONCUR_UPDATABLECONCUR_UPDATABLE nos métodos createStatement ( ) createStatement ( ) ou prepareStatement ( )prepareStatement ( ).

Inclusão:Inclusão:rs.moveToInsertRow ( ); // Move o cursor para a linha de inserção.

rs.updateInt (1, 123 ); // Define o valor de uma coluna na linha corrente.rs.updateString(2, "Maria");rs.insertRow ( ); // Insere o conteúdo da linha de inserção no banco de dados.

Alteração:rs.updateString(2, "João"); // Define o valor de uma coluna na linha

corrente.rs.updateRow ( ); // Atualiza o conteúdo da linha corrente no banco

de dados.

Exclusão:Exclusão:rs.deleteRow ( ); // Exclui uma linha.

Page 297: Curso de Linguagem Java 2010 - Marcos Mendes

297

API - JDBC

Interface ConnectionConnection void closeclose ( )

Fecha uma conexão. void commitcommit ( )

Efetiva transação. Statement createStatementcreateStatement ( )

Cria um comando. PreparedStatement prepareStatementprepareStatement (String sql)

Cria um comando preparado. void rollbackrollback ( )

Cancela transação. void setAutoCommitsetAutoCommit ( boolean b )

Define a forma de efetivação dos dados.

Page 298: Curso de Linguagem Java 2010 - Marcos Mendes

298

API - JDBC Classe DriverManagerDriverManager

Connection getConnectiongetConnection ( String url ) Connection getConnectiongetConnection ( String url, String usuário,

String senha )Obtém uma conexão com uma fonte de dados.

Interface StatementStatement void closeclose ( )

Encerra um comando. boolean executeexecute ( )

Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.

ResultSet executeQueryexecuteQuery ( String comando )Executa um comando de pesquisa e retorna um resultset.

int executeUpdateexecuteUpdate ( String comando )Executa um comando de atualização e retorna o número de linhas atualizadas.

Page 299: Curso de Linguagem Java 2010 - Marcos Mendes

299

API - JDBC

Interface PreparedStatementPreparedStatement void clearParametersclearParameters ( )

Limpa os valores dos parâmetros do comando. boolean executeexecute ( )

Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.

ResultSet executeQueryexecuteQuery ( )Executa o comando de pesquisa e retorna um resultset.

int executeUpdateexecuteUpdate (String sql)Executa o comando de atualização e retorna a quantidade de linhas atualizadas.

void setXXXsetXXX ( int i, XXX x )Ajusta o valor do parâmetro ii com o valor de xx.

Page 300: Curso de Linguagem Java 2010 - Marcos Mendes

300

API - JDBC

Interface ResultSetResultSet boolean absoluteabsolute ( int row )

Move o cursor para uma determinada linha. void afterLastafterLast ( )

Move o cursor para o final do ResultSet. void beforeFirstbeforeFirst ( )

Move o cursor para o início do ResultSet. void cancelRowUpdatescancelRowUpdates ( )

Cancela as atualizações feitas na linha atual. void closeclose ( )

Fecha o ResultSet.

Page 301: Curso de Linguagem Java 2010 - Marcos Mendes

301

API - JDBC void deleteRowdeleteRow ( )

Exclui uma linha. boolean firstfirst ( )

Move o cursor para a primeira linha do ResultSet. XXX getXXXgetXXX ( int coluna )

Retorna o valor de uma coluna da linha corrente.Onde XXX é tipo de dado.

int getRowgetRow ( )Retorna o número da linha corrente.

void insertRowinsertRow ( )Insere o conteúdo da linha de inserção no banco de dados.

boolean isAfterLastisAfterLast( )Indica se o cursor está após a última linha do ResultSet.

Page 302: Curso de Linguagem Java 2010 - Marcos Mendes

302

API - JDBC boolean isBeforeFirstisBeforeFirst( )

Indica se o cursor está antes da primeira linha do ResultSet. boolean lastlast ( )

Move o cursor para a última linha do ResultSet. void moveToInsertRow ( )

Move o cursor para a linha de inserção boolean nextnext ( )

Move o cursor para a próxima linha do ResultSet. boolean previousprevious ( )

Move o cursor para a linha anterior do ResultSet. boolean relativerelative ( int n )

Move o cursor n linhas, para a frente se n for positivo, ou para trás se n for negativo.

void updateRowupdateRow ( )Atualiza o conteúdo da linha corrente no banco de dados.

void updateXXXupdateXXX (int coluna, XXX dado )Define o valor de uma coluna na linha corrente.Onde XXX é o tipo de dado.

Page 303: Curso de Linguagem Java 2010 - Marcos Mendes

303

Exercício

Criar um simples cadastro de funcionários

Cadastro de Funcionários

Nome:

Cargo:

Salário:

Primeiro

Anterior

Próximo Último

Novo Alterar Excluir Sair

Código:

xxx

Page 304: Curso de Linguagem Java 2010 - Marcos Mendes

304

Java Collections Framework (java.util)

Page 305: Curso de Linguagem Java 2010 - Marcos Mendes

305

API Collections

List

LinkedList ArrayList

Set

HashSet SortedSet

Map

HashMap SortedMap

Collection

TreeSet

TreeMap

Tabela de Hash

Tabela de Hash

Árvore Balanceada

Árvore Balanceada

Array Dimensionável

Lista Ligada

Iterator

ListIterator

Page 306: Curso de Linguagem Java 2010 - Marcos Mendes

306

Comentários sobre Estruturas de Dados Arrays

Acesso a um determinado elemento através de seu índice é feito em tempo constante.

Inserção e exclusão de novos elementos depende da quantidade de elementos já existente no array.

Permite uso de busca binária, se o array estiver classificado, caso contrário, exige busca seqüencial.

Listas Ligadas Inserção e exclusão nas extremidades é feita em tempo

constante(pilhas e filas). Busca seqüencial.

Tabelas de Hash Busca, inserção e exclusão praticamente em tempo

constante. Os elementos não são classificados.

Árvores Binárias Balanceadas de Busca Busca, inserção e exclusão em tempo logarítmico. Os elementos são classificados.

Page 307: Curso de Linguagem Java 2010 - Marcos Mendes

307

Comentários sobre Estruturas de Dados

Listas (LinkedList e ArrayList) Permitem duplicidade de elementos. A ordem de inserção dos elementos é mantida.

Conjuntos (HashSet e TreeSet) Não permitem duplicidade de elementos. A ordem de inserção dos elementos não é mantida.

Mapas (HashMap e TreeMap) Os elementos são associados a uma chave. O acesso aos elementos é feito através da chave, e

não através do próprio elemento. Não há duplicidade de chaves.

Page 308: Curso de Linguagem Java 2010 - Marcos Mendes

308

Interface Collection <E> (java.util.Collection)

Alguns Métodos boolean addadd ( E elemento )

Adiciona um elemento à coleção. void clearclear ( )

Remove todos os elementos da coleção. boolean containscontains ( Object elemento )

Retorna true se o elemento estiver contido na coleção. boolean isEmptyisEmpty ( )

Retorna true se a coleção estiver vazia. Iterator <E> iteratoriterator ( )

Retorna um iterador para a coleção. boolean removeremove ( Object elemento )

Remove um elemento da coleção e o retorna. int sizesize ( )

Retorna a quantidade de elementos na coleção. Object [ ] toArraytoArray ( )

Retorna os elementos da coleção na forma de um array.

Page 309: Curso de Linguagem Java 2010 - Marcos Mendes

309

Exemplo Interface Listimport java.util.*;public class ExemploList {

public static void main(String[] args) {ListList<String> lista = new LinkedListLinkedList<String>();//ListList<String> lista = new ArrayListArrayList<String>();lista.add("Maria");lista.add("José");lista.add("Joaquim");System.out.println(lista.size() + " - " + lista);lista.remove("José");System.out.println(lista.size() + " - " + lista);System.out.println("Primeiro nome: " + lista.get(0));String nome = "Joaquim";System.out.println(nome + " está na posição " +

lista.indexOf(nome));System.out.println(lista.size() + " - " + lista);

}}

Page 310: Curso de Linguagem Java 2010 - Marcos Mendes

310

Classe LinkedList<E> (java.util.LinkedList)

Alguns Construtores LinkedList ( ) LinkedList ( Collection c )

Alguns Métodos void addadd ( int índice, E elemento )

Adiciona um elemento à lista. void addFirstaddFirst ( E elemento )

Adiciona um elemento no início da lista. void addLastaddLast ( E elemento )

Adiciona um elemento no final da lista. E elementelement ( )

Retorna, mas não exclui, o elemento no início da lista. E getget ( int índice )

Retorna um elemento da lista.

Page 311: Curso de Linguagem Java 2010 - Marcos Mendes

311

Classe LinkedList<E> (java.util.LinkedList)

E getFirstgetFirst ( )Retorna o primeiro elemento da lista.

E getLastgetLast ( )Retorna o último elemento da lista.

int indexOfindexOf ( Object elemento )Retorna o índice da primeira ocorrência do elemento, -1 se o elemento não estiver contido na lista.

ListIterator<E> listIteratorlistIterator ( )Retorna o iterador da lista.

E removeremove ( int índice )Remove um elemento da lista e o retorna.

E removeFirstremoveFirst ( )Remove o primeiro elemento da lista e o retorna.

E removeLastremoveLast ( )Remove o último elemento da lista e o retorna.

E setset ( int índice, E elemento )Troca um elemento na lista.

Page 312: Curso de Linguagem Java 2010 - Marcos Mendes

312

Exemplo LinkedListimport java.util.*;

public class ExemploLinkedList {public static void main(String[] args) {

LinkedList<String> lista = new LinkedList<String>();lista.add("Maria");lista.addFirst("José");lista.add("Joaquim");System.out.println(lista.size() + " - " + lista);lista.removeFirst();System.out.println(lista.size() + " - " + lista);System.out.println("Último nome: " + lista.getLast());String nome = "José";System.out.println(nome + " está na posição " +

lista.indexOf(nome));}

}

Page 313: Curso de Linguagem Java 2010 - Marcos Mendes

313

Percurso em uma LinkedListimport java.util.*;public class ExemploLinkedList {

public static void main(String[] args) {LinkedList<String> lista = new LinkedList<String>();lista.add("Maria"); lista.add("José"); lista.add("Joaquim");// Percurso do início para o finalIterator<String> item = lista.iterator();while (item.hasNext()) {

System.out.println(item.next());}for (String elemento : lista) {

System.out.println(elemento);}// Percurso do final para o inícioint tamanho = lista.size();ListIterator<String> itemReverso = lista.listIterator(tamanho);while (itemReverso.hasPrevious()) {

System.out.println(itemReverso.previous());}

}}

Page 314: Curso de Linguagem Java 2010 - Marcos Mendes

314

Classe ArrayList<E> (java.util.ArrayList)

Alguns Construtores ArrayList ( ) ArrayList ( int capacidadeInicial )

Alguns Métodos void addadd ( int índice, E elemento )

Adiciona um elemento à lista. E getget ( int índice )

Retorna um elemento da lista. int indexOfindexOf ( Object elemento )

Retorna o índice da primeira ocorrência do elemento, -1 se o elemento não estiver contido na lista.

E removeremove ( int índice )Remove um elemento da lista e o retorna.

E setset ( int índice, E elemento )Troca um elemento na lista.

Page 315: Curso de Linguagem Java 2010 - Marcos Mendes

315

Classe HashSet<E> (java.util.HashSet)

Alguns Construtores HashSet ( ) HashSet ( int capacidadeInicial )

Alguns Métodos boolean addadd ( E elemento )

Adiciona um elemento à coleção. boolean containscontains ( Object elemento )

Retorna true se o elemento estiver contido na coleção. boolean isEmptyisEmpty ( )

Retorna true se a coleção estiver vazia. Iterator <E> iteratoriterator ( )

Retorna o iterador da coleção boolean removeremove ( Object elemento )

Remove o elemento da coleção int sizesize ( )

Retorna a quantidade de elementos da coleção

Page 316: Curso de Linguagem Java 2010 - Marcos Mendes

316

Exemplo HashSetimport java.util.*;public class ExemploHashSet {

public static void main(String[] args) {HashSet<String> conjunto = new HashSet<String>();conjunto.add("Maria");conjunto.add("José");conjunto.add("Joaquim");conjunto.add("Maria");System.out.println("Possui " + conjunto.size() + "

elementos");// Percurso em ordem INDETERMINADA// Percurso em ordem INDETERMINADAIterator<String> item = conjunto.iterator();while (item.hasNext()) {

System.out.println(item.next());}

}}

Page 317: Curso de Linguagem Java 2010 - Marcos Mendes

317

Classe TreeSet<E> (java.util.TreeSet)

Alguns Construtores TreeSet ( ) TreeSet ( Comparator comparador )

Alguns Métodos boolean addadd ( E elemento )

Adiciona um elemento à coleção. void clearclear ( )

Remove todos os elementos da coleção. boolean containscontains ( Object elemento )

Retorna true se o elemento estiver contido na coleção. E firstfirst ( )

Retorna o primeiro elemento da coleção. boolean isEmptyisEmpty ( )

Retorna true se a coleção estiver vazia.

Page 318: Curso de Linguagem Java 2010 - Marcos Mendes

318

Classe TreeSet<E> (java.util.TreeSet)

Iterator <E> iteratoriterator ( )Retorna o iterador da coleção

E lastlast ( )Retorna o último elemento da coleção.

boolean removeremove ( Object elemento )Remove o elemento da coleção

int sizesize ( )Retorna a quantidade de elementos da coleção

Page 319: Curso de Linguagem Java 2010 - Marcos Mendes

319

Exemplo TreeSetimport java.util.*;public class ExemploTreeSet {

public static void main(String[] args) {TreeSet<String> conjunto = new

TreeSet<String>();conjunto.add("Maria");conjunto.add("José");conjunto.add("Joaquim");conjunto.add("Maria");System.out.println("Possui " + conjunto.size() + "

elementos");// Percurso em ordem crescente// Percurso em ordem crescenteIterator<String> item = conjunto.iterator();while (item.hasNext()) {

System.out.println(item.next());}

}}

Page 320: Curso de Linguagem Java 2010 - Marcos Mendes

320

Classe Collections (java.util.Collections)

void sortsort ( List lista )Classifica os elementos de uma lista .

int binarySearchbinarySearch ( List lista, Object chavePesquisa )Retorna o índice I da lista onde o elemento está, ou um valor negativo –I caso a chavePesquisa não seja encontrada. O elemento deve ser inserido na posição (-1 * -I) para a lista continuar ordenada.

Object minmin (Collection coleção )Retorna o menor elemento da lista.

Object maxmax (Collection coleção )Retorna o maior elemento da lista.

void copycopy ( List para, List de)Copia todos os elementos de uma lista para outra.

void fillfill ( List lista, Object valor )Define todas as posições de uma lista com um determinado valor.

void reversereverse ( List lista )Inverte a ordem dos elementos na lista.

Page 321: Curso de Linguagem Java 2010 - Marcos Mendes

321

Interface Map<K, V> (java.util.Map)

Alguns Métodos void clearclear ( )

Remove todos os mapeamentos do mapa. boolean containsKeycontainsKey ( Object chave )

Retorna true se há algum elemento mapeado pela chave. boolean containsValuecontainsValue ( Object valor )

Retorna true se há alguma chave mapeando o valor. Set <Map.Entry <K, V>> entrySetentrySet( )

Retorna um Set contendo os valores mapeados. V getget ( Object chave )

Retorna o elemento mapeado pela chave. Ou nll caso não exista.

boolean isEmptyisEmpty ( )Retorna true se o mapa estiver vazio.

Set <K> keySetkeySet ( )Retorna um Set contendo as chaves do mapa.

V putput ( K chave, V valor )Associa um valor a uma chave no mapa.

Page 322: Curso de Linguagem Java 2010 - Marcos Mendes

322

Interface Map<K, V> (java.util.Map)

Alguns Métodos V removeremove (Object chave)

Remove um mapeamento do mapa. int sizesize ( )

Retorna o número de pares chave-valor do mapa. Collection V valuesvalues ( )

Retorna uma Collection contendo os valores do mapa.

Page 323: Curso de Linguagem Java 2010 - Marcos Mendes

323

Percurso em um Mapimport java.util.*;public class ExemploMap {

static final String[] produtos = {"Laranja", "Melão", "Goiaba"};public static void main(String[] args) {

Map<Integer, Integer> mapa = new HashMap<Integer, Integer>();

mapa.put(1, 5);mapa.put(1, 2);mapa.put(2, 3);System.out.print("O carrinho possui " + mapa.size());System.out.println(" produtos");Set<Integer> carrinho = mapa.keySet();Iterator<Integer> p = carrinho.iterator();while (p.hasNext()) {

Integer item = p.next();System.out.print("Produto: " + produtos[item]);System.out.println(" Quantidade: " + mapa.get(item));

}}

}

Page 324: Curso de Linguagem Java 2010 - Marcos Mendes

324

Classe HashMap<K, V> (java.util.HashMap)

Alguns Construtores HashMap ( ) HashMap ( int capacidadeInicial )

Alguns Métodos void clearclear ( )

Remove todos os elementos da coleção. boolean containsKeycontainsKey ( Object chave )

Retorna true se há algum elemento mapeado pela chave. boolean containsValuecontainsValue ( Object valor )

Retorna true se há alguma chave mapeando o valor. <V> getget ( Object chave )

Retorna o elemento mapeado pela chave. Ou nll caso não exista.

boolean isEmptyisEmpty ( )Retorna true se a coleção estiver vazia.

Page 325: Curso de Linguagem Java 2010 - Marcos Mendes

325

Classe HashMap<K, V> (java.util.HashMap)

<V> putput ( K chave, V valor )Insere um mapeamento na coleção.

boolean removeremove ( Object chave )Remove o elemento mapeado pela chave.

int sizesize ( )Retorna a quantidade de elementos da coleção.

Collection <V> valuesvalues ( )Retorna uma coleção contendo os valores da estrutura.

Page 326: Curso de Linguagem Java 2010 - Marcos Mendes

326

Classe TreeMap<K, V> (java.util.TreeMap)

Alguns Construtores TreeMap ( ) TreeMap ( Comparator comparador )

Alguns Métodos void clearclear ( )

Remove todos os elementos da coleção. boolean containsKeycontainsKey ( Object chave )

Retorna true se há algum elemento mapeado pela chave. boolean containsValuecontainsValue ( Object valor )

Retorna true se há alguma chave mapeando o valor. <E> firstKeyfirstKey ( )

Retorna a primeira chave do mapa. <V> getget ( Object chave )

Retorna o elemento mapeado pela chave. Ou nll caso não exista.

<E> lastKeylastKey ( )Retorna a última chave do mapa.

Page 327: Curso de Linguagem Java 2010 - Marcos Mendes

327

Classe TreeMap<K, V> (java.util.TreeMap)

<V> putput ( K chave, V valor )Insere um mapeamento na coleção.

boolean removeremove ( Object chave )Remove o elemento mapeado pela chave.

int sizesize ( )Retorna a quantidade de elementos da coleção.

Collection <V> valuesvalues ( )Retorna uma coleção contendo os valores do mapa.

Page 328: Curso de Linguagem Java 2010 - Marcos Mendes

328

Classe Properties (java.util.Properties)

Construtores Properties ( ) Properties ( Properties valoresPadrão)

Alguns Métodos void putput (String chave, String valor)

Define um par chave-valor no conjunto de propriedades. String getPropertygetProperty ( String chave )

Retorna o valor associado a uma chave. String getPropertygetProperty ( String chave, String

valorPadrão )Retorna o valor associado a uma chave ou valorPadrão caso a chave não seja encontrada.

void loadload ( InputStream entrada )Carrega um conjunto de propriedades de uma entrada.

void storestore ( OutputStream saída, String comentário )Salva o conjunto de propriedades em uma saída.

Page 329: Curso de Linguagem Java 2010 - Marcos Mendes

329

Exemplo utilizando Propertiesimport java.sql.*;import java.util.*;import java.io.*;public class ExemploProperties {

public static void main ( String args [ ] ) {Properties dados = new Properties();try {

FileInputStream fis = new FileInputStream("nomeArquivoPropriedadesnomeArquivoPropriedades");

dados.load(fis);} catch(FileNotFoundException e) {

e.printStackTrace();} catch (IOException e) {

e.printStackTrace();}String driver = dados.getProperty("jdbcDriverjdbcDriver");String banco = dados.getProperty("urlBancourlBanco");String usuario = dados.getProperty("usuarioBancousuarioBanco");String senha = dados.getProperty("senhaBancosenhaBanco");

Page 330: Curso de Linguagem Java 2010 - Marcos Mendes

330

Exemplo utilizando Properties try {

Class.forName(driver); Connection con = DriverManager.getConnection(banco, usuario, senha); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) { System.out.println( rs.getString(1) + rs.getString(2) ); } } catch (Exception e) {

System.out.println ( e ); }}

}

jdbcDriver=com.mysql.jdbc.Driver

urlBanco=jdbc:mysql://127.0.0.1:3306/uniban

usuarioBanco=root

senhaBanco=admin

Page 331: Curso de Linguagem Java 2010 - Marcos Mendes

331

JPA - Java Persistence API(Beans de Entidade)

Referência Bibliográfica: Enterprise JavaBeans 3.0 Bill Burke & Richard Monson Editora. Prentice Hall Desenvolvendo Aplicações Web com JSP, Servlets, JSF, Hibernate, EJB 3 e Ajax

Edson GonçalvesEditora Ciência Moderna

Revista JavaMagazine edições 39 e 44 Revista MundoJava edição 24 Página da Sun sobre a tecnologia JPA http://java.sun.com/javaee/technologies/persistence.jsp

Page 332: Curso de Linguagem Java 2010 - Marcos Mendes

332

JPA – Java Persistence API Arquitetura

Aplicação Java

Java Persistence API

Provedor JPA

API JDBC

Driver JDBC

BancoDe Dados

Page 333: Curso de Linguagem Java 2010 - Marcos Mendes

333

JPA – Java Persistence API Conceitos

Parte integrante da JavaEE 5 Disponível a partir da Java5 Definida na JSR220 – Enterprise JavaBeans 3.0 Padroniza o Mapeamento Objeto Relacional Não depende de Container para funcionar Baseada no conceito de POJOs (Plain Old Java

Object) Utiliza amplamente Annotations (Progamação

Declarativa) Pacote javax.persistence

Page 334: Curso de Linguagem Java 2010 - Marcos Mendes

334

JPA – Java Persistence API Entidades

Os objetos persistentes são denominados Entities(Entidades)As Classes de Entidades devem atender a alguns requisitos:

Ser anotadas com a anotação javax.persistence.Entity

Possuir um identificador(chave primária) e um construtor public ou protected sem parâmetros (podem ter outros construtores).

Não podem ser declaradas como final. Métodos ou variáveis de instância não podem ser declarados como final.

Se forem passados como parâmetro em uma chamada de método remota, a classe precisa implementar a interface java.io.Serializable.

Page 335: Curso de Linguagem Java 2010 - Marcos Mendes

335

JPA – Java Persistence API Variáveis de instância devem ser declaradas

como private, protected ou "default", e somente podem ser acessadas diretamente por métodos da classe de entidade. Os clientes podem acessar o estado da entidade através de métodos acessores ou métodos de negócio.

Campos Persistentes e Propriedades em uma Classe de EntidadeO estado persistente de uma entidade pode ser acessado através das variáveis de instância ou através de métodos acessores no estilo JavaBeans (getters e setters). O estado é representado através dos seguintes tipos na linguagem Java:

Tipos Java primitivos Java.lang.String

Page 336: Curso de Linguagem Java 2010 - Marcos Mendes

336

JPA – Java Persistence API Outros tipos serializáveis como: Wrappers de

tipos primitivos, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.TimeStamp, tipos serializáveis definidos pelo usuário, byte[], Byte[], char[], Character[], tipos enumerados, outras entidades e/ou coleções de entidades, classes "embeddable".

Outras entidades e/ou Coleções de entidades. Classes embutidas (Embeddable)

O mapeamento do estado das entidades é feito com anotações, ou nos campos persistentes, ou então nos métodos getters, nunca em ambos, em uma única entidade.

Page 337: Curso de Linguagem Java 2010 - Marcos Mendes

337

JPA – Java Persistence API Unidade de Persistência (Persistence Unit)

Conjunto de classes mapeadas para um banco de dados

relacional que são gerenciadas por um Entity Manager.

Esse mapeamento é feito através de um arquivo

descritor de implantação chamado persistence.xmlpersistence.xml

que é gravado na pasta META-INFMETA-INF e que pode conter a

configuração de várias unidades de persistência.

Contexto de Persistência(Persistence Context)

Ambiente (sessão) que envolve o conjunto de instâncias

de entidades gerenciadas pelo Entity Manager.

Page 338: Curso de Linguagem Java 2010 - Marcos Mendes

338

JPA – Java Persistence API Gerenciador de Entidades (Entity Manager)

javax.persistence.EntityManager

Serviço que gerenciará o conjunto de entidades registradas dentro de um contexto. Monitorando as alterações feitas nos objetos deste contexto de persistência, gravando assim essas alterações no banco de dados.

Provedor de Persistência (Persistence Provider)

É como se fosse um driver JPA para uma determinada ferramenta de mapeamento objeto-relacional. Mais especificamente, é a classe que implementa a interface javax.persistence.PersistenceProvider

São alguns exemplos de fornecedores de provedores de persistência:

Oracle TopLink, Hibernate, Kodo, Open JPA, etc.

Page 339: Curso de Linguagem Java 2010 - Marcos Mendes

339

JPA – Java Persistence API Ciclo de Vida / Estados de um objeto

Objeto não existe

DETACHED

NEW

MANAGED

REMOVED

new

remove( )

persist( )merge( )

find( )

clear( ) ou quando o

EntityManager é fechado

Garbage Collector

Page 340: Curso de Linguagem Java 2010 - Marcos Mendes

340

JPA – Java Persistence API Mapeamento Básico de Entidades

É feito com o uso de anotações nas classes persistentes. @Entity@Entity – Marca uma classe como entidade persistente. Esta

classe deve possuir um construtor sem parâmetros. @Table@Table – Define o nome da Tabela onde os objetos serão

persistidos. @Id@Id – Define o atributo que constitui a chave primária. @GeneratedValue@GeneratedValue – Define um campo auto-incremento. @Column@Column – Define o nome da coluna onde o atributo será salvo. @Temporal@Temporal – Fornece informações adicionais ao provedor de

persistência sobre o mapeamento de um atributo do tipo java.util.Date ou java.util.Calendar. Utiliza os valores TemporalType.DATE, TemporalType.TIME ou TemporalType.TIMESTAMP.

@Transient@Transient – Define que um atributo não será salvo no banco de dados.

Page 341: Curso de Linguagem Java 2010 - Marcos Mendes

341

JPA – Java Persistence API Exemplo de Entidade

import javax.persistence.*;

import java.util.*;

@Entity@Entity

@Table (name = "Pessoa")@Table (name = "Pessoa")

public class Pessoa {

@Id@Id

@GeneratedValue (strategy=GenerationType.IDENTITY)@GeneratedValue (strategy=GenerationType.IDENTITY)

@Column (name = "id", nullable = false, columnDefinition = @Column (name = "id", nullable = false, columnDefinition = "integer")"integer")

private int id;

@Column (name = "nome", length = 50, nullable = false)@Column (name = "nome", length = 50, nullable = false)

private String nome;

@Column (name = "dataNasc")@Column (name = "dataNasc")

@Temporal (TemporalType.DATE)@Temporal (TemporalType.DATE)

private Date dataNasc;

//getters e setters omitidos

}

Page 342: Curso de Linguagem Java 2010 - Marcos Mendes

342

JPA – Java Persistence API Exemplo de Entidade (usando mapeamentos

padrão)

import javax.persistence.*;

import java.util.*;

@Entity@Entity

public class Pessoa {

@Id@Id

@GeneratedValue@GeneratedValue

private int id;

private String nome;

@Temporal (TemporalType.DATE)@Temporal (TemporalType.DATE)

private Date dataNasc;

//getters e setters omitidos

}

Page 343: Curso de Linguagem Java 2010 - Marcos Mendes

343

JPA – Java Persistence API No código da aplicação que utiliza classes persistentes:

Criar uma fábrica de Gerenciador de Entidades:EntityManagerFactoryEntityManagerFactory emf =

Persistence.createEntityManagerFactoryPersistence.createEntityManagerFactory("unidade"); Criar um Gerenciador de Entidades através da fábrica:

EntityManagerEntityManager em = emf.createEntityManagercreateEntityManager(); Iniciar uma Transação (Necessário somente em alterações na base de dados):

em.getTransactiongetTransaction().beginbegin(); Criar uma Entidade:

Entidade e = newnew Entidade(); Persistir uma Entidade:

em.persistpersist(e); Localizar uma Entidade:

Entidade e = em.findfind(Entidade.class, chave); Sincronizar uma Entidade:

e = em.mergemerge(e); Eliminar uma Entidade:

em.removeremove(e); Encerrar uma Transação:

em.getTransactiongetTransaction().commitcommit();

Page 344: Curso de Linguagem Java 2010 - Marcos Mendes

344

JPA – Java Persistence API Interface EntityManager (alguns métodos)

void persistpersist(Object objeto)Persiste uma entidade, torna-a gerenciada pelo Gerenciador de Entidades. Qualquer alteração na entidade será refletida no banco de dados.

<T> T mergemerge(T entidade)Sincroniza os dados no banco de dados com os atributos da entidade. Retorna um objeto gerenciado(managed). Não pode ser usado em um objeto REMOVED.

void refreshrefresh(Object entidade)Sincroniza os atributos da entidade com os dados do banco de dados.

void removeremove(Object entidade)Remove uma entidade do banco de dados.

<T> T findfind(Class<T> classeEntidade, Object chavePrimária)Retorna uma entidade(MANAGED) através de sua chave primária. Retorna null caso a chave não seja encontrada.

Page 345: Curso de Linguagem Java 2010 - Marcos Mendes

345

JPA – Java Persistence API Query createQuerycreateQuery(String sql)

Cria uma consulta dinâmica. Query createNamedQuerycreateNamedQuery(String nomeConsulta)

Cria uma consulta nomeada. EntityTransaction getTransactiongetTransaction( )

Retorna a transação do EntityManager.

Interface EntityManager (alguns métodos) void beginbegin( )

Inicia uma transação. void commitcommit( )

Encerra uma transação, gravando quaisquer alterações no banco de dados.

void rollbackrollback( )Desfaz quaisquer alterações desde o início da transação.

Page 346: Curso de Linguagem Java 2010 - Marcos Mendes

346

JPA – Java Persistence API Exemplo de Aplicação JavaSE usando Oracle TopLink

Baixe o Oracle TopLink através do link:

http://www.oracle.com/technology/products/ias/toplink/jpa/

download.html

Coloque o arquivo baixado em uma pasta de trabalho e execute

o seguinte comando nesta pasta:

java -jar glassfish-persistence-installer-v2-bXX.jarjava -jar glassfish-persistence-installer-v2-bXX.jar Isto irá criar uma pasta chamada glassfish-persistenceglassfish-persistence

contendo o arquivo de licença, README e as bibliotecas TopLink

Essentials:

3RD-PARTY-LICENSE.txt

CDDLv1.0.txt

README

toplink-essentials-agent.jartoplink-essentials-agent.jar

toplink-essentials.jartoplink-essentials.jar

Page 347: Curso de Linguagem Java 2010 - Marcos Mendes

347

JPA – Java Persistence API Crie um projeto (Java5 ou superior) e adicione os arquivos .jar

mencionados anteriormente, no classpath, para que se possa utilizar o Oracle TopLink. Não esqueça de adicionar também o .jar do driver JDBC para o seu banco de dados.

Crie a classe persistente chamada PessoaPessoa descrita abaixo:

package modelo;import javax.persistence.*;import java.util.*;

@Entity@Entitypublic class Pessoa {

@Id@Id

@GeneratedValue (strategy=GenerationType.IDENTITY)@GeneratedValue (strategy=GenerationType.IDENTITY)private int id;private String nome;

@Temporal (TemporalType.DATE)@Temporal (TemporalType.DATE)private Date dataNasc;//getters e setters omitidos

}

Page 348: Curso de Linguagem Java 2010 - Marcos Mendes

348

JPA – Java Persistence API Crie o arquivo persistence.xmlpersistence.xml na pasta META-INFMETA-INF dentro da pasta srcsrc

em seu projeto.

<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

<persistence-unit name="testeteste"><provider>

oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvideroracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider><class>modelo.Pessoamodelo.Pessoa</class><properties>

<property name="toplink.logging.level" value="INFOINFO" /><property name="toplink.jdbc.drivertoplink.jdbc.driver"

value="com.mysql.jdbc.Drivercom.mysql.jdbc.Driver" />

Page 349: Curso de Linguagem Java 2010 - Marcos Mendes

349

JPA – Java Persistence API<property name="toplink.jdbc.url"

value="jdbc:mysql://127.0.0.1:3306/unibanjdbc:mysql://127.0.0.1:3306/uniban" /><property name="toplink.jdbc.user" value="rootroot" /><property name="toplink.jdbc.password" value="adminadmin" /><property name="toplink.ddl-generation" value="create-tables" />

</properties></persistence-unit>

</persistence>

Crie o banco de dados de teste com o nome unibanuniban

Page 350: Curso de Linguagem Java 2010 - Marcos Mendes

350

JPA – Java Persistence API Inclusão - Inclusão - Crie a classe da aplicação chamada IncluiPessoaIncluiPessoa e a execute.

package negocio;import modelo.*;import javax.persistence.*;import java.util.*;public class IncluiPessoa { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Pessoa p = new Pessoa();Pessoa p = new Pessoa(); p.setNome("Breno");p.setNome("Breno");

GregorianCalendar data = GregorianCalendar data = new GregorianCalendar(2008, Calendar.FEBRUARY, 25);new GregorianCalendar(2008, Calendar.FEBRUARY, 25);

p.setDataNasc(data.getTime());p.setDataNasc(data.getTime()); em.persist(p); //Torna o objeto MANAGEDem.persist(p); //Torna o objeto MANAGED em.getTransaction().commit(); em.close(); emf.close(); System.out.println("id da pessoa persistida: " + p.getId()); }}

Page 351: Curso de Linguagem Java 2010 - Marcos Mendes

351

JPA – Java Persistence API Implantação da Aplicação (deploy) / Geração de jar executável.

Na pasta raiz do seu projeto, crie um arquivo texto chamado manifest.txt com o seguinte conteúdo:

Main-class: CriaPressoaClass-path: mysql-connector-java-5.0.6-bin.jar toplink-essentials.jar toplink-essentials-agent.jar

Obs.:Obs.: Deve haver um espaço em branco após os dois pontos de cada parâmetro; deve haver uma linha em branco no final do arquivo; os arquivos .jar devem ser separados por espaços em branco e devem estar numa única linha no arquivo.

No prompt de comando, na pasta raiz do seu projeto, digite a seguinte linha de comando:

jar cvfm teste.jar manifest.txt *.class model/*.class META-INF/*

Será gerado um arquivo chamado teste.jar que contém as classes da aplicação.

Copie os arquivos .jar do Oracle TopLink e o .jar do driver JDBC para a pasta onde estiver o arquivo teste.jar.

Para executar a aplicação, digite a seguinte linha de comando:java -jar teste.jar

Page 352: Curso de Linguagem Java 2010 - Marcos Mendes

352

JPA – Java Persistence API Automatização de deploy com o Apache Ant

Baixe o Ant (arquivo: apache-ant-1.7.0-bin.zip) do site: http://ant.apache.org

Descompacte o arquivo na pasta raiz do hd. Renomeie a pasta para "antant". Crie uma variável de ambiente chamada "ANT_HOMEANT_HOME"

contendo o caminho da pasta de instalação do ant:

"set ANT_HOME=c:\ant" Inclua o caminho "%ANT_HOME%\bin%ANT_HOME%\bin" no path do

sistema. Crie um arquivo build.xmlbuild.xml na pasta raiz do seu projeto

com o conteúdo a seguir.

Page 353: Curso de Linguagem Java 2010 - Marcos Mendes

353

JPA – Java Persistence API<?xml version="1.0" encoding="iso-8859-1" ?>

<project name= "teste" default= "implantaJar""implantaJar" >

<target name="implantaJar"name="implantaJar" depends="criaJar"> <copy file="${jarFile}" todir="${deployDir}"

overwrite="yes"/> </target>

<target name="criaJar"name="criaJar" depends="compila"> <jar destfile="${jarFile}" > <fileSet dir="." includes="*.class" /> <fileSet dir="./model" includes="*.class" />

<fileSet dir="./META-INF" includes="**" /> </jar> </target>

Page 354: Curso de Linguagem Java 2010 - Marcos Mendes

354

JPA – Java Persistence API <target name="compila"name="compila" depends="ambiente"> <javac srcdir="." destdir="."> <classpath path=" lib/toplink-essentials.jar" /> <classpath path=" lib/toplink-essentials-agent.jar" /> </javac> <javac srcdir="./model" destdir="./model"> <classpath path=" lib/toplink-essentials.jar" /> <classpath path=" lib/toplink-essentials-agent.jar" /> </javac> </target>

<target name="ambiente"name="ambiente" > <property name="jarFile" value= "./teste.jar""./teste.jar" /> <property name="deployDir" value="." /> </target> </project>

Page 355: Curso de Linguagem Java 2010 - Marcos Mendes

355

JPA – Java Persistence API Integrando o ANT com o Eclipse

Selecione o menu "Project"; Selecione "properties"; Selecione "Builders"; Clique em "new"; Escolha "Ant Build"; Em "Name Buildfile" clique em xxx e

selecione o arquivo de build criado anteriormente;

Com o build selecionado clique no botão "up" até que o "ant build" apareça em primeiro lugar na lista.

Page 356: Curso de Linguagem Java 2010 - Marcos Mendes

356

JPA – Java Persistence API Busca – Busca – Localiza uma entidade através da chave primária.package negocio;import modelo.*;import javax.persistence.*;public class BuscaPessoa { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); Pessoa p = em.find(Pessoa.class, 3); // Retorna um objeto MANAGEDPessoa p = em.find(Pessoa.class, 3); // Retorna um objeto MANAGED if (p != null) { System.out.println("ID: " + p.getId()); System.out.println("Nome: " + p.getNome()); //Objeto está MANAGED, porém, qualquer alteração NÃO será//Objeto está MANAGED, porém, qualquer alteração NÃO será //refletida no banco de dados, pois não há Transação.//refletida no banco de dados, pois não há Transação. p.setNome("Novo Nome"); } else { System.out.println("Pessoa não encontrada!"); } }}

Page 357: Curso de Linguagem Java 2010 - Marcos Mendes

357

JPA – Java Persistence API Alteração – Alteração – Localiza uma entidade através da chave primária e altera

seu estado.package negocio;import modelo.*;import javax.persistence.*;import java.util.*;public class AlteraPessoa { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Pessoa p = em.find(Pessoa.class, 1); Pessoa p = em.find(Pessoa.class, 1); //Retorna um objeto MANAGED//Retorna um objeto MANAGED

if (p != null) {if (p != null) {p.setNome("Novo Nome");p.setNome("Novo Nome");

p.setDataNasc(new Date());p.setDataNasc(new Date());System.out.println("id da pessoa alterada: " + p.getId());System.out.println("id da pessoa alterada: " + p.getId());

}} em.getTransaction().commit();

em.close(); emf.close();

}}

Page 358: Curso de Linguagem Java 2010 - Marcos Mendes

358

JPA – Java Persistence API Exclusão - Exclusão - Localiza uma entidade através da chave primária e a exclui.package negocio;import modelo.*;import javax.persistence.*;public class ExcluiPessoa {

public static void main(String[] args) { EntityManagerFactory emf =

Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); Pessoa p = em.find(Pessoa.class, 8);Pessoa p = em.find(Pessoa.class, 8); if (p != null) {

em.remove(p); /*Objeto torna-se REMOVED, qualquer alteraçãoem.remove(p); /*Objeto torna-se REMOVED, qualquer alteração não será refletida no banco de dados.*/não será refletida no banco de dados.*/ System.out.println("Pessoa excluída: " + p.getId());

System.out.println(" " + p.getNome()); } else {

System.out.println("Pessoa não encontrada!"); } em.getTransaction().commit(); em.close(); emf.close();

}}

Page 359: Curso de Linguagem Java 2010 - Marcos Mendes

359

JPA – Java Persistence API Sincronização - Sincronização - Localiza uma entidade através da chave primária, encerra o

EntityManager, altera o estado da entidade e a sincroniza no banco de dados.

package negocio;import modelo.*;import javax.persistence.*;public class SincronizaPessoa {

public static void main(String[] args) {EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste");EntityManager em = emf.createEntityManager();Pessoa p = em.find(Pessoa.class, 9);Pessoa p = em.find(Pessoa.class, 9);em.close();em.close();if (p != null) {

System.out.println("Nome: " + p.getNome());p.setNome("Nicole");em = emf.createEntityManager();em = emf.createEntityManager();em.getTransaction().begin();em.getTransaction().begin();em.merge(p); //Sincroniza o estado da entidade no banco de dadosem.merge(p); //Sincroniza o estado da entidade no banco de dadosem.getTransaction().commit();em.getTransaction().commit();em.close();em.close();System.out.println("Novo Nome: " + p.getNome());

} else {System.out.println("Pessoa não encontrada!");

}}

}

Page 360: Curso de Linguagem Java 2010 - Marcos Mendes

360

JPA – Java Persistence API Consultas

As consultas são criadas usando-se tanto a linguagem de consulta EJB Query LanguageEJB Query Language (também chamada de JPA QLJPA QL) como a SQL nativa. A EJB QL é semelhante à SQL, só que orientada a objetos e portável para diferentes implementações de bancos de dados.

São executadas por meio da interface javax.persistence.Queryjavax.persistence.Query que é muito parecida com a interface java.sql.PreparedStatementjava.sql.PreparedStatement. Essa interface Query é obtida em tempo de execução a partir do gerenciador de entidade.

As consultas podem ser criadas dinamicamente em tempo de execução ou pré-declaradas por meio de anotações nas classes persistentes ou através de XML.

Page 361: Curso de Linguagem Java 2010 - Marcos Mendes

361

JPA – Java Persistence API Interface Query (javax.persistence.Query)

Alguns Métodos List getResultListgetResultList ( )

Executa uma consulta e retorna uma coleção de resultados.

Object getSingleResultgetSingleResult ( )

Executa uma consulta e retorna um único resultado. int executeUpdateexecuteUpdate ( )

Executa um comando de atualização(insert, update ou delete) e retorna o número de linhas afetadas no banco de dados.

Query setMaxResultssetMaxResults (int máximo)

Define o número máximo de entidades que deve ser retornado na consulta.

Page 362: Curso de Linguagem Java 2010 - Marcos Mendes

362

JPA – Java Persistence API Query setFirstResultsetFirstResult (int início)

Define o número da linha inicial que irá compor o resultado da consulta.

void setParametersetParameter (String nome, Object valor)

Define o valor de um parâmetro através de seu nome. Query setParametersetParameter (String nome, Date valor, TemporalType

tipo)

Define o valor de um parâmetro do tipo data através de seu nome.

Query setParametersetParameter (int posição, Object valor)

Define o valor de um parâmetro através de sua posição. Query setParametersetParameter (int posição, Date valor, TemporalType

tipo)

Define o valor de um parâmetro do tipo data através de sua posição.

Page 363: Curso de Linguagem Java 2010 - Marcos Mendes

363

JPA – Java Persistence API Consultas Dinâmicas

São criadas pelo gerenciador de entidades através do método createQuerycreateQuery().

Consulta que retorna um único resultado:try {

Query consulta = em.createQuerycreateQuery( "Select a from Aluno a where a.ra = :ra:ra"); consulta.setParametersetParameter("rara", 123456789); Aluno a = (Aluno) consulta.getSingleResultgetSingleResult(); System.out.println("RA: " + a.getRa()); System.out.println("Nome: " + a.getNome());} catch(NoResultExceptionNoResultException ex) { System.out.println("Aluno não encontrado");} catch(NonUniqueResultExceptionNonUniqueResultException ex) { System.out.println("Mais que um resultado

encontrado");}

Page 364: Curso de Linguagem Java 2010 - Marcos Mendes

364

JPA – Java Persistence API Os parâmetros da consulta são ajustados através

do método setParametersetParameter( ) e podem ser indicados através de duas formas:

Identificados, utilizando-se :: (dois pontos) e um nome;

Query consulta = em.createQuerycreateQuery( "Select a from Aluno a where a.ra = :ra:ra and a.nome

= :nome:nome );consulta.setParametersetParameter("rara", 123456789);consulta.setParametersetParameter("nomenome", "Maria");

Seqüenciados, utilizando-se ?? (interrogação) e um número sequencial.

Query consulta = em.createQuerycreateQuery( "Select a from Aluno a where a.ra = ?1?1 and a.nome = ?2?2 )

consulta.setParametersetParameter(11, 123456789);consulta.setParametersetParameter(22, "Maria");

Page 365: Curso de Linguagem Java 2010 - Marcos Mendes

365

JPA – Java Persistence APIpackage negocio;import modelo.*;

import javax.persistence.*;

public class BuscaPorRA { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); try { Query consulta = em.createQuery("Select a from Aluno a where Query consulta = em.createQuery("Select a from Aluno a where

a.ra = :ra");a.ra = :ra"); consulta.setParameter("ra", 123456789);consulta.setParameter("ra", 123456789); Aluno a = (Aluno)consulta.getSingleResult();Aluno a = (Aluno)consulta.getSingleResult(); System.out.println("RA: " + a.getRa()); System.out.println("Nome: " + a.getNome()); } catch(NoResultExceptionNoResultException ex) { System.out.println("Aluno não encontrado"); } catch(NonUniqueResultExceptionNonUniqueResultException ex) { System.out.println("Mais que um resultado encontrado"); } em.close(); emf.close(); }}

Consulta que retorna um único resultado

Page 366: Curso de Linguagem Java 2010 - Marcos Mendes

366

JPA – Java Persistence API Consulta que retorna os resultados em uma

java.util.List:

Query consulta = em.createQuerycreateQuery( "Select a from Aluno a where a.ms1

> :media:media"); consulta.setParametersetParameter("mediamedia", 5); ListList <Aluno>alunos = consulta.getResultListgetResultList();

if (!!alunos.isEmptyisEmpty()) { for (Aluno a : alunos) {

System.out.println("Nome: " + a.getNome()); } } else { System.out.println("Alunos não encontrados"); }

Page 367: Curso de Linguagem Java 2010 - Marcos Mendes

367

JPA – Java Persistence APIpackage negocio;import java.util.List;import modelo.*;import javax.persistence.*;public class ConsultaPorMedia { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager();

Query consulta = em.createQuery( "Select a from Aluno a where a.ms1 > :media"); consulta.setParameter("media", 5); List <Aluno>alunos = consulta.getResultList(); if (!alunos.isEmpty()) { for (Aluno a : alunos) { System.out.println("Nome: " + a.getNome()); } } else { System.out.println("Alunos não encontrados"); }

em.close(); emf.close(); }}

Consulta que retorna umacoleção de resultados

Page 368: Curso de Linguagem Java 2010 - Marcos Mendes

368

JPA – Java Persistence API Consulta que utiliza um java.util.Date como

parâmetro:

Query consulta = em.createQuerycreateQuery( "Select a from Aluno a where a.DataMatricula

= :data:data"); consulta.setParametersetParameter("datadata", new java.util.Date,

TemporalType.DATETemporalType.DATE); ListList <Aluno>alunos = consulta.getResultListgetResultList();

if (!!alunos.isEmptyisEmpty()) { for (Aluno a : alunos) {

System.out.println("Nome: " + a.getNome()); } } else { System.out.println("Alunos não encontrados"); }

Page 369: Curso de Linguagem Java 2010 - Marcos Mendes

369

JPA – Java Persistence API Consulta com paginação de resultados:

public static List getAlunos(int maximo, int inicio) {Query consulta = em.createQuery("Select a from

Aluno a");return consulta.setMaxResultssetMaxResults(maximo).

setFirstResultsetFirstResult(inicio).getResultListgetResultList();

}

Page 370: Curso de Linguagem Java 2010 - Marcos Mendes

370

JPA – Java Persistence APIpackage negocio;import modelo.*;import javax.persistence.*;import java.util.List;public class ConsultaPaginada {

static EntityManagerFactory emf;static EntityManager em;

public static List getAlunos(int maximo, int inicio) {Query consulta = em.createQuery("Select a from Aluno a");return consulta.setMaxResults(maximo).

setFirstResult(inicio).getResultList();

}

Consulta com paginaçãode resultados

Page 371: Curso de Linguagem Java 2010 - Marcos Mendes

371

JPA – Java Persistence APIpublic static void main(String[] args) {

emf = Persistence.createEntityManagerFactory("teste");em = emf.createEntityManager();int inicio = 1, maximo = 3;int pagina = 1;List <Aluno> alunos = null;do {

alunos = getAlunos(maximo, inicio);if (!alunos.isEmpty()) {

System.out.println("Pág. " + pagina);for (Aluno a : alunos) {

System.out.println("Nome: " + a.getNome());}

}inicio += maximo;pagina++;

} while (!alunos.isEmpty());em.close();emf.close();

}}

Page 372: Curso de Linguagem Java 2010 - Marcos Mendes

372

JPA – Java Persistence API Consultas Nomeadas (Identificadas)

São consultas pré-definidas na classe da entidade e podem ser reutilizadas em diferentes pontos da sua aplicação, facilitando assim sua manutenção.

São declaradas através das anotações @NamedQueries@NamedQueries(define um array de consultas nomeadas) e @NamedQuery@NamedQuery(define uma consulta nomeada).

São criadas pelo gerenciador de entidades através do método createNamedQuerycreateNamedQuery().

@NamedQueries@NamedQueries({@NamedQuery@NamedQuery(name = "consultaPorRAconsultaPorRA",

query = "Select a from Aluno a where a.ra = :ra"),@NamedQuery@NamedQuery(name = "consultaPorMediaconsultaPorMedia",

query = "Select a from Aluno a where a.ms1 > :media")})

Query consulta = em.createNamedQuerycreateNamedQuery("consultaPorMediaconsultaPorMedia");

consulta.setParameter("media", 5);

Na entidade

Na aplicação

Page 373: Curso de Linguagem Java 2010 - Marcos Mendes

373

JPA – Java Persistence APIpackage modelo;import javax.persistence.*;@NamedQueries( {@NamedQueries( {

@NamedQuery(name = "buscaPorRA", @NamedQuery(name = "buscaPorRA", query = "Select a from Aluno a where a.ra = :ra"),query = "Select a from Aluno a where a.ra = :ra"),

@NamedQuery(name = "consultaPorMedia", @NamedQuery(name = "consultaPorMedia", query = "Select a from Aluno a" + query = "Select a from Aluno a" +

" where (a.ms1*0.3 + a.ms2*0.7) > :media")," where (a.ms1*0.3 + a.ms2*0.7) > :media"),@NamedQuery(name = "aumentaMedia", @NamedQuery(name = "aumentaMedia",

query = "Update Aluno set ms1 = ms1 + :bonus"),query = "Update Aluno set ms1 = ms1 + :bonus"),})})@Entitypublic class Aluno {

@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private int id;private String nome;private long ra;private double ms1;private double ms2;// getters e setters omitidos// getters e setters omitidos

}

Utilização de Consulta NomeadaClasse da EntidadeClasse da Entidade

Page 374: Curso de Linguagem Java 2010 - Marcos Mendes

374

JPA – Java Persistence APIpackage negocio;import modelo.*;import javax.persistence.*;import java.util.List;public class ConsultaNomeada { public static void main(String[] args) { EntityManagerFactory emf =

Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager();

Query consulta = Query consulta = em.createNamedQuery("consultaPorMedia");em.createNamedQuery("consultaPorMedia");

consulta.setParameter("media", 5);consulta.setParameter("media", 5); List <Aluno>alunos = consulta.getResultListgetResultList(); if (!alunos.isEmpty()) { for (Aluno a : alunos) { System.out.println("Nome: " + a.getNome()); } } else { System.out.println("Alunos não encontrados"); }

em.close(); emf.close(); }}

Utilização de Consulta NomeadaClasse da AplicaçãoClasse da Aplicação

Page 375: Curso de Linguagem Java 2010 - Marcos Mendes

375

JPA – Java Persistence API Alterações em Lote

São criadas pelo gerenciador de entidades da mesma forma que as consultas.

Podem ser tanto dinâmicas como nomeadas. São executadas através do método

executeUpdateexecuteUpdate() que retorna o número de linhas afetadas.

Query alteracao = em.createQuerycreateQuery(

"UpdateUpdate Aluno set ms1 = ms1 + :bonus:bonus");

alteracao.setParametersetParameter("bonusbonus", 0.5);

intint qtdAlunos = alteracao.executeUpdateexecuteUpdate();

Page 376: Curso de Linguagem Java 2010 - Marcos Mendes

376

JPA – Java Persistence APIpackage negocio;

import javax.persistence.*;

public class AumentaMedia { public static void main(String[] args) { EntityManagerFactory emf =

Persistence.createEntityManagerFactory("teste"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin();

Query alteracao = em.createQuery( Query alteracao = em.createQuery( "Update Aluno set ms1 = ms1 "Update Aluno set ms1 = ms1

+ :bonus");+ :bonus"); alteracao.setParameter("bonus", 0.5);alteracao.setParameter("bonus", 0.5); int qtdAlunos = alteracao.executeUpdate();int qtdAlunos = alteracao.executeUpdate();

System.out.println(qtdAlunos + " Alunos bonificados");

em.getTransaction().commit(); em.close(); emf.close(); }}

Alteração em lote

Page 377: Curso de Linguagem Java 2010 - Marcos Mendes

377

JPA – Java Persistence API Eventos de Retorno de Chamada

Através das anotações abaixo, pode-se definir métodos que serão executados em resposta a um evento do ciclo de vida de uma entidade.

@PrePersist@PrePersistDefine o método a ser executado logo após a uma chamada de EntityManager.persist().

@PostPersist@PostPersistDefine o método a ser executado após a inserção no banco de dados.

@PostLoad@PostLoadDefine o método a ser executado após a uma chamada de EntityManager.find(), EntityManager.refresh(), ou quando uma consulta EJB QL é executada.

Page 378: Curso de Linguagem Java 2010 - Marcos Mendes

378

JPA – Java Persistence API @PreUpdate@PreUpdate

Define o método a ser executado antes do estado de uma entidade ser sincronizado com o banco de dados.

@PostUpdate@PostUpdateDefine o método a ser executado após o estado de uma entidade ser sincronizado, isso ocorre na confirmação de uma transação, após uma chamada a EntityManager.flush() ou sempre que o contexto de persistência atualizar o banco de dados.

@PreRemove@PreRemoveDefine o método a ser executado após a uma chamada de EntityManager.remove().

@PostRemove@PostRemoveDefine o método a ser executado após a exclusão no banco de dados ser efetivada.

Pesquise também sobre Ouvintes de entidade.

Page 379: Curso de Linguagem Java 2010 - Marcos Mendes

379

JPA – Java Persistence APIpackage modelo;import java.io.*;import java.util.Date;import javax.persistence.*;

@Entitypublic class Aluno {

...@PrePersist@PrePersistvoid prePersist() {

try {FileOutputStream fos = new FileOutputStream("log.txt", true);String linha = "Aluno " + getNome() + " gravado em " + new

Date() + "\n"; fos.write(linha.getBytes());fos.close();fos.close();

} catch (IOException e) {e.printStackTrace();

}}

}

Exemplo de Arquivo de Log

Page 380: Curso de Linguagem Java 2010 - Marcos Mendes

380

JPA – Java Persistence API Exemplo de Aplicação Swing com

JPA

Page 381: Curso de Linguagem Java 2010 - Marcos Mendes

381

JPA – Java Persistence API Relacionamentos e Agregações

Em construção!!!

Page 382: Curso de Linguagem Java 2010 - Marcos Mendes

382

EJB – Enterprise JavaBeans

Referência Bibliográfica: Enterprise JavaBeans 3.0 Bill Burke & Richard Monson Editora. Prentice Hall Tutorial do J2EE Bodoff – Green – Haase – Jendrock - Pawlan – Stearns Editora Campus Revista JavaMagazine edições 8, e 47 Tutorial da Sun sobre JavaEE

http://java.sun.com/javaee/5/docs/tutorial/doc/

Page 383: Curso de Linguagem Java 2010 - Marcos Mendes

383

Aplicações MultiCamadasCamadaCliente

Camada Web Camada EIS

Bancos de Dados

RequestRequestHttpServletRequestHttpServletRequest

ResponseResponseHttpServletResponseHttpServletResponse

HTMLXMLJavaScriptApplet

Servlet JSP

MainFrame

Servidor de Servidor de Aplicações / Aplicações /

Servidor Servidor WebWeb

Aplicação Desktop / Web

JCA

EJB

Camada deNegócios

JPA / JDBC

Aplicações JavaDesktop

Page 384: Curso de Linguagem Java 2010 - Marcos Mendes

384

EJB – Enterprise JavaBeans EJB – Enterprise JavaBean

Componente de software padrão executado no lado servidor (camada de negócios) que encapsula a lógica que atende às necessidades de um domínio de negócios. É utilizado na criação de aplicações corporativas distribuídas desenvolvidas com a tecnologia Java.

Contêiner EJBÉ o ambiente responsável por gerenciar o ciclo de vida das instâncias das classes bean(objetos EJB) dentro de um servidor de aplicações.

Servidor de Aplicações JavaEESistema que deve implementar os seguintes serviços:

Enterprise JavaBeans (EJB) – Contêiner EJB Java Persistence (JPA) Java Message Service (JMS) Java Transaction Service/Java Transaction API (JTS/JTA) Servlets e JavaServer Pages (JSP) – Contêiner Web Java Naming and Directory Interface (JNDI)

Page 385: Curso de Linguagem Java 2010 - Marcos Mendes

385

EJB – Enterprise JavaBeansDisponibiliza também entre outros recursos:

Pool de Instâncias EJB Pool de Conexões a Bancos de Dados Controle de Concorrência Conectividade Remota Gerenciamento de Segurança

Autenticação (identificação do usuário) Autorização (controle do que um usuário pode acessar) Comunicação (criptografia)

Quando usar EJB em suas aplicações Quando a aplicação deve ser escalável, tanto por possuir um número

crescente de usuários, como a aplicação pode estar distribuída em múltiplas máquinas.

Quando transações são necessárias para garantir a integridade dos dados.

Quando a aplicação possuir um alto número de clientes. Como a lógica de negócio fica nos componentes no lado servidor, a manutenção é facilitada.

Page 386: Curso de Linguagem Java 2010 - Marcos Mendes

386

EJB – Enterprise JavaBeans Os três tipos básicos de Enterprise JavaBeans:

Beans de Entidadade – Entity Beans (JPA-Entity)São persistentes, representam o modelo persistente de dados. São gerenciados pelo serviço EntityManager.

Beans de Sessão – Session BeansNão são persistentes. São freqüentemente utilizados para gerenciar as interações entre os beans de entidade. Representam um fluxo de tarefa, um processo de negócio.

Beans baseados em mensagens – Message Driven Beans Recebem e processam mensagens assincronamente. São utilizados na interação com outros aplicativos através de um serviço de mensagens (JMS).

Não possuem interfaces Local, nem Remota. Normalmente implementam a interface MessageListener,MessageListener, implementando assim o método onMessage()onMessage() onde se localiza a lógica de negócio.

Page 387: Curso de Linguagem Java 2010 - Marcos Mendes

387

EJB – Enterprise JavaBeans Beans de Sessão – Session Beans

Stateful SessionBean (Beans de sessão com informações de estado)

Mantém o estado conversacional entre as chamadas de um cliente para o servidor, o que permite manter dados específicos ao cliente entre invocações de método. É uma extensão do aplicativo cliente. Não são mantidos em um pool de instâncias.

Stateless SessionBean (Beans de sessão sem informações de estado)

Não mantém nenhum estado conversacional entre o cliente e o servidor. São mantidos em um pool de instâncias. Possuem um desempenho maior que os beans de sessão com informações de estado. São utilizados para realizar tarefas que sejam realizadas em uma única chamada de método.

Page 388: Curso de Linguagem Java 2010 - Marcos Mendes

388

EJB – Enterprise JavaBeans Componentes de um aplicativo que utiliza

SessionBean. Interfaces Remota e/ou Local

Interface remotaAnotada com @[email protected] quais os métodos que um cliente tem permissão para invocar.

Interface localAnotada com @[email protected] quais os métodos que um outro EJB pode invocar dentro da mesma JVM.

Classe do Bean

Anotada com @[email protected] ou @[email protected]

Contém a lógica de negócio, implementando os métodos descritos nas interfaces remota e/ou local e opcionalmente as interfaces de negócio.

Cliente Remoto

Aplicação que se conecta ao servidor EJB. Por meio da API JNDI, ele localiza a interface remota do EJB a ser utilizado e através da referência dessa interface aciona os métodos remotos do componente EJB.

Page 389: Curso de Linguagem Java 2010 - Marcos Mendes

389

Instalação e configuração do JBoss Baixe o JBoss no site

http://jboss.com/products/jbossas/downloads Para Windows, baixe o arquivo jems-installer-jems-installer-

1.2.0.GA.jar1.2.0.GA.jar e execute-o. Na tela de configuração do tipo de instalção, selecione a

opção EJB3EJB3.

Page 390: Curso de Linguagem Java 2010 - Marcos Mendes

390

Instalação e configuração do JBoss Nas demais telas, apenas clique em next, selecionando

assim as opções padrão. Para iniciar o servidor, basta executar o arquivo de lote

run.batrun.bat na pasta bin do diretório de instalação. Para encerrar o servidor, pressione <Ctrl><C><Ctrl><C> no prompt de comandos onde o servidor está sendo executado ou execute o arquivo de lote shutdown.batshutdown.bat com a opção --SS.

Acesso o endereço http://localhost:8080http://localhost:8080 para verificar a instalação.

É aconselhável que se crie uma variável de ambiente JBOSS_HOMEJBOSS_HOME contendo o caminho do diretório de instalação do JBoss.

Page 391: Curso de Linguagem Java 2010 - Marcos Mendes

391

EJB – Enterprise JavaBeans Construção da aplicação exemplo usando JBoss

Crie um novo projeto Java e adicione no classpath os arquivos jboss-ejb3x.jarjboss-ejb3x.jar e ejb3-persistenceejb3-persistence que se encontram na pasta: %JBOSS_HOME%/client/%JBOSS_HOME%/client/

Torne a classe modelo.Alunomodelo.Aluno serializável. Pois os objetos dessa classe irão trafegar pela rede.

Crie no pacote negocio.ejbnegocio.ejb a Interface Remota AlunoRemoteAlunoRemote. Adicione o projeto que contém a classe modelo.Aluno no

buildpath.

package negocio.ejb;

import javax.ejb.*;import javax.ejb.*;import modelo.Aluno;

@Remote@Remotepublic interface AlunoRemoteAlunoRemote {

public int incluirincluir(Aluno a);}

Interface Remota

Page 392: Curso de Linguagem Java 2010 - Marcos Mendes

392

EJB – Enterprise JavaBeans Crie no pacote negocio.ejbnegocio.ejb a classe do bean AlunoBeanAlunoBean

package negocio.ejb;

import modelo.Aluno;

import javax.persistence.*;

import javax.ejb.*;import javax.ejb.*;

@Stateless@Stateless

public class AlunoBeanAlunoBean implements AlunoRemoteAlunoRemote {

@PersistenceContext(unitName = "teste")@PersistenceContext(unitName = "teste")

private EntityManager em;private EntityManager em;

public int incluirincluir(Aluno a) {

em.persist(a);

return a.getId();

}

}

Classe do Bean

Page 393: Curso de Linguagem Java 2010 - Marcos Mendes

393

EJB – Enterprise JavaBeans Crie no pacote clientecliente a classe ClienteAlunoEJBClienteAlunoEJBpackage cliente;import modelo.*;import negocio.ejb.*;import javax.naming.*;import javax.naming.*;import java.util.*;

public class ClienteAlunoEJB {public static void main(String[] args) {

try {Properties prop = new Properties();prop.put(Context.INITIAL_CONTEXT_FACTORY,

"org.jboss.naming.NamingContextFactory");prop.put(Context.PROVIDER_URL, "localhost:1099");InitialContext jndiContext = new InitialContext(prop);InitialContext jndiContext = new InitialContext(prop);Object ref = jndiContext.lookup("AlunoBean/remote");Object ref = jndiContext.lookup("AlunoBean/remote");AlunoRemote refBean = (AlunoRemote) ref;AlunoRemote refBean = (AlunoRemote) ref;

Cliente Remoto

Configuração do Contexto JNDI (dependente do servidor)

Page 394: Curso de Linguagem Java 2010 - Marcos Mendes

394

EJB – Enterprise JavaBeansAluno a = new Aluno();

a.setNome("José");

a.setRa(987654321);

a.setMs1(7.5);

a.setMs2(6.0);

int id = refBean.incluir(a);

System.out.println("Id do aluno inserido " + id);

} catch (NamingException ex) {

ex.printStackTrace();

}

}

}

Page 395: Curso de Linguagem Java 2010 - Marcos Mendes

395

EJB – Enterprise JavaBeans Implantação da aplicação.

Os arquivos Aluno.classAluno.class, AlunoBean.classAlunoBean.class,

AlunoRemote.classAlunoRemote.class e o persistence.xmlpersistence.xml serão empacotados em um arquivo .jar e implantados no diretório de deploy do servidor JBoss.

Para se executar a aplicação, algumas configurações deverão ser efetuadas previamente:

Criação de uma Fonte de Dados para o Banco MySQLMySQL.

Criação do arquivo persistence.xmlpersistence.xml.

Criação de um arquivo de build (build.xml) para automatizar a implantação através do aplicativo

Apache AntApache Ant.

Page 396: Curso de Linguagem Java 2010 - Marcos Mendes

396

EJB – Enterprise JavaBeans Configure o JBoss para fazer conexão com o MYSQL.

Crie o arquivo testedb-ds.xmltestedb-ds.xml na pasta %JBOSS_HOME%JBOSS_HOME%/server/default/deploy%/server/default/deploy

<?xml version="1.0" encoding="UTF-8"?>

<datasources> <local-tx-datasource> <jndi-name>TesteDSTesteDS</jndi-name> <connection-url>

jdbc:mysql://localhost:3306/unibanjdbc:mysql://localhost:3306/uniban </connection-url>

<driver-class>com.mysql.jdbc.Drivercom.mysql.jdbc.Driver</driver-class>

<user-name>rootroot</user-name> <password>adminadmin</password> </local-tx-datasource></datasources> Copie o driver JDBC do MySQL para a pasta

%JBOSS_HOME%/server/default/lib%JBOSS_HOME%/server/default/lib

Configuração da Fonte de Dados

Page 397: Curso de Linguagem Java 2010 - Marcos Mendes

397

EJB – Enterprise JavaBeans Crie o arquivo persistence.xmlpersistence.xml na pasta META-INFMETA-INF

em seu projeto.

<persistence><persistence-unit name="testeteste">

<jta-data-source>java:/TesteDSjava:/TesteDS</jta-data-source> <properties>

<property name="hibernate.hbm2ddl.auto" value="update"/>

</properties></persistence-unit>

</persistence>

Configuração do persistence.xml

Page 398: Curso de Linguagem Java 2010 - Marcos Mendes

398

EJB – Enterprise JavaBeans Crie o arquivo build.xmlbuild.xml na pasta raiz do seu projeto.

<?xml version="1.0"?><project name="ExemploAlunoEJBExemploAlunoEJB" default="ejbjar"

basedir="."> <property environment="env"/> <property name="src.dir" value="${basedir}"/> <property name="jboss.home" value="${env.JBOSS_HOME}"/> <property name="build.dir" value="${basedir}/build"/> <property name="build.classes.dir"

value="${build.dir}/classes"/>

<!-- Local onde estão as classes persistentes --><!-- Local onde estão as classes persistentes --> <property name="modelo"

value="/JavaProg/ProjetoJPA//JavaProg/ProjetoJPA/modelo"/>

Criação do arquivo de build

Page 399: Curso de Linguagem Java 2010 - Marcos Mendes

399

EJB – Enterprise JavaBeans<!-- Construção do classpath --><!-- Construção do classpath --> <path id="classpath"> <fileset dir="${jboss.home}/server/default/lib"> <include name="*.jar"/> </fileset> <fileset dir="${jboss.home}/server/default/deploy/ejb3.deployer"> <include name="*.jar"/> </fileset> <fileset dir="${jboss.home}/server/default/deploy/jboss-aop-

jdk50.deployer"> <include name="*.jar"/> </fileset> <fileset dir="${jboss.home}/lib"> <include name="*.jar"/> </fileset> <fileset dir="${modelo}"> <include name="*.class"/> </fileset>

<pathelement location="${build.classes.dir}"/></path><property name="build.classpath" refid="classpath"/>

Page 400: Curso de Linguagem Java 2010 - Marcos Mendes

400

EJB – Enterprise JavaBeans<!-- Prepara o diretório de build --><!-- Prepara o diretório de build --> <target name="prepare" > <mkdir dir="${build.dir}"/> <mkdir dir="${build.classes.dir}"/>

<mkdir dir="${build.classes.dir}/modelo"/><copy file="${modelo}/Aluno.class" todir="${build.classes.dir}/modelo"/>

</target>

<!-- Compila os arquivos de código fonte --><!-- Compila os arquivos de código fonte --> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="**"> <classpath refid="classpath"/> </javac> </target>

Page 401: Curso de Linguagem Java 2010 - Marcos Mendes

401

EJB – Enterprise JavaBeans<!-- Cria o arquivo jar e o implanta no servidor de aplicações--><!-- Cria o arquivo jar e o implanta no servidor de aplicações--> <target name="ejbjar" depends="compile">

<jar jarfile="build/alunoEJB.jaralunoEJB.jar"> <fileset dir="${build.classes.dir}"> <include name="modelo/*.class"/> <include name="negocio/ejb/*.class"/> </fileset> <fileset dir="${basedir}/"> <include name="META-INF/persistence.xml"/> </fileset> </jar> <copy file="build/alunoEJB.jaralunoEJB.jar"

todir="${jboss.home}/server/default/deploy"/> </target>

<!-- Executa o cliente --><!-- Executa o cliente --> <target name="run.client" depends="ejbjar"> <java classname="cliente.ClienteAlunoEJB" fork="yes" dir="."> <classpath refid="classpath"/> </java> </target>

</project>

Page 402: Curso de Linguagem Java 2010 - Marcos Mendes

402

EJB – Enterprise JavaBeans Abra uma janela do prompt de comando. Mude o diretório corrente para a pasta raiz do seu

projeto. Implante a aplicação digitando o comando.

> antant Inicie o servidor de aplicações JBoss executando o

arquivo run.batrun.bat na pasta %JBOSS_HOME%/bin%JBOSS_HOME%/bin Execute o cliente remoto digitando o comando

> ant run.clientant run.client

Page 403: Curso de Linguagem Java 2010 - Marcos Mendes

403

EJB – Enterprise JavaBeans

Ciclo de Vida de um Stateful Session Bean

Page 404: Curso de Linguagem Java 2010 - Marcos Mendes

404

EJB – Enterprise JavaBeans

Ciclo de Vida de um Stateles Session Bean

Page 405: Curso de Linguagem Java 2010 - Marcos Mendes

405

EJB – Enterprise JavaBeans

Ciclo de Vida de um Message-Driven Bean

Page 406: Curso de Linguagem Java 2010 - Marcos Mendes

406

EJB – Enterprise JavaBeans

Exemplo de Aplicação Swing com EJB SessionBean e JPA-Entity

Page 407: Curso de Linguagem Java 2010 - Marcos Mendes

407

Aplicações WEBServlets

Page 408: Curso de Linguagem Java 2010 - Marcos Mendes

408

Requisição / Resposta

Browser

service()

doGet()

doPost()

doPut()

doDelete()

doOption()

doTrave()

Cliente Container Web

Request

Response

Page 409: Curso de Linguagem Java 2010 - Marcos Mendes

409

Aplicações Executadas no Servidor Servidor Web HTTP

JavaServer Web Development Kit (JSWDK). Jakarta TomCatJakarta TomCat. Configuração e ativação do Servidor.

Servlets Formato de um Servlet. API Servlet (pacotes javax.servlet e javax.servlet.http)

. Exemplo (TestServlet.java) Invocando o Servlet via formulário HTML. Gravação de dados de um formulário HTML em um

Banco de Dados Remoto. Exibição de dados de um Banco de Dados em uma

página HTML. Invocando o Servlet através de uma applet.

Page 410: Curso de Linguagem Java 2010 - Marcos Mendes

410

Instalação do Jakarta Tomcat

Baixe o Tomcat no endereço:

http://jakarta.apache.org/tomcat/http://jakarta.apache.org/tomcat/ Clique no link downloaddownload;

Clique no link binariesbinaries;

Procure por Tomcat 5.0.25 keysTomcat 5.0.25 keys (ou mais recente);

Clique em 5.0.25 exe5.0.25 exe (arquivo de instalação

executável).

Após o download, execute o arquivo baixado. Aceite as opções padrão.

Após instalado, inicie o browser e acesse o

endereço http://localhost:8080/http://localhost:8080/

Page 411: Curso de Linguagem Java 2010 - Marcos Mendes

411

Instalação do Plugin EclipseHtmlEditor

Baixe o EclipseHtmlEditorEclipseHtmlEditor no endereço:

http://amateras.sourceforge.jp/

Após o download, descompacte o arquivo na pasta

"plugins" do Eclipse ("c:/eclipse").

O GEF(Graphical Editing Framework) é um pré-requisito

para o EclipseHtmlEditor. Baixe o arquivo do próprio site

do Eclipse e o descompacte na pasta do Eclipse

("c:/eclipse").

Page 412: Curso de Linguagem Java 2010 - Marcos Mendes

412

Instalação do TomcatPlugin para o Eclipse

Baixe o TomcatPluginTomcatPlugin no endereço: http://www.sysdeo.com/eclipse/tomcatplugin

Após o download, descompacte o arquivo na pasta "plugins" do Eclipse ("c:/eclipse/plugins").

Inicie o Eclipse, abra o menu "Window", selecione "Preferences" e clique na opção "Tomcat".

Na janela "Preferences": Marque a versão instalada do Tomcat; Preencha a caixa de texto "Tomcat home" com o nome da pasta de instalação do Tomcat; Em "Context declaration mode", selecione a opção "Server.xml". Aplique as alterações e clique em "Ok".

Inicie o Tomcat através do botão "Start Tomcat" da barra de ferramentas do Eclipse.

Após finalizadas as mensagens na aba "console", inicie o browser e acesse o endereço http://localhost:8080http://localhost:8080

Page 413: Curso de Linguagem Java 2010 - Marcos Mendes

413

Criação de um Projeto Web no Eclipse

Selecione File / New / Project / Java / Tomcat Project.

Preencha a caixa "Project name" com o nome do seu

projeto e clique em "Next".

Preencha a caixa "Context name" com "/Teste" e a

caixa "Subdirectory to set as web application root

(optional)" com "/web" e clique em "Finish".

Configure o plugin EclipseHtmlEditor da Amateras:

Clique com o botão direito no projeto e selecione

"Properties", clique no item "Amateras", preencha a

caixa de texto "Root" com "/web". Clique em "Apply" e

"Ok".

Page 414: Curso de Linguagem Java 2010 - Marcos Mendes

414

Criação de uma classe Servlet no Projeto Web

Clique com o botão direito no projeto e selecione New / Class.

Preencha a caixa "Name" com o nome da classe

"TestServlet".

Preencha a caixa "Package" com o nome do pacote

"servlets".

Clique em "Finish".

Copie o código do slide seguinte no corpo da classe.

Crie o arquivo "web.xml" (nos próximos slides) na pasta

"WEB-INF" clicando com o botão direito na pasta "WEB-INF" e

selecionando New / File.

No browse, abra o endereço http://localhost:8080/Teste/oi

Page 415: Curso de Linguagem Java 2010 - Marcos Mendes

415

Exemplo de recebimento e envio de dadospackage servlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class TestServlet extends HttpServletHttpServlet {public void serviceservice (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException {resp.setContentTyperesp.setContentType ("text/html");PrintWriterPrintWriter out = resp.getWriterresp.getWriter();String nome = req.getParameterreq.getParameter("nome");out.println("<html><head><title> Exemplo Servlet </title>");out.printlnout.println("</head> <body> Oi " + nome + ", tudo bem ?");out.println("</body> </html>");out.closeout.close();

}}

TestServlet.javaNeste exemplo, o servlet recebe

um nome e retorna umamensagem de saudação

Page 416: Curso de Linguagem Java 2010 - Marcos Mendes

416

Arquivo descritor da aplicação web.xml

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

<servlet><servlet-name>TesteTeste</servlet-name><servlet-class>servlets.TestServletservlets.TestServlet</servlet-class>

</servlet><servlet-mapping>

<servlet-name>TesteTeste</servlet-name><url-pattern>/oi/oi</url-pattern>

</servlet-mapping>

</web-app>

Page 417: Curso de Linguagem Java 2010 - Marcos Mendes

417

Formato de um Servletimport java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class TestServlet extends HttpServletHttpServlet {

public void initinit ( ) throws ServletExceptionServletException { }

public void serviceservice (ServletRequestServletRequest req, ServletResponseServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

public void destroydestroy ( ) { }

protect void doGetdoGet (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

protect void doPostdoPost (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

}

Page 418: Curso de Linguagem Java 2010 - Marcos Mendes

418

Pacote javax.servlet javax.servlet.GenericServlet

void destroydestroy ( ) void initinit ( ) void serviceservice (ServletRequest req,

ServletResponse res ) ServletRequest (interface)

ServletInputStream getInputStreamgetInputStream ( ) String getParametergetParameter ( String name ) BufferedReader getReadergetReader ( )

ServletResponse (interface) ServletOutputStream getOutputStreamgetOutputStream ( ) PrintWriter getWritergetWriter ( ) void setContentTypesetContentType ( String type )

Page 419: Curso de Linguagem Java 2010 - Marcos Mendes

419

Pacote javax.servlet.http javax.servlet.http.HttpServlet

void doGetdoGet ( HttpServletRequest req,

HttpServletResponse res ) void doPostdoPost ( HttpServletRequest req,

HttpServletResponse res )

HttpServletRequest (interface)

Derivada de javax.servlet.ServletRequest

HttpServletResponse (interface)

Derivada de javax.servlet.ServletResponse void sendRedirectsendRedirect ( String location )

Page 420: Curso de Linguagem Java 2010 - Marcos Mendes

420

Compilação de Servlets no Eclipse

Para se compilar um servlet no Eclipse é necessário que se

adicione o arquivo servlet.jarservlet.jar (Tomcat 4.x) ou servlet-servlet-

api.jarapi.jar (Tomcat 5.x ou mais recente) no classpath do Eclipse.

Para tanto, no Eclipse, Selecione o menu "ProjectProject" opção

"PropertiesProperties", clique em "Java Build PathJava Build Path", selecione a aba

"LibrariesLibraries", clique no botão "Add External Jars...Add External Jars..." selecione

o arquivo servlet-api.jarservlet-api.jar em "[Tomcat_Home]\common\[Tomcat_Home]\common\

liblib", clique em "abrirabrir" e finalmente clique em "okok".

Pode-se utilizar também um build do Apache Ant, que é o

mais recomendável.

Page 421: Curso de Linguagem Java 2010 - Marcos Mendes

421

Árvore de diretórios da Aplicação

[Tomcat_Home]

Webapps

Sua_AplicaçSua_Aplicaçãoão

WEB-INF

classes

Arquivos .html .html e applets applets

Arquivo web.xmlweb.xml

Servlets (.class)

A estrutura pode estar em uma árvore fora do Tomcat,basta editar o arquivo server.xml do diretório de configuraçãodo Tomcat ([TOMCAT_HOME]\conf) e incluir um novo contexto:

<Context path= "/Teste/Teste" docBase="c:\teste\c:\teste\" debug="0" />

Page 422: Curso de Linguagem Java 2010 - Marcos Mendes

422

Como testar o Servlet exemplo no Tomcat

Crie a pasta TesteTeste sob [Tomcat_Home]\Webapps[Tomcat_Home]\Webapps.

Crie a pasta WEB-INFWEB-INF sob TesteTeste. E a pasta classesclasses

sob WEB-INFWEB-INF

Copie o arquivo de classe Testservlet.class no

diretório Teste\WEB-INF\classesTeste\WEB-INF\classes

Crie o arquivo web.xmlweb.xml mostrado no slide anterior na

pasta WEB-INFWEB-INF.

Verifique se o Tomcat está sendo executado.

Abra o endereço http://localhost:8080/Teste/oihttp://localhost:8080/Teste/oi

Page 423: Curso de Linguagem Java 2010 - Marcos Mendes

423

Como testar o Servlet exemplo no JSWDK Descarregue o JavaServer Web Development Kit a partir

do endereço: http://java.sun.com/products/jsp/download.html

Istale o kit no diretório \jswdk\jswdk Mude a propriedade port para port NMTOKEN “80”port NMTOKEN “80” no

arquivo \jswdk\webserver.xml Compile o código do servlet: javac –classpath \jswdk\javac –classpath \jswdk\

lib\servlet.jar;. TestServlet.javalib\servlet.jar;. TestServlet.java Copie o arquivo de classe Testservlet.class no diretório \\

jswdk\webpages\WEB-INF\servletsjswdk\webpages\WEB-INF\servlets Edite o arquivo \jswdk\webpages\WEB-INF\mappings. \jswdk\webpages\WEB-INF\mappings.

propertiesproperties, incluindo a linha: /testservlet=testservlet/testservlet=testservlet Edite o arquivo \jswdk\webpages\WEB-INF\servlets.\jswdk\webpages\WEB-INF\servlets.

propertiesproperties, incluindo a linha: testservlet.code=TestServletestservlet.code=TestServlet

Copie os arquivos testservlet.htmltestservlet.html e TestServlet.classTestServlet.class no diretório \jswdk\webpages\jswdk\webpages

Inicie o servidor da Web executando: \jswdk\startserver\jswdk\startserver Abra o endereço http://localhost/testservlet.htmlhttp://localhost/testservlet.html

Page 424: Curso de Linguagem Java 2010 - Marcos Mendes

424

Instalação do Apache ANT

Baixe o Ant do site: http://ant.apache.org

Descompacte o arquivo na raíz do hd.

Renomeie a pasta para "ant".

Crie uma variável de ambiente chamada

"ANT_HOME" apontando para a pasta "<drive>:\

ant"

Inclua a pasta "ANT_HOME\bin" no path do

sistema.

Crie um buildfile para sua aplicação. (slides seguintes)

Integre o Ant com o Eclipse. (slides seguintes)

Page 425: Curso de Linguagem Java 2010 - Marcos Mendes

425

Build de aplicação web usando o ANT<?xml version="1.0" encoding="iso-8859-1" ?>

<project name="loja" default= "all""all" > <target name="all"name="all" depends= "compile,war,deploy""compile,war,deploy" > </target> <target name="init"name="init" > <property name="src" value="./src" /> <property name="bin" value="./WEB-INF/classes" /> <property name="war" value= "./loja.war""./loja.war" />

<property name="tomcatHome" value= "c:/tomcat""c:/tomcat" /> <property name="deployDir" value="${tomcatHome}/webapps"

/> <property name="servletApi" value="$

{tomcatHome}/common/lib/servlet-api.jarservlet-api.jar" /> </target>

Page 426: Curso de Linguagem Java 2010 - Marcos Mendes

426

Build de aplicação web usando o ANT <target name="compile"name="compile" depends="init"> <javac srcdir="${src}" destdir="${bin}"> <classpath path= "WEB-INF/lib/connectorj.jar""WEB-INF/lib/connectorj.jar" /> <classpath path="${servletApi}" /> </javac> </target> <target name="war"name="war" depends="init"> <jar destfile="${war}" > <fileSet dir="." includes="*.html" /> <fileSet dir="." includes="WEB-INF/**" /> </jar> </target> <target name="deploy"name="deploy" depends="war"> <copy file="${war}" todir="${deployDir}" overwrite="yes"/> </target></project>

Page 427: Curso de Linguagem Java 2010 - Marcos Mendes

427

Integrando o ANT com o Eclipse

Selecione o menu "Project"; Selecione "properties"; Selecione "Builders"; Clique em "new"; Escolha "Ant Build"; Em "Name Buildfile" clique em xxx e selecione o

arquivo de build criado anteriormente; Com o build selecionado clique no botão "up"

para que o "ant build" apareça em primeiro lugar na lista.

Page 428: Curso de Linguagem Java 2010 - Marcos Mendes

428

Invocando um servlet

<html><head>

<title> Formulário com servlet </title></head>

<body><h1>Teste de formulário acionando uma servlet

</h1><form actionaction= "oi" methodmethod="get">

<p>Nome: <input type="text" name="nome"><p> <input type="submit" value="Enviar">

</form></body>

</html>

Teste.htmlEsta página html invoca o servlet

TestServlet através de um formulário

Page 429: Curso de Linguagem Java 2010 - Marcos Mendes

429

Acesso a dados no MySQL por um servlet

Para se acessar um banco de dados MySQL através de um servlet utilizando o Tomcat é necessário que o driver do MySQL "Connector/J" presente no arquivo

mysql-connector-java-3.1.0-alpha.jarmysql-connector-java-3.1.0-alpha.jar seja copiado para o diretório "Tomcat_Home\Tomcat_Home\

common\libcommon\lib".

Page 430: Curso de Linguagem Java 2010 - Marcos Mendes

430

Gravando dados de um formulário

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.sql.*;

public class GravaServlet extends HttpServletHttpServlet {Connection con = null;PreparedStatement pst = null;

public void serviceservice (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException {resp.setContentTyperesp.setContentType ("text/html");PrintWriterPrintWriter out = resp.getWriterresp.getWriter();out.println("<html><head><title> Cadastro de funcionários");out.println("</title> </head> <body> <h1>");

GravaServlet.javaEste exemplo recebe dados de um

formulário e os grava em uma tabelade banco de dados.

Page 431: Curso de Linguagem Java 2010 - Marcos Mendes

431

Gravando dados de um formulário (cont.)

int result = 0;try { Class.forName("CLASSE DO DRIVERCLASSE DO DRIVER"); con = DriverManager.getConnection("URL DE CONEXÃOURL DE CONEXÃO"); String sql = "INSERT INTO tabelatabela (nome, cargo) VALUES ( ?, ?) "; pst = con.prepareStatement( sql ); String nome = req.getParameterreq.getParameter("nome"); String cargo = req.getParameterreq.getParameter("cargo"); pst.clearParametersclearParameters( ); pst.setStringsetString (1, nome); pst.setStringsetString (2, cargo); result = pst.executeUpdateexecuteUpdate( ); con.close();} catch (Exception e) { out.println(e); }if ( result == 1 ) out.printlnout.println("Dados gravados com sucesso");else out.printlnout.println("Problemas no cadastramento");out.println("</h1></body> </html>");out.closeout.close();

}}

Page 432: Curso de Linguagem Java 2010 - Marcos Mendes

432

Lendo dados de um Banco de Dadosimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.sql.*;

public class LerServlet extends HttpServletHttpServlet {Connection con = null;PreparedStatement pst = null;ResultSet rs = null;

public void serviceservice (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException {resp.setContentTyperesp.setContentType ("text/html");PrintWriterPrintWriter out = resp.getWriterresp.getWriter();out.println("<html><head><title> Cadastro de funcionários");out.println("</title> </head> <body> <h1>");

LerServlet.javaEste exemplo lê dados de uma tabela de banco de dados e os

exibe na forma de uma tabela HTML

Page 433: Curso de Linguagem Java 2010 - Marcos Mendes

433

Lendo dados de um Banco de Dados (cont.)

try { Class.forName("CLASSE DO DRIVERCLASSE DO DRIVER"); con = DriverManager.getConnection("URL DE CONEXÃOURL DE CONEXÃO"); String sql = "SELECT * FROM tabelatabela ORDER BY nome"; pst = con.prepareStatement( sql );} catch(Exception e) {out.println(e); }out.println("<table border='1'><tr> <th> Nome <th> Cargo");try {

rs = pst.executeQueryexecuteQuery( );while ( rs.nextnext( ) ) {

out.printlnout.println("<tr><td>" + rs.getStringgetString("nome") );out.println out.println ("<td>" + rs.getStringgetString("cargo") );

}} catch (Exception e) {out.println(e); }out.println("</table></body> </html>");out.closeout.close();

}

Page 434: Curso de Linguagem Java 2010 - Marcos Mendes

434

Lendo dados de um Banco de Dados (cont.)

public void destroydestroy ( ) {try {

if (rs != null)rs.close ( );

if (con != null)con.close( );

} catch (Exception e) { }}

}

Page 435: Curso de Linguagem Java 2010 - Marcos Mendes

435

Buscando dados de um Banco de Dados

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;import java.sql.*;

public class BuscaServlet extends HttpServlet {Connection con = null;PreparedStatement pst = null;

public void service (HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {resp.setContentType ("text/html");PrintWriter out = resp.getWriter();out.println("<html><head><title> Cadastro de funcionários");out.println("</title> </head> <body> <h1>");

Page 436: Curso de Linguagem Java 2010 - Marcos Mendes

436

Buscando dados de um Banco de Dados

try {

Class.forName( "com.mysql.jdbc.Driver" );

String url = "jdbc:mysql://127.0.0.1:3306/banco" ;

con = DriverManager.getConnection(url, "root", "");

String sql = "Select * From "Select * From tabelatabela Where Where chavechave like ? Order By like ? Order By

campocampo"";;

pst = con.prepareStatement( sql );

} catch(Exception e) { out.println(e); }

String chave = req.getParameter("chave");

out.println("<table border='1'><tr> <th> Nome <th> Cargo <th> Salário");

Page 437: Curso de Linguagem Java 2010 - Marcos Mendes

437

Buscando dados de um Banco de Dados

try { pst.setString(1, "%" + pst.setString(1, "%" + chavechave + "%"); + "%");

rs = pst.executeQuery( ); while ( rs.next( ) ) { out.println("<tr><td>" + rs.getString("nome") ); out.println ("<td> <img src='<img src='" + rs.getString("rs.getString("fotofoto")") + "'>'>" ); out.println ("<td> <a href = 'apagar?cod=<a href = 'apagar?cod=" + rs.getString("rs.getString("idid")")

+ "'>'>" ); out.println ("<img src='lixo.gif'> </a></a>" ); }

} catch (Exception e) {out.println(e); } out.println("</table></body> </html>"); out.close(); }}

Page 438: Curso de Linguagem Java 2010 - Marcos Mendes

438

Apagando dados de um Banco de Dados

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;import java.sql.*;

public class ApagaServlet extends HttpServlet { Connection con = null; PreparedStatement pst = null;

public void service (HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException { resp.setContentType ("text/html"); PrintWriter out = resp.getWriter(); out.println("<html><head><title> Cadastro de funcionários"); out.println("</title> </head> <body> <h1>");

Page 439: Curso de Linguagem Java 2010 - Marcos Mendes

439

Apagando dados de um Banco de Dados

try {

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://127.0.0.1:3306/banco";

con = DriverManager.getConnection(url, "root", "");

String sql = "DELETE FROM "DELETE FROM tabelatabela WHERE WHERE idid = ?" = ?";

pst = con.prepareStatement( sql );

} catch(Exception e) {

out.println(e);

}

int result = 0;

String cod = req.getParameter("cod");String cod = req.getParameter("cod");

Page 440: Curso de Linguagem Java 2010 - Marcos Mendes

440

Apagando dados de um Banco de Dados

try { pst.clearParameters( ); pst.setInt (1, Integer.parseInt(cod));pst.setInt (1, Integer.parseInt(cod)); result = pst.executeUpdate( ); } catch (Exception e) {

out.println(e); } if ( result == 1 ) out.println("Dados excluídos com sucesso"); else out.println("Problemas na exclusão"); out.println("</h1></body> </html>"); out.close(); }}

Page 441: Curso de Linguagem Java 2010 - Marcos Mendes

441

Invocando um servlet via Appletimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;java.net.*;import java.io.*;java.io.*;

public class TestServApp extends JApplet implements ActionListener {JTextField txtnome, txtStatus;JButton btnsend;JEditorPaneJEditorPane pagina;public void init () {

JLabel lblnome = new JLabel ("Nome: ");txtnome = new JTextField(20);txtStatus = new JTextField(" ", 20);btnsend = new JButton("Enviar");btnsend.addActionListener(this);

TestServapp.javaEste exemplo usa uma applet para enviar e receber dados do servletTestServlet visto anteriormente

Page 442: Curso de Linguagem Java 2010 - Marcos Mendes

442

Invocando um servlet via Applet (cont.)

Container cp = getContentPane( );cp.setLayout( new FlowLayout( ) );cp.add (lblnome);cp.add (txtnome);cp.add (btnsend);cp.add (txtStatus);pagina = new JEditorPaneJEditorPane ("text/html","<html><body> Oi </body></html>" );("text/html","<html><body> Oi </body></html>" );cp.add (pagina);

}public void actionPerformed(ActionEvent evt) {

try {URLURL app = new

URL("http://localhost/Teste/Test");URL("http://localhost/Teste/Test");URLConnectionURLConnection con = app.openConnectionopenConnection( );con.setDoInputsetDoInput(true);con.setDoOutputsetDoOutput(true);

Page 443: Curso de Linguagem Java 2010 - Marcos Mendes

443

Invocando um servlet via Applet (cont.)

PrintWriterPrintWriter out = new PrintWriter(con.getOutputStreamgetOutputStream( ));

out.printlnprintln("nome=" + txtnome.getText() );out.closeclose();BufferedReaderBufferedReader in = new BufferedReaderBufferedReader

(new InputStreamReaderInputStreamReader(con.getInputStreamgetInputStream()));String line;txtStatus.setText("");while ( (line = in.readLinereadLine( ) ) != null ) {

String texto = new String (txtStatus.getText() + line);txtStatus.setText(texto);

}pagina.setText( txtStatus.getText());

} catch (Exception e) {System.out.println (e);

}}

}

Page 444: Curso de Linguagem Java 2010 - Marcos Mendes

444

Utilizando a Sessão HTTP (HttpSession)

import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class SessaoServlet extends HttpServlet { public void service(HttpServletRequest req,

HttpServletResponse resp) throws ServletException, IOException { HttpSession sessao = req.getSession();HttpSession sessao = req.getSession(); sessao.setAttribute("dados", new Integer(0));sessao.setAttribute("dados", new Integer(0)); resp.sendRedirectsendRedirect(resp.encodeURL("respostaresposta")); }}

SessaoServlet.javaEste exemplo armazenar

dados na sessão Http

Page 445: Curso de Linguagem Java 2010 - Marcos Mendes

445

Utilizando a Sessão HTTP (HttpSession)

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class RespostaServlet extends HttpServlet { public void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType ("text/html"); PrintWriter out = resp.getWriter( ); out.println("<html> <body> <h1>"); HttpSession sessao = req.getSession( );HttpSession sessao = req.getSession( ); Integer dado = (Integer) sessao.getAttribute("dados");Integer dado = (Integer) sessao.getAttribute("dados"); dado = new Integer(dado.intValue( ) + 1); sessao.setAttribute("dados", dado);sessao.setAttribute("dados", dado); out.println("" + dado.intValue( ) + "</h1></body> </html>"); out.close( ); }}

RespostaServlet.javaEste exemplo recuperadados da sessão Http