classes java , jdbc / swing / collections
DESCRIPTION
TRANSCRIPT
![Page 1: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/1.jpg)
Autor: Eduardo R. Carvalhoemail: [email protected]
public JavaIntermediario { public void pacoteJavaStandard() {} public void pacoteJavaIO() {}
public void pacoteJDBC() {} public void pacoteSwing() {} }
Classes Java
Pacotes Standard / JDBC / Swing
@version 1.3
![Page 2: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/2.jpg)
Links• 4Shared
– http://www.4shared.com/dir/10013955/61c5ad14/02Java_Intermediario.html
• MySQL – www.mysql.org
• PostGre– http://www.postgresql.org/
• Apache Fundation - Frameworks– www.commons.apache.org
• Swing
– http://www.java2s.com/Product/Java/Swing/Look-And-Feel-LaF.htm – http://mindprod.com/jgloss/laf.html#MAC
08/04/23 2
![Page 3: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/3.jpg)
Glossário de Termos
Termo Descrição
JDBC Java Data Base Conectivity
API Application Program Interface
DAO Data Access Object
JCP Java Community Process
ODBC Object DataBase Conectivity
Refactory Reconstruir parte do Programa
ANSI American National ?? Institute
DML Data Model Language
DDL Data Definition Language
SQL Structure Query Languare
SGBD Sistema Gerenciador de Banco de Dados
08/04/23 3
![Page 4: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/4.jpg)
Classes do Pacote java.lang• java.lang.StringBuffer• java.lang.Math• java.lang.Integer• java.lang.Double• java.lang.Boolean• java.lang.Long• java.lang.Float• java.lang.Character• java.lang.Byte• java.lang.Short• java.lang.StringTokenizer
08/04/23 4
![Page 5: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/5.jpg)
Aula 1• Usando a Classe String
– Em Java, cada caractere de uma String é um caractere Unicode de 16 bits. Já que caracteres Unicode tem 16 bits (e não os restritos 7 ou 8 bits que a ASCII oferece), um conjunto de caracteres sofisticado e internacional é facilmente representado em Unicode.
– Em Java, strings são objetos:String s = new String(“abcdef”);
– Ou:String s = “abcdef”;
08/04/23 5
![Page 6: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/6.jpg)
Classe String
• Usando a Classe String
String s2 = s; //s2 aponta para o mesmo //objeto referenciado // por s
• O objetivo para a certificação declara: “descrever o significado da inalterabilidade dos objetos String”, portanto, quando um valor for atribuído a uma String, esse nunca poderá ser alterado. Mas isso não significa que sua variável de referênciatambém seja, muito pelo contrário.
08/04/23 6
![Page 7: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/7.jpg)
Classe String
• Classe String e a Memória– Concatenando Objetos String– Criando novos objetos String
08/04/23 7
![Page 8: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/8.jpg)
Classe String• Métodos importantes
– concat– equalsIgnoreCase– length– replace– substring– toString– toLowerCase– toUperCase– trim
08/04/23 8
![Page 9: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/9.jpg)
Classe StringBuffer• Utilizada para manipulação de grande volumes de
Strings, pois não cria novos objetos como a classe String. Então quando necessitar de concatenar grandes volumes de caracteres de preferência a Classe StringBuffer.
• Métodos Importantes– append– insert– reverse– toString
08/04/23 9
![Page 10: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/10.jpg)
Classe Math• Métodos da Classe Math
– abs– ceil– Ffoor– max– min– random– round– sin– cons– tan– sqrt– toDegrees– toRadians
08/04/23 10
![Page 11: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/11.jpg)
Objetos Wappers
• java.lang.Integer• java.lang.Double• java.lang.Boolean• java.lang.Long• java.lang.Float• java.lang.Character• java.lang.Byte• java.lang.Short
08/04/23 11
![Page 12: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/12.jpg)
Objetos Wrappers - Metodos• Método estático valueOf()• Métodos utilitários de conversão das Classes
Wrappers– xxxValue()– parseXxx e valueOf– toString
08/04/23 12
![Page 13: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/13.jpg)
Aula 2
• Collenctions em Java– java.util
•Collections•List•ArrayList•Set•HashSet
• hashCode e equals
08/04/23 13
![Page 14: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/14.jpg)
Collections• Desvantagens dos arrays:
– Arrays não podem ser redimensionados;– É impossível buscar diretamente um
elemento para qual não se sabe o índice;– Não é possível saber quantas posições do
array já foram populadas sem se criar métodos adicionais;
• Collections Framework (pacote java.util):– É uma API robusta e possui diversas classes
que representam estruturas de dados avançados em Java.
08/04/23 14
![Page 15: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/15.jpg)
Collections – Principais Interfaces• As coleções têm como base a interface Collection,
que define métodos para adicionar e remover um elemento, verificar se ele está na coleção entre outras operações (ver Javadoc).
• Uma coleção pode implementar diretamente a interface Collection, porém normalmente se usa uma das duas subinterfaces mais famosas: justamente Set e List.
• A interface Set, define um conjunto de elementos únicos enquanto a interface List permite a réplica de elementos.
08/04/23 15
![Page 16: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/16.jpg)
Collections – Listas [java.util.List]• Um primeiro recurso que a API de Collections traz são
listas. Uma lista é uma coleção que permite elementos duplicados e mantendo uma ordenação específica entre os elementos.
• Em outras palavras, temos a garantia de que, quando percorrer a lista, os elementos serão encontrados em uma ordem prédeterminada, definida na hora da inserção dos mesmos.
• Ela resolve todos os problemas que levantamos em relação a array (busca, remoção, tamanho “infinito”, etc). Esse código já está pronto!
• A API de Collections traz a interface java.util.List que especifica o que uma classe deve ser capaz de fazer para ser uma lista.
08/04/23 16
![Page 17: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/17.jpg)
Collections – Listas [java.util.List]• Há diversas implementações disponíveis, cada uma
com uma forma diferente de representar uma lista.• A implementação mais utilizada da interface List é a
ArrayList que trabalha com uma array interna para gerar uma lista portanto ela é mais rápida na pesquisa que sua concorrente, a LinkedList, que é mais rápida na inserção e remoção de itens nas pontas.
• Para criar um ArrayList basta chamar o construtor:ArrayList lista = new ArrayList();
• É sempre possível abstrair a lista a partir da interface List:List lista = new ArrayList();
08/04/23 17
![Page 18: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/18.jpg)
Collections – Listas [java.util.List]• Para criar uma lista de nomes (String),
podemos fazer:List lista = new ArrayList();lista.add("Guilherme");lista.add("Paulo");lista.add("Sergio");
• A interface List possui dois métodos add, um que recebe o objeto a ser inserido e o coloca no final da lista e um segundo que permite adicionar o elemento em qualquer posição da mesma.
08/04/23 18
![Page 19: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/19.jpg)
Collections – Listas [java.util.List]• Notem que em momento algum
dizemos qual é o tamanho da lista; podemos acrescentar quantos elementos quisermos que a lista cresce conforme for necessário.
• Toda lista (na verdade, toda Collection) trabalha do modo mais genérico possível. Isto é, não há uma ArrayList específica para Strings, outra para Números, outra para Datas etc. Todos os métodos trabalham com Object.
08/04/23 19
![Page 20: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/20.jpg)
Collections – Listas [java.util.List]• Assim, é possível criar, por exemplo,
uma lista de Contas:
Conta c1 = new Conta();c1.depositar(100);Conta c2 = new Conta();c2.depositar(200);Conta c3 = new Conta();c3.depositar(300);List contas = new ArrayList();contas.add(c1);contas.add(c3);contas.add(c2);
08/04/23 20
![Page 21: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/21.jpg)
Collections – Listas [java.util.List]• Para saber quantos elementos há na
lista, podemos usar o método size():
System.out.println(contas.size());
• Há ainda um método get(int) que recebe como argumento o índice do elemento que se quer recuperar. Através dele podemos fazer um for para iterar na lista de contas:
for(int i = 0; i < contas.size(); i++) {contas.get(i);
}
08/04/23 21
![Page 22: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/22.jpg)
Collections – Listas [java.util.List]• Mas como fazer para imprimir o saldo dessas
contas? Podemos acessar o getSaldo() diretamente após fazer contas.get(i)? Não podemos! Lembrem-se que toda lista trabalha sempre com Object! Assim a referência retornada pelo get(i) é do tipo Object, sendo necessário fazer um casting para Conta se quisermos acessar o getSaldo():
for(int i = 0; i < contas.size(); i++) {
ContaCorrente cc = (ContaCorrente) contas.get(i);System.out.println(cc.getSaldo());
} // Notem que a ordem dos elementos não é alterada
08/04/23 22
![Page 23: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/23.jpg)
Collections – Listas [java.util.List]• Há ainda outros métodos como
remove() que recebe um objeto que se deseja remover da lista; e o contains() que recebe um objeto como argumento e devolve true or false indicando se o elemento está ou não na lista.
• A interface List e algumas classes que a implementam podem ser vistas no diagrama a seguir
08/04/23 23
![Page 24: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/24.jpg)
Collections – Listas [java.util.List]
08/04/23 24
![Page 25: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/25.jpg)
Collections – Listas [java.util.List]• Algumas listas, como a ArrayList, tem acesso
aleatório aos seus elementos: a busca por um elemento em uma determinada posição é feita de maneira imediata, sem que a lista inteira seja percorrida.
• Neste caso o acesso é feito através do método get(int) e é muito rápido. Caso contrário, percorrer uma lista usando um for como esse que acabos de ver, pode ser desastroso. Ao percorrermos uma listas, devemos usar sempre um Iterator ou o enhanced for, como veremos.
08/04/23 25
![Page 26: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/26.jpg)
Collections – Listas [java.util.List]• Uma lista é uma excelente alternativa a
um array comum já que temos todos os benefícios de arrays, sem a necessidade de tomar cuidado com remoções, falta de espaço etc.
• A outra implementação muito usada (LinkedList), fornece métodos adicionais para obter e remover o primeiro e último elemento da lista.
08/04/23 26
![Page 27: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/27.jpg)
Ordenação: Collections.sort• Vimos anteriormente que as listas são percorridas de
maneira pré-determinada de acordo com a inclusão dos itens. Mas muitas vezes queremos percorrer a nossa lista de maneira ordenada. A classe Collections traz um método estático sort que recebe um List como argumento e o ordena por ordem crescente. Por exemplo:
List lista = new ArrayList();lista.add("Sérgio");lista.add("Paulo");lista.add("Guilherme");System.out.println(lista);Collections.sort(lista);System.out.println(lista);
08/04/23 27
![Page 28: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/28.jpg)
Ordenação: Collections.sort• Ao testarmos o exemplo acima, observamos que
primeiro a lista é impressa na ordem de inserção e, depois de chamar o sort, ela é impressa em ordem alfabética. Mas toda lista em Java pode ser de qualquer tipo de objeto, por exemplo, Conta. E se quisermos ordenar uma lista de Conta? Em que ordem a classe Collections ordenará? Pelo saldo? Pelo nome do correntista?
Conta c1 = new Conta();c1.deposita(500);Conta c2 = new Conta();c2.deposita(200);Conta c3 = new Conta();c3.deposita(150);
08/04/23 28
![Page 29: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/29.jpg)
Ordenação: Collections.sort
List<Conta> contas = new ArrayList<Conta>();contas.add(c1);contas.add(c3);contas.add(c2);Collections.sort(contas); // qual o critério de ordenação?
08/04/23 29
![Page 30: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/30.jpg)
Ordenação: Collections.sort• Sempre que falamos em ordenação, precisamos
pensar em um critério de ordenação, uma forma de determinar qual elemento vem antes de qual. É necessário instruir o Java sobre como comparar nossas ContaCorrente a fim de determinar uma ordem na lista.
• Vamos fazer com que os elementos da nossa coleção implementem a interface java.lang.Comparable, que define o método int compareTo(Object). Este método deve retornar zero se o objeto comparado for igual a este objeto, um número negativo se este objeto for menor que o objeto dado, e um número positivo se este objeto for maior que o objeto dado.
08/04/23 30
![Page 31: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/31.jpg)
Ordenação: Collections.sort• Para ordenar as ContaCorrente por
saldo, basta implementar o Comparable:
public class Conta implements Comparable { ... public int compareTo(Conta outra) { if(this.saldo < outra.saldo) { return -1; } else if(this.saldo > outra.saldo) { return 1; } return 0; }}
08/04/23 31
![Page 32: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/32.jpg)
Ordenação: Collections.sort• Com o código anterior, nossa classe tornou-se
“comparável”: dados dois objetos da classe, conseguimos dizer se um objeto é maior, menor ou igual ao outro, segundo algum critério por nós definido. No nosso caso, a comparação será feita baseando-se no saldo da conta.
• Repare que o critério de ordenação é totalmente aberto, definido pelo programador. Se quisermos ordenar por outro atributo (ou até por uma combinação de atributos), basta modificar a implementação do método compareTo na classe.
• Agora sim, quando chamarmos o método sort de Collections ele saberá como fazer a ordenação da lista; ele usará o critério que definimos no método compareTo.
08/04/23 32
![Page 33: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/33.jpg)
Ordenação: Collections.sort• Mas e o exemplo anterior, com uma
lista de Strings? Porque a ordenação funcionou naquele caso sem precisarmos fazer nada? Simples: quem escreveu a classe String (lembrem-se que ela é uma classe normal do Java) implementou a interface Comparable e o método compareTo para Strings, fazendo comparação em ordem alfabética.
08/04/23 33
![Page 34: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/34.jpg)
Collections : Conjuntos – java.util.Set• Um conjunto (Set) funciona de forma
análoga aos conjuntos da matemática, ele é uma coleção que não permite elementos duplicados:
08/04/23 34
![Page 35: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/35.jpg)
Collections – Conjuntos – java.util.Set
08/04/23 35
![Page 36: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/36.jpg)
Collections – Conjuntos – java.util.Set• Outra característica fundamental é o
fato de que a ordem em que os elementos são armazenados pode não ser a ordem na qual eles foram inseridos no conjunto.
• Tal ordem varia de implementação para implementação.
• Um conjunto é representado pela interface Set e tem como suas principais implementações as classes HashSet e TreeSet.
08/04/23 36
![Page 37: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/37.jpg)
Collections – Conjuntos – java.util.Set• O código a seguir cria um conjunto e adiciona três
itens, apesar de tentar adicionar quatro:
Set conjunto = new HashSet();conjunto.add("item 1");conjunto.add("item 2");conjunto.add("item 3");conjunto.add("item 3");// imprime a sequência na telaSystem.out.println(conjunto);
• O resultado são os elementos do conjunto, a ordem na qual eles aparecem podem ou não ser a ordem na qual eles foram inseridos e é incorreto supor que será sempre a mesma ordem!
08/04/23 37
![Page 38: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/38.jpg)
Collections – Percorrendo Coleções• Como percorrer os elementos de uma
coleção? Se for uma lista, podemos sempre utilizar um laço for, chamando o método get para cada elemento. Mas e se a coleção não permitir indexação?
• Por exemplo, um Set não possui uma função para pegar o primeiro, o segundo ou o quinto elemento do conjunto...
• Toda coleção fornece acesso a um iterator, um objeto que implementa a interface Iterator, que conhece internamente a coleção e dá acesso a todos os seus elementos, como a figura a seguir:
08/04/23 38
![Page 39: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/39.jpg)
Collections – Percorrendo Coleções
08/04/23 39
![Page 40: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/40.jpg)
Collections: Ordenando um Set• Seria possível usar uma outra
implementação de conjuntos, como um TreeSet, que insere os elementos, de tal forma, que quando forem percorridos, aparecem em uma ordem definida pelo método de comparação entre seus elementos. Esse método é definido pela interface Comparable.
08/04/23 40
![Page 41: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/41.jpg)
Collections – Percorrendo Coleções• Primeiro criamos um Iterator que entra na
coleção.• A cada chamada do método next(), o Iterator
retorna o próximo objeto do conjunto.• Um iterator pode ser obtido com o método
iterator() de Collection, por exemplo:
Iterator i = lista.iterator();
• A interface Iterator possui dois métodos principais: hasNext() indica se ainda existe um elemento a ser percorrido e next() retorna o próximo objeto.
08/04/23 41
![Page 42: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/42.jpg)
Collections – Percorrendo Coleções• Voltando ao exemplo do conjunto de
strings, vamos percorrer o conjunto:
// popula o conjuntoSet conjunto = new HashSet();conjunto.add(“item 1”);conjunto.add(“item 2”);conjunto.add(“item 3”);
// retorna o iteratorIterator i = conjunto.iterator();
// continua
08/04/23 42
![Page 43: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/43.jpg)
Collections – Percorrendo Coleçõeswhile (i.hasNext()) {
// recebe a palavra Object elemento = i.next(); String palavra = (String) elemento;
// mostra a palavra System.out.println(palavra);
}.
08/04/23 43
![Page 44: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/44.jpg)
Collections – Percorrendo Coleções• O while anterior só termina quando todos os elementos do
conjunto forem percorridos, isto é, quando o método hasNext mencionar que não existem mais itens.
• Em que ordem serão acessados os elementos?• Numa lista, os elementos irão aparecer de acordo com o
índice em que foram inseridos, isto é, de acordo com o que foi prédeterminado.
• Em um conjunto, a ordem depende da implementação da interface Set.
• Por que o Set é então tão importante e usado?• Para perceber se um item já existe em uma lista é muito
mais rápido usar um Set do que um List, e os TreeSets já vem ordenados de acordo com as características que desejarmos!
08/04/23 44
![Page 45: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/45.jpg)
Collections – Principais Interfaces• A busca em um Set pode ser mais
rápida que em um objeto do tipo List, pois diversas implementações utilizam tabelas de espalhamento (hashtables), trazendo a busca para tempo linear.
• A interface Map faz parte do framework mas não estende Collection. (veremos Map mais adiante).
08/04/23 45
![Page 46: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/46.jpg)
Collections – Principais Interfaces
08/04/23 46
![Page 47: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/47.jpg)
Collections : Mapas – java.util.Map• Um mapa é composto de uma associação
de um objeto chave a um objeto valor. É equivalente ao conceito de dicionário usado em várias linguagens. Algumas linguagens, como Perl ou PHP, possuem suporte nativo a mapas, onde são conhecidos como matrizes associativas.
• Ele é um mapa pois é possível usá-lo para mapear uma chave, por exemplo: mapeie o valor “Season” à chave “escola”, ou mapeie “Avenida Nelson D'Avila” à chave “rua”.
08/04/23 47
![Page 48: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/48.jpg)
Collections : Mapas – java.util.Map
08/04/23 48
![Page 49: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/49.jpg)
Collections : Mapas – java.util.Map• O método put(Object, Object) da
interface Map recebe a chave e o valor de uma nova associação. Para saber o que está associado a um determinado objeto-chave, passa-se esse objeto no método get(Object).
• Observem o exemplo: criamos duas contas e as colocamos em um mapa associando-as ao seu dono respectivamente.
08/04/23 49
![Page 50: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/50.jpg)
Collections – Mapas – java.util.MapConta c1 = new Conta();c1.depositar(10000);Conta c2 = new Conta();c2.depositar(3000);
// cria o mapaMap mapaDeContas = new HashMap();
// adiciona duas chaves e seus valoresmapaDeContas.put("diretor", c1);mapaDeContas.put("gerente", c2);
// qual a conta do diretor?Object elemento = mapaDeContas.get("diretor");Conta contaDoDiretor = (Conta) elemento;
08/04/23 50
![Page 51: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/51.jpg)
Collections : Mapas – java.util.Map• Um mapa, assim como as coleções, trabalha diretamente com
Objects (tanto na chave quanto no valor), o que torna necessário o casting no momento que recuperar elementos.
• Suas principais implementações são o HashMap e o Hashtable.
• Apesar do mapa fazer parte do framework, ele não implementa a interface Collection, por ter um comportamento bem diferente. Porém, as coleções internas de um mapa (a de chaves e a de valores) são acessíveis por métodos definidos na interface Map.
• O método keySet() retorna um Set com as chaves daquele mapa, e o método values() retorna a Collection com todos os valores que foram associados a alguma das chaves.
• Um mapa importante é a tradicional classe Properties, que mapeia strings e é muito utilizada para a configuração de aplicações.
08/04/23 51
![Page 52: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/52.jpg)
Collections : Mapas – java.util.Map
08/04/23 52
![Page 53: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/53.jpg)
Object
Cliente
Cliente cliente = new Cliente()
![Page 54: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/54.jpg)
Collections – Equals e HashCode• Muitas das coleções do Java guardam os
objetos dentro de tabelas de hash. Essas tabelas são utilizadas para que a pesquisa de um objeto seja feira de maneira rápida.
• Como funciona? Cada objeto é “classificado” pelo seu hashCode, e com isso conseguimos espalhar cada objeto agrupando-os pelo hashCode. Quando formos buscar um determinado objeto, só vamos procurar entre os elementos que estão no grupo daquele hashCode. Dentro desse grupo vamos testando o objeto procurado com o candidato usando equals().
08/04/23 54
![Page 55: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/55.jpg)
Collections – Equals e HashCode• Para que isso funcione direito, o método
hashCode de cada objeto deve retornar o mesmo valor para dois objetos se eles são considerados equals. Em outras palavras:
a.equals(b) implica a.hashCode() == b.hashCode()
• Implementar hashCode de tal maneira que ele retorne valores diferentes para dois objetos considerados equals quebra o contrato de Object, e resultará em collections que usam espalhamento (como HashSet, HashMap e Hashtable) não achando objetos iguais dentro de uma mesma coleção.
08/04/23 55
![Page 56: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/56.jpg)
Exercícios1) Criar duas classe filhas de Conta: ContaCorrente e
ContaPoupanca. Agora, criar na classe Banco, uma lista de Contas. Repare que nessa lista de Contas podemos colocar tanto ContaCorrente quanto ContaPoupanca. Criar um metodo void addConta(Conta c), um método Conta getConta(int x) e outro int totalDeContas().
2) Criar um método na classe Banco que busca por uma determinada Conta e informar se ela se encontra lá.
3) Criar um código que insira 100 mil números numa ArrayList e pesquise-os. Vamos usar um método da classe System para cronometrar o tempo gasto.
4) Troque a ArrayList por um HashSet e verifiquem o tempo que vai demorar.
08/04/23 56
![Page 57: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/57.jpg)
Aula 3
• Mais de java.util Trabalhando com Datas Manipulação de Arquivos Serialização de Objetos
08/04/23 57
![Page 58: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/58.jpg)
Trabalhando com Datas• Trabalhar com Datas é uma das coisas mais
trabalhosas em qualquer linguagem de programação. Aquelas que usam bancos de dados exigem do desenvolvedor um esforço maior ainda. Formatar a saída destes dados também pode ser um problema quando a formatação depende do local do usuário – ou seja, na internet estamos falando do mundo inteiro.
• A linguagem Java oferece um rico conjunto de classes para manipular datas. As principais classes para manipulação de datas pertence os pacote
• java.util:– java.util.Date– java.util.Calendar– java.util.GregorianCalendar
08/04/23 58
![Page 59: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/59.jpg)
Trabalhando com Datas• A classe Date representa, por default, a data corrente do
sistema em milisegundos.
• Anteriormente a versão 1.1 do Java, a classe Date suportava a criação de datas a partir de parâmetros como dia, mês, ano, horas, minutos, etc, e também a formatação e o parsing de strings para Datas. Porém, essas funções foram depreciadas por não suportarem internacionalização.
• A partir da versão 1.1, as classes Calendar e DateFormat foram inseridas na API e devem ser usadas para conversão entre campos de datas e horas para Date e formatação e parsing, respectivamente.
• Para instanciar um objeto Date:
Date hoje = new Date();System.out.println("A data de hoje é: " + hoje);
08/04/23 59
![Page 60: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/60.jpg)
Trabalhando com Datas• A classe abstrata Calendar também encapsula
um momento no tempo representado em milissegundos.
• Também provê métodos para manipulação desse momento.
• A subclasse concreta de Calendar mais usada é a GregorianCalendar que representa o calendário usado pela maior parte dos países (outras implementações existem, como a do calendário budista BuddhistCalendar, mas que são internas e devolvidas de acordo com suas respectivas localizações).
08/04/23 60
![Page 61: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/61.jpg)
Trabalhando com Datas• Para obter um Calendar que encapsula o instante
atual (data e hora), usamos o método estático getInstance() (familiar?) de Calendar:
Calendar c = Calendar.getInstance();System.out.println(“Dia do Mês:“ + c.get(Calendar.DAY_OF_MONTH));System.out.println(“Dia da Semana:“ + c.get(Calendar.DAY_OF_WEEK));
• No exemplo acima, imprimimos o dia de hoje e o dia da semana correspondente. Note que o dia da semana devolvido é um inteiro que representa o dia da semana (Calendar.MONDAY, etc.)
08/04/23 61
![Page 62: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/62.jpg)
Trabalhando com Datas• A partir de um Calendar, podemos saber o valor de seus
campos, como ano, mês, dia, hora e minuto. Para isso, usamos o método get que recebe um inteiro representando o campo; os valores possíveis estão em constantes na própria classe Calendar.
• Da mesma forma que podemos obter os valores dos campos, podemos atribuir novos valores a esses campos por meio dos métodos set. Há diversos métodos set em Calendar. O mais geral é o que recebe dois argumentos: o primeiro indica qual é o campo (usando as constantes de Calendar) e o segundo, o novo valor. Além desse método set, outros métodos set recebem valores de determinados campos; o set de três argumentos, por exemplo, recebe ano, mês e dia.
08/04/23 62
![Page 63: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/63.jpg)
Trabalhando com Datas• Vejamos um exemplo de como alterar a data de hoje:
Calendar c = Calendar.getInstance();c.set(Calendar.HOUR, 10);c.set(Calendar.MINUTE, 30);c.set(2005, 12, 25);
• Outro método bastante usado é add que adiciona uma certa quantidade a qualquer campo do Calendar. Por exemplo, para adicionar um ano à data de hoje:
Calendar c = Calendar.getInstance();c.add(Calendar.YEAR, 1); // adiciona 1 ao ano
• Note que, embora o método se chame add, também podemos usá-lo para subtrair valores, bastando colocar uma quantidade negativa no segundo argumento.
08/04/23 63
![Page 64: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/64.jpg)
Trabalhando com Datas• Os métodos after e before são usados para
comparar o objeto Calendar em questão a outro Calendar. O método after devolverá true quando o Calendar em questão estiver num momento no tempo maior que o do Calendar passado como argumento. Por exemplo, after devolverá false se compararmos o Dia das Crianças com o Natal, pois o Dia das Crianças não vem depois do Natal:
Calendar c1 = new GregorianCalendar(2005, Calendar.OCTOBER, 12);Calendar c2 = new GregorianCalendar(2005, Calendar.DECEMBER, 25);System.out.println(c1.after(c2)); // imprime false
08/04/23 64
![Page 65: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/65.jpg)
Trabalhando com Datas• Analogamente, o método before verifica se o
momento em questão vem antes do momento do Calendar passado como argumento. No exemplo anterior, c1.before(c2) devolverá true, pois o Dia das Crianças vem antes do Natal.
• Notem que Calendar implementa a interface Comparable. Isso quer dizer que podemos usar o método compareTo para comparar dois calendários. No fundo, after e before usam o compareTo para dar suas respostas.
08/04/23 65
![Page 66: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/66.jpg)
Trabalhando com Datas• Por default, em Java, datas consideradas
inválidas, como “35/08/1981” por exemplo, são “roladas”, ou seja, transformadas em datas válidas, adicionando os dias excedentes. A data 35/08/1981 será rolada para a seguinte data válida: 04/09/1981. Porém, caso uma data inválida seja informada, há uma maneira de evitar que essa transformação ocorra e uma exceção lançada.
• Para desabilitar esse comportamento é necessário utilizar o método setLenient(boolean), que evita a rolagem de data e lança uma exceção.
08/04/23 66
![Page 67: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/67.jpg)
Trabalhando com Datas• Exercício:
– Criar um método que verifique o intervalo entre duas datas e retorne o número de dias, dado dois objetos Calendar como argumentos.
08/04/23 67
![Page 68: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/68.jpg)
Trabalhando com Datas• O cálculo é feito pegando a diferença
entre as datas em milissegundos e dividindo esse valor pelo número de milissegundos em um dia:
public int diferencaEmDias(Calendar c1, Calendar c2) { long m1 = c1.getTimeInMillis(); long m2 = c2.getTimeInMillis(); Double d = new Double(((m2 - m1) / (24*60*60*1000))); return d.intValue();}
08/04/23 68
![Page 69: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/69.jpg)
Manipulando Arquivos• Assim como todo o resto das bibliotecas em Java,
a parte de controle de entrada e saída de dados (conhecido como I/O) é orientada a objetos e usa os principais conceitos mostrados até agora: interface, classes abstratas e polimorfismo.
• A idéia atrás do polimorfismo no pacote java.io é de utilizar fluxos de entrada (InputStream) e de saída (OutputStream) para toda e qualquer operação, seja ela relativa a um arquivo, a uma conexão remota via sockets ou até mesmo a entrada e saída padrão de um programa (normalmente o teclado e o console).
08/04/23 69
![Page 70: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/70.jpg)
Manipulando Arquivos• As classes abstratas InputStream e
OutputStream definem respectivamente o comportamento padrão dos fluxos em Java: em um fluxo de entrada é possível ler bytes e no fluxo de saída escrever bytes.
• A grande vantagem dessa abstração pode ser mostrada em um método qualquer que utiliza um OutputStream recebido como argumento para escrever em um fluxo de saída. Para onde o método está escrevendo? Não se sabe e não importa: quando o sistema precisar escrever em um arquivo ou em uma socket basta chamar o mesmo método!
08/04/23 70
![Page 71: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/71.jpg)
InputStream: Lendo bytes• Vamos ler um byte de um arquivo:
class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = new FileInputStream("arquivo.txt"); int b = is.read(); }}
• A classe InputStream é abstrata, e FileInputStream uma de suas filhas. Ela recebe uma String que é o nome do arquivo como argumento pelo construtor. Ela vai procurar o arquivo no diretório em que o java foi invocado (no caso do Eclipse vai ser dentro do diretório do projeto). Podemos usar um caminho absoluto.
08/04/23 71
![Page 72: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/72.jpg)
InputStream: Lendo bytes• Quando trabalhamos com java.io, diversos
métodos lançam IOException, que é uma exception do tipo checked, o que nos obriga a tratá-la ou lançá-la.
• Estamos aqui declarando IOException através do throws do main apenas para facilitar o exemplo, caso a exception ocorra a JVM vai parar mostrando a stacktrace.
• InputStream tem diversas filhas, como ObjectInputStream, AudioInputStream, ByteArrayInputStream, entre outras.
08/04/23 72
![Page 73: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/73.jpg)
InputStreamReader: lendo chars• Para recuperar um caractere precisamos traduzir os
bytes com o encoding dado para o respectivo código unicode. Escrever esse decoder é muito complicado. Mas o Java já nos oferece uma classe que faz isso, que é a classe InputStreamReader:
class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = new FileInputStream("arquivo.txt"); InputStreamReader isr = new InputStreamReader(is); int c = isr.read(); }}
• O construtor de InputStreamReader pode receber o character encoding a ser utilizado como parâmetro, se desejado, tais como UTF-8 ou ISO-88591.
08/04/23 73
![Page 74: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/74.jpg)
InputStreamReader: lendo chars
• InputStreamReader é filha da classe abstrata Reader. Existem diversas filhas, próprias para manipulação de chars. A mais apropriada para leitura de arquivos é a classe FileReader.
08/04/23 74
![Page 75: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/75.jpg)
BufferedReader: lendo Strings• Apesar da classe abstrata Reader já ajudar no
trabalho com caracteres ainda fica difícil para pegar uma String. É necesário fazer o casting de cada caractere para char e isso pode ser muito custoso. A classe BufferedReader é um Reader que recebe Reader no construtor e concatena os diversos chars para formar uma String através do método readLine:
class TestaEntrada { public static void main(String[] args) throws IOException { FileReader reader = new FileReader("arquivo.txt"); BufferedReader bReader = new BufferedReader(reader); String s = bReader.readLine(); }}
08/04/23 75
![Page 76: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/76.jpg)
BufferedReader: lendo Strings
• Como o próprio nome diz, essa classe lê do Reader por pedaços (também conhecidos como chunk) para evitar realizar muitas chamadas ao file system. Também podemos configurar o tamanho do buffer pelo construtor.
• O gráfico abaixo mostra a composição de classes na operação de leitura:
08/04/23 76
![Page 77: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/77.jpg)
BufferedReader: lendo Strings• O método readLine devolve a linha que foi lida e
muda o cursor para a próxima linha. Caso ele chegue ao fim do Reader (no nosso caso fim do arquivo), ele vai devolver null. Então com um simples laço podemos ler o arquivo por Inteiro:
class TestaEntrada { public static void main(String[] args) throws IOException { FileReader reader = new Filereader(“arquivo.txt”); BufferedReader bReader = new BufferedReader(reader);
String s = bReader.readLine(); // primeira linha while(s != null) { System.out.println(s); s = bReader.readLine(); } }}
08/04/23 77
![Page 78: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/78.jpg)
Lendo Strings do teclado
• Exercício:– Dado o gráfico abaixo, criar um mecanismo para leitura
de Strings digitado pelo teclado:
08/04/23 78
![Page 79: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/79.jpg)
Lendo Strings do teclado• Com um passe de mágica, passamos a ler do teclado
em vez de um arquivo, utilizando o System.in que é uma referência a um InputStream que lê da entrada padrão.
class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = System.in; InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr);
String s = br.readLine(); while(s != null) { System.out.println(s); s = br.readLine(); } }}
08/04/23 79
![Page 80: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/80.jpg)
A analogia na saída
• Como podemos imaginar, o processo de escrita (output) é o processo inverso ao de leitura (input):
08/04/23 80
![Page 81: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/81.jpg)
A analogia na saída• Exercício:
– Dado o gráfico anterior e o que vimos até agora sobre leitura, fazer um programa para escrita de um arquivo a partir de String lidos do teclado.
08/04/23 81
![Page 82: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/82.jpg)
Fechando arquivos• É importantíssimo SEMPRE fechar o arquivo, ou a classe a qual
estamos utilizando para facilitar a leitura/escrita. Ao realizar a operação de close, a classe facilitadora sempre fechará o stream do qual ela está lendo.
• O método close deve ser invocado de qualquer maneira, por isso é comum que este esteja dentro de um bloco finally.
• Se um arquivo for esquecido aberto, e a referência para ele for perdida, ele será fechado pelo garbage collector, que veremos mais a frente, por causa do finalize. Mas não é bom nos prendermos a isso. Se esquecermos de fechar o arquivo no caso de um programa pequeno como os que fizemos até agora, o programa vai terminar antes que o garbage collector atue, resultando em um arquivo não escrito (os bytes ficarão no buffer do BufferedWriter).
• Problemas similares podem acontecer com leitores deixados em aberto.
08/04/23 82
![Page 83: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/83.jpg)
Uma maneira mais fácil de ler arquivos• No java 1.5 temos a classe java.util.Scanner que facilita bastante o
trabalho de ler de um InputStream. Além disso, a classe PrintStream possui agora um construtor que já recebe o nome de um arquivo como argumento. Dessa forma a leitura do teclado com saída para um arquivo ficou muito simples:
Scanner s = new Scanner(System.in);PrintStream ps = new PrintStream("arquivo.txt");while(s.hasNextLine()) { ps.println(s.nextLine());}
• Ambos os métodos não lançam IOException (PrintStream lança FileNotFoundException se construirmos passando uma String, que é filha de IOException e indica que o arquivo não foi encontrado), sendo que o Scanner considerará que chegou ao fim se uma IOException for lançada, e o PrintStream simplesmente engole exceptions desse tipo. Ambos possuem métodos para verificar se algum problema ocorreu. A classe Scanner é do pacote java.util. Ela possui métodos muito úteis para trabalhar com Strings, em especial diversos métodos já preparados para pegar números e palavras já formatadas através de expressões regulares.
08/04/23 83
![Page 84: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/84.jpg)
Serialização de Objetos• No contexto de armazenamento e transmissão de
dados, a serialização é o processo de salvar um objeto em um meio de armazenamento (como um arquivo de computador ou um buffer de memória) ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto. Esta série de bytes pode ser usada para recriar um objeto com o mesmo estado interno que o original.
• A serialização fornece algumas vantagens, tais como:– Um método simples e robusto de tornar
objetos persistentes– Um método para a implementação de
chamadas de procedimento remoto– Um método a distribuição de objetos
08/04/23 84
![Page 85: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/85.jpg)
Serialização de Objetos• Para que tais funcionalidades sejam
usufruídas, deve ser mantida a independência de arquitetura. Por exemplo, um computador com uma arquitetura de hardware diferente deve ser capaz de reconstruir de forma consistente o fluxo de dados seriais.
• Em Java, para tornar um objeto Serializável, basta que a classe implemente a interface java.io.Serializable.
08/04/23 85
![Page 86: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/86.jpg)
Serialização de Objetos
• Tendo um objeto serializável em mãos, podemos tanto persistí-lo em disco, em um banco de dados, ou ainda enviá-lo através de uma rede.
• A linguagem Java oferece duas classes que permitem, a partir de um input stream ou um output stream, respectivamente serializar ou desserializar um objeto.
08/04/23 86
![Page 87: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/87.jpg)
Serialização de Objetos• A classe ObjectOutputStream permite
gravar através de um output stream um objeto serializável:
Conta c = new Conta(); // Nossa conta corrente é serializável
FileOutputStream output = new FileOutputStream(“arquivo.txt”);ObjectOutputStream objOutput = new ObjectOutputStream(output);
objOutput.writeObject(c); // Gravando a conta no arquivo
objOutput.flush();objOutput.close();
08/04/23 87
![Page 88: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/88.jpg)
Serialização de Objetos• E a classe ObjectInputStream permite ler
através de um input stream um objeto serializável:
FileInputStream input = new FileInputStream(“arquivo.txt”);ObjectInputStream objInput = new ObjectInputStream(input);
Object objeto = objInput.ReadObject(); Conta c = (Conta)c;
objInput.close();
08/04/23 88
![Page 89: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/89.jpg)
Serialização de Objetos
• Exercícios:– Dado o exercício de armazenamento de contas
da aula passada, criar um mecanismo para persistir as aulas em um arquivo texto e, sempre ao se inicializar a aplicação, recuperar as contas já criadas.
– Personalizar o aplicativo para ler as contas a partir de um arquivo configurado em um arquivo .properties (para manipulação de arquivos de propriedades, ver a classe Properties)
08/04/23 89
![Page 90: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/90.jpg)
Aula 4• JDBC
– Arquitetura– Drivers– DriveManager– Fazendo uma consulta no banco
• java.sql.Connection• java.sql.Statement• java.sql.ResultSet
• java.sql.PreparedStatement– Design Pattern DAO ( Data Access Object ) e VO
( Value Object )– Características– Arquitetura
08/04/23 90
![Page 91: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/91.jpg)
Banco de Dados• Banco de dados Relacionais.
– Uma reprodução de uma parte de uma mundo real.– Armazenamento dos dados ficam em Tabelas que são formadas por
linhas e colunas. E cada coluna representa um campo e cada linha um registro.
– Comprando com Classes Java as Tabelas são as Classes Java, cada Campo da Tabela é um Atributo de uma Classe e cada Registro da Tabela é um Objeto( representa propriamente o Dado).
– Utiliza uma linguagem padrão para sua manipulação. Padrão SQL ANSI. Mas cada banco aplica suas variações em cima deste padrão.
– Esta linguagem utiliza uma serie de comandos para definição de dados “estruturais” (DDL), tais como criação de Tabelas,Bancos de Dados etc. Ela utiliza outro tipos de comandos (DML) para manipular ( selecionar, inserir, excluir, etc. ) os registros de forma simultânea.
– Relacionamento entre entidades.• Tem como objetivo eliminar redundâncias na armazenagem dos
dados, evitando assim informações conflitantes.
08/04/23 91
![Page 92: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/92.jpg)
Linguagem SQL• Comandos de DDL
– Create Database: Criar um novo banco de dados.– Create TABLE: Criar uma nova tabela no banco de dados.– Alter Table: Alterar uma tabela no banco de dados.– Drop Table: Remover uma tabela no banco de dados.– Drop Database: Remover um banco de dados.
• Comandos de DML: – SELECT : Selecionar / Manipular os dados armazenados no
banco de dados. O produto desta seleção é chamado de “Recordset”.
– Insert :Comando dado para inserir dados da tabela– Update: Comando dado para atualizar dados já inseridos na
tabela.– Delete: Comando dado para excluir dados contidos na tabela.
08/04/23 92
![Page 93: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/93.jpg)
Sintaxe SQL - DML• Select : SELECT <campo1>,<campo2>,..<campoN>FROM <nomeTabela>WHERE <campo1> = and <campo2> = <valor2>
• INSERT INSERT INTO <nomeTabela>(<campo1>,<campo2>,..<campoN> VALUES (<valor1> , <valor2>, <valorN> ...)
• UPDATEUPDATE <NOME TABELA> SET <CAMPO1 = novoValorCAMPO1 > , <CAMPON =
novoValorCAMPON .. > WHERE <CAMPO COND1> = <VALOR COND1> AND <CAMPO CONDN> = <VALOR CONDN>
• DELETEDELETE FROM <NOME TABELA> WHERE <CAMPO COND1> = <VALOR COND1> and <CAMPO CONDN> = <VALOR CONDN>
08/04/23 93
![Page 94: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/94.jpg)
JDBC
•JDBC *– Disponibilizar uma interface de acesso e
manipulação de dados para vários bancos de dados (Oracle,My SQL, HSQLDB, Access)
– Qual a versão que utilizaremos desta API ?• JDBC 4.0
08/04/23 94
![Page 95: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/95.jpg)
JDBC - Arquitetura
Aplicação Java
Gerenciador de Driver do JDBC
JDBC Driver de Rede A
Ponte JDBC-ODBC
JDBC Driver D
ODBCDriver B
Driver B Nativo
Driver C Nativo
JDBC Driver C
08/04/23 95
![Page 96: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/96.jpg)
JDBC• Principais Interfaces
– Connection– Statement– PreparedStatement– CallableStatement– ResultSet– Driver
• Principais Classes– DriverManager– Timestamp
08/04/23 96
JavaDochttp://java.sun.com/j2se/1.5.0/docs/api
![Page 97: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/97.jpg)
JDBC – Sintaxe de Acesso• A Especificação JDBC define uma sintaxe particular para
conectar-se com o banco, ela de um endereço de localização uniforme (URL).Sua sintaxe básica é definida como:
jdbc:<nomedodriver>:<subnome>
Sendo o subnome os parametros de acesso ao banco, estes parametros variam de Drivers para drivers.
Ex:
Oracle: jdbc:oracle://[hostname]:[port]/[SID_Oracle]
MySQL: jdbc:mysql://[hostname]:[port]/[databesename]
DERBY : jdbc:derby://[hostname]:[port]/[databesename]
08/04/23 97
![Page 98: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/98.jpg)
Um programa JDBC mínimo1. public static void main (String[] args) throws Exception {2. 3. //Class.forName("org.apache.derby.jdbc.ClientDriver");4. Class.forName("com.mysql.jdbc.Driver"); 5. Connection conn = DriverManager6. .getConnection(7. "jdbc:mysql://localhost:3306/fastbuy“8. , "fastbuy“9. ,"fastbuy");
10. Statement stmt = conn.createStatement();11. ResultSet rset = stmt.executeQuery(12. "select * from organizacao");13. while (rset.next()) {14. System.out.println("Valor = " + rset.getString(1));15. }16. 17. }
08/04/23 98
![Page 99: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/99.jpg)
Um programa JDBC mínimo
08/04/23 99
Registra o Driver Provido pelo Fornecedor
Classe DriverManager retorna um Obj Instanciado da Interface Connection
A Partir de agora estou Conectado no Banco !!
Obj. Connection prove o Executor (Statement) de Comandos no Banco.
O Executor pode ou não Obter um Conjunto de Dados (ResultSet) do Banco
Posso Enviar uma instrução, comando para o Banco
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/fastbuy","fastbuy","fastbuy”);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from organizacao");
![Page 100: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/100.jpg)
JDBC – java.sql• Diagrama de Classes
08/04/23 100
Quem Prove a Classe Concreta ??
Veremos com mais Detalhes as interfaces Connection, Statement, PreparedStatement , ResultSet
![Page 101: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/101.jpg)
JDBC - Connection• Interface Connection: Representa a Seção do
usuário no banco, tem como objetivo prover informações sobre o banco , prover mecanismo para execução de Comandos SQL neste.
• Principais Métodos da Interface Connection
createStatement : Responsável por retornar uma instância concreta da Interface Statement.
prepareStatement : Responsável por retornar uma instância concreta da Interface PreparedStatement
prepareCall : Responsável por retornar uma instância concreta da Interface CallableStatement
08/04/23 101
![Page 102: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/102.jpg)
JDBC - Statement• Interface Statement: Utilizado pela execução de uma
instrução SQL estática e retornar o produto da instrução.
• Principais Métodos da Interface Statement
execute : Responsável por executar uma instrução SQL que pode retornar um conjunto de resultados.
executeQuery : Responsável por executar uma instrução SQL que pode retornar um objeto (ResultSet) de resultado
executeUpdate : Responsável por executar uma instrução SQL de atualização (INSERT,UPDATE,DELETE) retornando somente o volume de dados alterados.
executeBatch : Responsável por executar um conjunto de instruções (batch) SQL, este medoto deve ser utilizado após a chamada do método addBatch.
addBatch : Responsável por adicionar uma uma instrução SQL na fila de comandos para execução futura (executeBatch).
08/04/23 102
![Page 103: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/103.jpg)
JDBC - PreparedStatement• Interface PreparedStatement: Utilizado para a
execução de uma instrução SQL dinâmica e retornar o produto da instrução, estende a interface Statement
Principais Métodos da Interface PreparedStatement
execute : Responsável por executar uma instrução SQL que pode retornar um conjunto de resultados.
executeQuery : Responsável por executar uma instrução SQL que pode retornar um objeto (ResultSet) de resultado
executeUpdate : Responsável por executar uma instrução SQL de atualização (INSERT,UPDATE,DELETE) retornando somente o volume de dados alterados.
Veremos mais detalhes sobre Statement X PreparedStatement
08/04/23 103
Boa Prática
![Page 104: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/104.jpg)
JDBC - ResultSet• Interface ResultSet: Utilizado para representar uma coleção
(cursor) de dados obtidos do Banco de Dados, gerado por uma instrução executada por um Statement.Ela prove métodos de navegação (iteração) com o conjunto de dadas obtidos e também prove métodos para acesso a cada coluna (atributo) obtida.
Principais Métodos da Interface PreparedStatement
next : Responsável por mover o cursor para próximo registro e retornando verdadeiro ou falso (true|false).
getString, getInt, getDouble, getFloat, getCursor etc.. :São métodos para obtenção do valor contido em cada coluna retornada
pelo comando.
08/04/23 104
![Page 105: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/105.jpg)
Exercício
• Vamos criar uma Classe Chamada de TesteJDBC. Nela implementaremos os métodos realizarão as operações de CRUD (Create, Read, Update, Delete)– Criaremos os Seguintes métodos
• executeQuery()• executeInsert()• executeUpDate()• executeDelete()
08/04/23 105
![Page 106: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/106.jpg)
Lendo Dados do Bancopublic static void executeQuery() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://maquinaintrutor:3306/fastbuy“
, “fastbuy “
, “fastbuy");
System.out.println("Caraca ... maluco to no banco ... ");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select * from organizacao");
while (rset.next()) {
System.out.println(“ID Org :" + rset.getInt(“idorg"));
System.out.println("Nome :" + rset.getString(“nome"));
System.out.println("--");
}
} catch (SQLException ex) {
} catch (ClassNotFoundException ex) {
}
}
08/04/23 106
![Page 107: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/107.jpg)
Inserindo Dados no Bancopublic static void executeInsert() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://maquinaintrutor:3306/fastbuy“
, “fastbuy “
, “fastbuy");
Statement stmt = conn.createStatement();
int i = stmt.executeUpdate("insert into organizacao " +
" (nome,cnpj,status,ramoatividade) “ +
“ values (‘Eduardo Corp’,‘23333’, ‘aberto’ “ +
“ , ‘varejo’ , ‘juridica’ );
} catch (SQLException ex) {
} catch (ClassNotFoundException ex) {
}
}
08/04/23 107
![Page 108: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/108.jpg)
Atualizando Dados no Bancopublic static void executeUpdate () {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://maquinaintrutor:3306/fastbuy“
, “fastbuy “
, “fastbuy");
Statement stmt = conn.createStatement();
int i = stmt.executeUpdate(“update organizacao set " +
“ nome = ‘Bisso Corporation’ where cnpj = ‘23333’ “;
} catch (SQLException ex) {
} catch (ClassNotFoundException ex) {
}
}
08/04/23 108
![Page 109: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/109.jpg)
Excluindo Dados no Bancopublic static void executeUpdate () {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://maquinaintrutor:3306/fastbuy“
, “fastbuy “
, “fastbuy");
Statement stmt = conn.createStatement();
int i = stmt.executeUpdate(“delete from organizacao where cnpj = ‘23333’ “;
} catch (SQLException ex) {
} catch (ClassNotFoundException ex) {
}
}
08/04/23 109
![Page 110: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/110.jpg)
Qual a diferença ?
• Qual a diferença entre os métodos– executeQuery()– executeInsert()– executeUpDate()– executeDelete()
08/04/23 110
![Page 111: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/111.jpg)
JDBC : Como Aplicá-lo e AONDE ?• Divisão da Aplicação por camadas de
responsabilidade:
08/04/23 111
Modelo
Visualização
Controle
Camada de Integração e Persistência
Camada de Negócio
Qual o Pattern Responsável por Gerenciar a Camada de Persistência ?
DAO
![Page 112: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/112.jpg)
JDBC : Como Aplicá-lo e AONDE ?
• Aonde aplicá-lo nós vimos, e qual o pattern responsável por isso ? Como e devo criá-lo ?
• Para Demonstrar utilização do JDBC nós iniciaremos um projeto novo, que visa atender as necessidades do processo de compra de materiais de escritório de uma grande empresa.
08/04/23 112
![Page 113: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/113.jpg)
Projeto FastBuy• Criaremos um conjunto de classes que
representarão a lógica de negócio de um sistema de compras de materiais indiretos.
• Definiremos as grandes entidades envolvidas, para elas atribuiremos um conjunto de atributo que comporão o modelo de negócio.
• Conforme o andamento do projeto serão apresentados os padrões de projeto mais utilizados em cada camada da aplicação.
08/04/23 113
![Page 114: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/114.jpg)
Projeto FastBuy
• Entidades Envolvidas– Dados Mestres
• Materiais• Organização• Usuários
– Módulo de Compras• Pedido de Compra
08/04/23 114
![Page 115: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/115.jpg)
Projeto FastBuy - VOs
08/04/23 115
![Page 116: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/116.jpg)
Projeto FastBuy• Camada de Persistência
08/04/23 116
![Page 117: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/117.jpg)
Projeto FastBuy• Construção de Baixo para Cima.
– Desenvolver os componentes de infra-estrutura antes de construir os componentes da camada de negócio e apresentação, ou seja inicie sempre pelo DAO/VO.
08/04/23 117
![Page 118: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/118.jpg)
Criando o Projeto no NeatBeans
• Copiar o Diretório contida na pasta do instrutor chamada FastBuyERP.- Sub Diretórios
- src - Código Fonte.- lib - Bibliotecas- model – diagramas
- Crie um projeto baseado em um código que já exista.
08/04/23 118
![Page 119: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/119.jpg)
Projeto FastBuy• Vamos Olhar a implementação da Classe EnderecoDAO, que se encontra no package: br.com.season.fastbuyerp.persistencia
• Vamos verificar o metodo getEndereco (String login)
• Vamos aplicar a escada de acessos ... !!!
08/04/23 119
![Page 120: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/120.jpg)
Projeto FastBuy• Atividade em Grupo:
– Vamos criar o método: public EnderecoVO getEndereco(long idEndereco)
• Atividade em CASA :– Implementar o DAO de PedidoCompra utilizem os DAOs
implementados como base.
08/04/23 120
![Page 121: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/121.jpg)
Aula 6• Interface Gráfica
– Arquitetura– Diferenças entre AWT / Swing– Componentes e Eventos– Fazendo nossa primeira tela
• MVC– Arquitetura e classe da aplicação com banco de
dados – Fazendo uma aplicação de cadastro com JDBC– Construção da tela de cadastro– Reutilizando a tela de cadastro para Atualização– Monstrando mensagens para o usuário com
JOptionPanel
08/04/23 121
![Page 122: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/122.jpg)
Camada UI – Swing O que é ? Com o Java 1.2 ele se tornou o novo toolkit gráfico substituindo os
componentes visuais do AWT e acrescentando muitas novas funcionalidades. Os componentes visuais são escritos inteiramente em Java, o que garante recursos e comportamento independente da plataforma. Isso a torna também “diferente” das aplicações nativas, no seu visual e comportamento. Apesar do recurso de look-and-feels personalizados (Basicamente uma capacidade de temas para o Swing), e o mesmo com as melhorias nas ultimas versões do Java, ainda é possivel perceber claramente quando uma aplicação e puro-Java ou quando ela usa um toolkit nativo (Dephi, VB) no Windows, ou no Gnome e KDE no Linux (Isso não é necessariamente uma desvantagem).
O Swing também implementa muitos design patters orientados a objetos, o que o torna o toolkit gráfico mais flexível, extensível e poderoso do mercado, porém este recurso traz um custo significativo em performance e Curva de Aprendizado.
08/04/23 122
![Page 123: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/123.jpg)
Swing no Java 1.6
08/04/23 123
![Page 124: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/124.jpg)
Swing - Arquitetura
08/04/23 124
AWTAWT
Sistema Gráfico do SOSistema Gráfico do SO
SwingSwing
Acesso ao Hardwarde
Primitivas Gráficas e Componentes
Simples
Componentes Sofisticados
Componentes MVC
Note que o Swing e o AWT duplicam parte da funcionalidade gráfica básica fornecida pela plataforma nativa (anti-aliasing de textos, efeitos com janelas e vários outros recursos ), que o torna mais difícil das aplicações Java se beneficiarem de hardware gráfico acelerado e outras otimizações do sistema operacional. Isso contribui em parte para a percepção de “lentidão” de aplicações Swing otimizadas.
![Page 125: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/125.jpg)
Swing - Pacotesjavax.swing - Provides a set of "lightweight" (written in Java with no native code) components
that, to the maximum degree possible, work the same on all platforms. javax.swing.colorchooser - Contains classes and interfaces used by the JColorChooser
component.
javax.swing.event - Provides support for events fired by Swing components.
javax.swing.filechooser - Contains classes and interfaces used by the JFileChooser component.
javax.swing.plaf - Provides one interface and many abstract classes that Swing uses to provide its pluggable look and feel capabilities.
all painting is delegated.
javax.swing.table - Provides classes and interfaces for dealing with JTable.
javax.swing.text - Provides classes and interfaces that deal with editable and non-editable text components.
javax.swing.text.rtf - Provides a class (RTFEditorKit) for creating Rich Text Format text editors.
javax.swing.tree - Provides classes and interfaces for dealing with JTree.
javax.swing.undo - Allows developers to provide support for undo/redo in applications such as text editors.
08/04/23 125
![Page 126: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/126.jpg)
Swing - Componentes• JLabel• JButton• JTextField• JRadioButton• JCheckBox• JComboBox• JList• JProgressBar• JTabbedPane• JTree• JTable• JMenuBar• JToolBar
08/04/23 126
![Page 127: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/127.jpg)
Swing – 1º Componentes• Nosso Primeiro Componente
– Vamos Criar a classe Main no pacote :• br.com.fastbuy.view.gui
Vamos criar nosso primeiro componenteSwing.
1. Acesse o menu New File do NeatBeans.
2. Selecione a opçãoJava Gui Form e JFrame Form
08/04/23 127
![Page 128: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/128.jpg)
Swing – 1º Componente
08/04/23 128
Componentes Utilizados
-JFrame (Container)-JPanel -JLabel-JTextField-JToolBar-JButton-JScrollBar-JTable-JComboBox-JSeparator
![Page 129: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/129.jpg)
Swing – 1º Componente• Boas Praticas
– Alterar nome dos Componentes para nomes compreensíveis, ou seja , não utilize JTextField1, textA , etc ... Utilize o nome do atributo que ele representa. Por Exemplo um JTextField que conterá o atributo ‘nome” defina o nome do componente como nomeTxt ou txtNome.
08/04/23 129
![Page 130: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/130.jpg)
Swing – 1º Componente
08/04/23 130
Componentes Utilizados
-JFrame (Container)-JPanel -JLabel-JTextField-JToolBar-JButton-JScrollBar-JTable-JComboBox
![Page 131: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/131.jpg)
Swing – 1º Componente
08/04/23 131
Componentes Utilizados
-JFrame (Container)-JPanel -JLabel-JTextField-JToolBar-JButton-JScrollBar-JTable-JComboBox
![Page 132: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/132.jpg)
Swing Customizando Componentes• Os componentes Swing são Segregados em três camadas ( Model, View, Controler)
, quando adicionamos um JButton no nosso formulário, na verdade estamos adicionando um controlador, que gerencia a camada de Apresentação e Modelo deste Componente.
• Os componente Swing JButton , JLabel , JList , JTable são controladores que gerenciam os Componentes de "PLAF“ (Pluggable Look-And-Feel) como por ex : javax.swing.plaf.ButtonUI e também os componentes de Modelo que são os responsáveis pelo comportamento do
componente Button. Este tipo de arquitetura é o diferencial das Aplicações Swing comparado com outros framework GUI de mercado (Delphi , Visual Basic).
• Isso proporciona maior escalabilidade referente a Look and Feel e customização do comportamento de cada componente, ou seja, ganho de capacidade de aplicar Skins a minha apresentação sem afetar o comportamento do componente.
08/04/23 132
![Page 133: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/133.jpg)
Swing Customizando Componentes• Também posso alterar o comportamento dos componentes existentes. Por exemplo: Por
Default um JTable não é capaz de identificar se uma determinada célula (LinhaXColuna) deverá ter a cor da Fonte Vermelha ou Exibir uma Imagem baseado no conteúdo ou ainda exibir uma ComboBox com uma lista de valores possíveis para aquela célula. Então vamos observar como é a relação do Componente JTable (Controle) com outras classes e interfaces.
08/04/23 133
![Page 134: Classes Java , JDBC / Swing / Collections](https://reader033.vdocuments.site/reader033/viewer/2022061114/5462abe5af79597c138b4b42/html5/thumbnails/134.jpg)
Swing – Trabalhando com Eventos
08/04/23 134