1
Curso de Linguagem Java
Marcos Mendes
2010
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.
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
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
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
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
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
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.
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
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.
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
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
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.
14
Plataforma Java 2 Standard Edition
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).
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.
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.
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).
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.
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)
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)
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
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)
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.
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.
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
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
28
Formato Geral de um Programa
public public classclass HelloWord {
public static voidpublic static void main ( String args[ ] ) {
System.out.println ("Oi tudo bem" );
}
}
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.
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.
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.
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
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 */
34
Tipos de Dados Numéricos
Inteiros int short long byte
Ponto Flutuante float double
Caracter char
Lógico boolean
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
36
Tipos de Dados (cont.)
Ponto Flutuante
Faixa de Armazenamento
Tamanho
Tipo
Aproximadamente± 1.79769313486231570E+308
8 bytesdouble
Aproximadamente± 3.40282347E+38F
4 bytesfloat
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
38
Operadores
Aritméticos
Atribuição
Relacionais
Lógicos
bit a bit
39
Operadores Aritméticos
Decremento--Incremento++
Resto da divisão%
Divisão/Multiplicação*
Subtração / Menos Unário
-Adição+
OperaçãoOperador
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
41
Operadores Relacionais
Diferente de!=
Igual a==
Maior ou igual a>=
Menor ou igual a<=
Maior que>
Menor que<
OperaçãoOperador
42
Operadores Lógicos
Condicional
(Ternário)
? :
Ou lógico (or)||
E lógico (and)&&
Negação (not)!
OperaçãoOperador
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
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] );
}
}
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
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) );
}
}
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
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
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
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) ); }}
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)
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;
}
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++;}
54
Laço - whileSintaxe:
whilewhile (condição) comando;
Exemplo:
int x = 1;while (x <= 10) {
System.out.println( x );x++;
}
55
Laço – do...whileSintaxe:
dodo comando;
whilewhile (condição) ;
Exemplo:
int x = 1; do {
System.out.println( x );x++;
} while (x <= 10) ;
56
Laço – forSintaxe:
forfor ( inicialização ; condição ; incremento )comando;
Exemplo:
for ( int x=1 ; x <= 10 ; x++)System.out.println( x );
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).
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.
59
JOptionPane (javax.swing.JOptionPane)
Principais Campos
Valores de retorno para showConfirmDialog
( )
CANCEL_OPTION
NO_OPTION
OK_OPTION
YES_OPTION
60
JOptionPane (javax.swing.JOptionPane)
Tipos de Mensagens
ERROR_MESSAGE
INFORMATION_MESSAGE
PLAIN_MESSAGE
QUESTION_MESSAGE
WARNING_MESSAGE
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);
}}
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);
}
}
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
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.
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.
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));
}}
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;
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);}
}}
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.
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;
}
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);
}
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));
}
}
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
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”);
75
Classe String (cont.)
Principais Construtores StringString ( ) StringString ( byte [ ] bytes ) StringString ( char [ ] value ) StringString ( String value ) StringString ( StringBuffer buffer )
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.
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.
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.
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
80
Classe StringBuffer (java.lang.StringBuffer)
Principais Construtores StringBufferStringBuffer ( ) StringBufferStringBuffer ( int tamanho ) StringBufferStringBuffer ( String str )
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.
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.
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.
Manipulação de Datas
Calendar
GregorianCalendar
Object
Date
Classe Abstrata
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.
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.
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.
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
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);
}}
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
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.
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.
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.
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)
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.
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.
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.
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.
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)
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}...
}
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
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
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.
104
Interface Gráfica - AWT
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
106
Hierarquia AWT
Component
Container
Window
FrameDialog
FileDialog
Panel
Applet
Object
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.
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.
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.
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) ).
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
112
Panel (java.awt.Panel)
Construtores PanelPanel ( ) PanelPanel ( LayoutManager layout )
Gerenciador de Layout default FlowLayout
113
Componentes AWT
Label
Button
TextField
TextArea
Checkbox
CheckboxGroup
Choice
List
114
Label (java.awt.Label)
Principais Campos CENTER LEFT RIGHT
Construtores LabelLabel ( ) LabelLabel ( String texto ) LabelLabel ( String texto, int alinhamento )
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.
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.
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.
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 )
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.
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)
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.
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.
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.
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.
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.
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.
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.
128
Interface Gráfica - JFC Swing
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
130
Diagrama de Classes Swing
Component
Container
Window
FrameJWindow
Panel
Applet
Object
JFrame JApplet
JComponent
JPanel JButton JLabel
AWT
ComponentesComponentes
SwingSwing
131
Containers Swing (javax.swing)
JFrame
JPanel
JEditorPane
JTabbedPane
JOptionPane
JFileChooser
JColorChooser
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 )
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..
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();
}}
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( ).
136
JPanel (javax.swing.JPanel)
Principais Construtores JPanelJPanel ( ) JPanelJPanel ( LayoutManager
gerenciador )
JPanel é um container, porém, também é subclasse de JComponent.
137
Componentes Swing
JLabel
JButton
JToggleButton
JTextField
JTextArea
JCheckbox
ButtonGroup
JRadioButton
JList
JComboBox
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.
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 )
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.
141
JButton ( javax.swing.JButton )
Construtores
JButtonJButton ( )
JButtonJButton ( Icon ícone )
JButtonJButton ( String texto)
JButtonJButton ( String texto, Icon ícone)
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.
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.
144
JTextField ( javax.swing.JTextField )
Principais Construtores
JTextFieldJTextField ( )
JTextFieldJTextField ( int colunas )
JTextFieldJTextField ( String texto )
JTextFieldJTextField ( String texto, int
colunas )
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.
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.
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();}
}
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 );
}}
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
150
BorderLayout (java.awt.BorderLayout)
North
South
CenterWest East
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.
152
FlowLayout (java.awt.FlowLayout)
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.
154
GridLayout (java.awt.GridLayout)
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.
156
GridBagLayout (java.awt.GridBagLayout)
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 );
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 )
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
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);
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();}
}
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.
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
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();}
}
165
Exercício proposto Crie a seguinte interface:
Anterior
Próximo
Sair
Agenda Pessoal
Nome:
Endereço:
Telefone:
166
Exercício Programa de Cálculos
Programa de Cálculos
Número:
Par / Ímpar Fatorial
Primo Perfeito
___________Resultado:
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.
168
JCheckBox ( javax.swing.JCheckBox )
Alguns Construtores
JCheckBoxJCheckBox ( )
JCheckBoxJCheckBox ( String texto )
JCheckBoxJCheckBox ( String texto, boolean
estado )
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 )
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);
}
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();}
}
172
JRadioButton ( javax.swing.JRadioButton )
Alguns Construtores
JRadioButtonJRadioButton ( )
JRadioButtonJRadioButton ( String texto )
JRadioButtonJRadioButton ( String texto,
boolean estado )
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 )
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.
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);
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();}
}
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.
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
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.
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");
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();}
}
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.
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.
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");
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();}
}
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.
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.
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);
}
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();}
}
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
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();}
}
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
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;
}}
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
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);
}
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();}
}
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
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;
}
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;
}
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();
}}
}
201
Cores, Desenhos e Fontes
Color
Graphics
Font / FontMetrics
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
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
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
205
Font (java.awt.Font)
Construtores FontFont ( Map atributos )
FontFont ( String nome, int estilo, int tamanho
)
Principais Campos BOLD
ITALIC
PLAIN
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.
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 );
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
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
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(); }
}
211
Manipulação de Eventos
Eventos de Ação
Eventos de Janela
Eventos de Mouse
212
Eventos de Ação
Interface ActionListener Método
actionPerformed
Não possui classe adaptadora
Eventos gerados por: Button
List
MenuItem
TextField
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
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
215
Exercício Implementar a funcionalidade do
programa de cálculos.
216
Eventos de Janela Interface WindowListener
Métodos windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated
Classe adaptadora: WindowAdapterWindowAdapter
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
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!"); }
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();
}}
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 ( );}
}
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
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
223
Eventos de Teclado
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");
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);
}
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();}
}
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();}
}
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;
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); } });}
}
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
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
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));
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( );
}}
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();
} }
235
Tratamento de Exceções
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);
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);
}
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();}
}
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 ); } }}
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 );
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) { }
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]);}
}
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);
}}
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);
}
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();}
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 ) { }
}
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);
}}
}
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 ( )
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) );
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 );
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.*
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() );}
} );
253
Mini-aplicativos - Applets
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.
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().
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>
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);
}}
258
Exercício
Transformar o programa de cálculos em uma applet.
259
Manipulação de Arquivos do Sistema de Arquivos – java.io
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();
}}
}
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();
}}
}
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();
}}
}
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();
}}
}
264
Conectividade de Banco de Dados(JDBC)
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
266
Conectividade de Banco de Dados
Arquitetura JDBC
Programa JavaAPI JDBC(java.sql)
Driver JDBC
BancoDe Dados
Comandos SQL
267
Introdução à Linguagem SQL
Consulta SELECT
Alteração INSERT INTO
UPDATE
DELETE FROM
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
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’ ) )
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’
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’ )
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)
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)
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
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
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
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
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 );
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 ) );
}}
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.
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.
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.
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
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.
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;
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
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
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.
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.
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".
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/
292
Exercício
Criar uma interface que grave registros em uma tabela
Agenda
Nome:
Telefone:
Gravar
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 );
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( );
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
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.
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.
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.
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.
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.
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.
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.
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
304
Java Collections Framework (java.util)
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
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.
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.
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.
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);
}}
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.
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.
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));}
}
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());}
}}
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.
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
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());}
}}
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.
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
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());}
}}
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.
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.
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.
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));
}}
}
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.
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.
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.
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.
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.
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");
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
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
332
JPA – Java Persistence API Arquitetura
Aplicação Java
Java Persistence API
Provedor JPA
API JDBC
Driver JDBC
BancoDe Dados
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
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.
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
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.
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.
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.
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
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.
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
}
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
}
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();
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.
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.
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
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
}
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" />
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
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()); }}
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
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.
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>
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>
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.
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!"); } }}
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();
}}
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();
}}
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!");
}}
}
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.
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.
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.
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");}
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");
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
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"); }
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
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"); }
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();
}
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
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();
}}
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
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
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
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();
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
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.
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.
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
380
JPA – Java Persistence API Exemplo de Aplicação Swing com
JPA
381
JPA – Java Persistence API Relacionamentos e Agregações
Em construção!!!
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/
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
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)
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.
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.
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.
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.
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.
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.
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
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
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)
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();
}
}
}
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.
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
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
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
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"/>
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>
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>
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
403
EJB – Enterprise JavaBeans
Ciclo de Vida de um Stateful Session Bean
404
EJB – Enterprise JavaBeans
Ciclo de Vida de um Stateles Session Bean
405
EJB – Enterprise JavaBeans
Ciclo de Vida de um Message-Driven Bean
406
EJB – Enterprise JavaBeans
Exemplo de Aplicação Swing com EJB SessionBean e JPA-Entity
407
Aplicações WEBServlets
408
Requisição / Resposta
Browser
service()
doGet()
doPost()
doPut()
doDelete()
doOption()
doTrave()
Cliente Container Web
Request
Response
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.
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/
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").
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
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".
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
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
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>
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 { }
}
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 )
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 )
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.
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" />
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
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
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)
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>
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>
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.
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
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".
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.
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();
}}
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
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();
}
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) { }}
}
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>");
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");
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(); }}
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>");
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");
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(); }}
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
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);
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);
}}
}
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
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