Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivos do Curso
Apresentar as estruturas sintticas da linguagem Java e respectiva semntica Conhecer as principais bibliotecas e APIs que Java oferece Entender os conceitos e terminologia de orientao a objetos e sua aplicabilidade em Java Conhecer uma ferramenta de desenvolvimento (IDE) utilizada no mercado
Prof. Rmulo Silva
Ementa do Curso
Orientao a Objetos:
Classes e Objetos Herana Polimorfismo Interfaces de objetos Classes Abstratas Agregao e Composio
Linguagem Java:
Tipos Primitivos Controle de fluxo em programas Arrays Escopo e Modularizao Tratamento de excees Colees Interface grfica bsica
Captulo 1 - Introduo
Linguagem Java
Criada pela Sun Microsystems em 1995 Independente de sistema operacional e plataformas Orientada a objetos Construes sintticas semelhantes a C++ Portabilidade:
write once, run anywhere
Mquina Virtual
Especificao de uma mquina abstrata implementada em software Traduz o cdigo compilado para a plataforma especfica
Mquina Virtual
p ro g ra m a
_ _ _ _ _ _ _ _ __ __ __ __ __ __ __ __ ___ ___ ___ ___ ___ ___ ___ ___
f o n t e (. ja v a )
___ ___ ___ ___ ___ ___ ___ ___ __ __ __ __ __ __ __ __
b y te c o d e ( .c l a s s )
100 101 100 101 101 110 010 10 01 00 01 01 00 10 000 011 111 010 011 101 101 111 101 100 101 110 110 010 000 011 010 010 100 101 101
M q u in a V i r t u a l p / S o l a r is
M q u i n a V i r tu a l p / W in d o w s X P
compilador
M q u i n a V i r tu a l p / L in u x
S o la r is
W in d o w s X P
L in u x
Linguagem Java
Verso atual: 5.0 (ano base: 2005) No permite aritmtica de ponteiros Possui Garbage Collection (Coleta de lixo) Suporte nativo para criao de programas concorrentes/paralelos (threads) Programao de sistemas distribudos relativamente simples
Tecnologia Java
Atualmente (ano base: 2005) existe uma srie de produtos/ferramentas para o desenvolvimento de aplicaes. Exs.:
JSP (Java Server Pages) EJB (Enterprise Java Beans) JDBC (Java Database Conectivity) JNDI (Java Naming and Directory Interface)
Plataforma Java
J2SE (Java 2 Standard Edition): ferramentas e APIs essenciais maioria das aplicaes J2EE (Java 2 Enterprise Editon): ferramentas e APIs para desenvolvimento de aplicaes distribudas J2ME (Java 2 Micro Edition): ferramentas e APIs para desenvolvimento de aplicaes para aparelhos portteis.
Plataforma Java
J2SDK
Java 2 System Development Kit:
Ferramentas de linha de comando para compilar, depurar e executar programas compilador (comando javac) depurador (comando jdb)
Ps-instalao
Para execuo das ferramentas via linha de comando, aps a instalao:
criar varivel de ambiente $JAVA_HOME para conter o diretrio de instalao Incluir $JAVA_HOME/bin no PATH do sistema
Compilao e Execuo
via linha de comando:
Localizao: $JAVA_HOME/bin/ Compilao: Comando javac Execuo: Comando java
Processo de compilao
Arquivos fontes:
extenso .java
Arquivos de bytecodes:
extenso .class
Execuo de Aplicaes
Varivel de ambiente CLASSPATH:
Armazena caminhos dos arquivos de bytecodes (.class) Pode ser sobreposta durante a execuo: java cp c:\dir1;c:\dir2 MinhaAplicacao
Documentao da API
Distribuda separada do J2SDK, disponvel em formato HTML em http://java.sun.com Exibe a especificao de todas as classes das bibliotecas oferecidas pela linguagem.
IDEs
Eclipse:
http://www.eclipse.org
Netbeans:
http://www.netbeans.org
JDeveloper
http://www.oracle.com
JBuilder
http://www.borland.com
Primeira Aplicao
Arquivo fonte: PrimeiraAplicacao.java
public class PrimeiraAplicacao { // este metodo eh o ponto de entrada do programa public static void main(String args[]){ System.out.println("Minha primeira aplicao em Java"); } }
Elementos do programa
Nome da classe Comentrio de linha public class PrimeiraAplicacao { // este metodo eh o ponto de entrada do programa public static void main(String args[]){ System.out.println("Minha primeira aplicao em Java"); } }
Nome do mtodo
O mtodo main
Define o ponto de incio de execuo da aplicao (programa principal) Deve ter sempre a assinatura:
public static void main(String args[])
O parmetro args serve para passar argumentos via linha comando, capturados como strings.
Ex.: java MinhaAplicacao arg1 arg2
Padres de Codificao
Importante: Java case sensitive Padres para nomeao de classes, variveis e mtodos
Facilitam a legibilidade do cdigo Melhoram a manutenibilidade
Idia bsica: a forma de escrever o nome identifica a sua categoria (classe, mtodo, varivel, constante, ...)
Padres de Codificao
Nome de classe: apenas a letra inicial maiscula de cada palavra
Ex:. PrimeiraAplicacao System
Padres de codificao
Arquivos fontes:
Um arquivo fonte contm a definio de uma nica classe Nome do arquivo igual o nome da classe Extenso .java
Aps a compilao:
gerado um arquivo .class para cada .java correspondente.
Exerccio
1- Faa um outro programa, criando uma classe chamada SegundaAplicacao, que imprima as seguintes mensagens na tela: Segunda Aplicao em Java, Imprimindo 3 mensagens e Fim do Programa.
Declarao de variveis
Sintaxe: tipo da varivel seguido pelo nome da varivel.
int quantidade;
Tipo da varivel
Nome da varivel
String nome;
Hibridismo
Java uma linguagem hbrida:
Nem tudo objeto
Tipos Primitivos
Tipo Tamanho ------16 bits 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Valor Mnimo ------Unicode 0 -128 -215 -231 -263 IEEE 754 IEEE 754 Valor Mximo -----Unicode 216 - 1 +127 +215 1 +231 1 +263 -1 IEEE 754 IEEE 754
Tipos Primitivos
Exemplos:
int i = 10; boolean cancelado = false; char ch1 = 'a'; char ch2 = '\u0041'; // caracter a em Unicode float f = 5.7F;
Variveis Numricas
Operadores de
Incremento: ++ e += Decremento: -- e -=
Exs.:
int i = 5; i++; // incrementa i de 1, equivale a i = i + 1 System.out.println(i); // ira imprimir o valor 6 int j = 5; j--; // decrementa i de 1, equivale a j = j - 1 System.out.println(j); // ira imprimir o valor 4 int k = 5; k+=3; // incrementa i de 3, equivale a k = k + 3 System.out.println(k); // ira imprimir o valor 8
Pr-incremento e PsDecremento
int i = 5; int j = i++; System.out.println(i); // ira imprimir o valor 6 System.out.println(j); // ira imprimir o valor 5 int k = ++i; System.out.println(i); // ira imprimir o valor 7 System.out.println(k); // ira imprimir o valor 7
Expresses Numricas
O resultado de expresses numricas automaticamente convertido para o tipo com a maior quantidade de bits. Ex.:
A soma de um inteiro e um ponto flutuante convertida para ponto flutuante
int i = 5; float x = 3; float y; y = x + i; x + i convertido para float antes da atribuio a y
Casting
Converso explcita de um tipo para outro Tipos primitivos
Utilizado quando se quer converter para um tipo que usa um nmero menor de bits para representar o nmero
Ex.:
double e = 2.718; int y = (int) e; // ir truncar (y = 2)
Ponto Flutuante
Literais de ponto flutuante so default considerados do tipo double.
Colocar F no fim do nmero quando desejar que sejam considerados do tipo float
Ex.:
float numeroPI = 3.14F;
Importante
Exerccios
1- Faa um programa para calcular a o permetro e a rea de crculo de raio de 3 cm. (dados : Permetro = 2R e rea = R2).
Exerccios
2- Quais os valores de i, k e z em cada uma das mensagens de impresso e porque?
Exerccios
3- Altere o programa do exerccio 1 para imprimir o valor inteiro do permetro e da rea do crculo, alm do resultado em ponto flutuante
Comando if
Sintaxe:
if(expresso-booleana) bloco1 else bloco2
Comando if
int x = 2; int y = 5; int z; if(x < y) { System.out.println("x menor que y"); z = x; } else { System.out.println("x maior que y "); z = y; } expresso booleana bloco de comandos
Expresso booleana
Operadores de comparao:
==, !=, >, >=, <, <=
Conectores lgicos:
&& (AND) || (OR) ! (NOT)
Expresso booleana
Observao:
No confundir o operador de atribuio (=) com o operador de comparao de igualdade (==)
Comando for
Sintaxe:
for(inicializao;expressobooleana;incremento) bloco-de-comandos
inicializao incremento
Ex.:
for(int i = 0; i < 10; i++) { System.out.println("O valor de i: " + i); }
Prof. Rmulo Silva
Comando while
Sintaxe:
while(expresso-booleana) Bloco-de-comandos
Ex.:
int i = 0; while(i < 10) { System.out.println("O valor de i: " + i); }
Comando do-while
Sintaxe:
do bloco-de-comandos while(expresso booleana)
Comando switch
Sintaxe:
switch(expresso-inteira) { case VALOR1: bloco-de-comandos1 break; case VALOR2: bloco-de-comandos2 break; ... case VALOR-N: bloco-de-comandosN break; default: bloco-de-comandos-default }
Comando switch
Ex.:
int opcaoMenu; ... switch(opcaoMenu) { case 1: System.out.println("escolheu a opcao 1"); break; case 2: System.out.println("escolheu a opcao 2"); break; case 3: System.out.println("escolheu a opcao 3"); break; default: System.out.println("escolheu outra opcao "); Prof. Rmulo Silva }
Comando switch
possvel ter um nico bloco de comandos para vrios cases. Ex.:
int opcaoMenu; ... switch(opcaoMenu) { case 1: System.out.println("escolheu a opcao 1"); break; case 2: case 3: System.out.println("opces 2 e 3 retiradas"); break; default: System.out.println("escolheu outra opcao"); }
Comando break
Tambm pode ser usado para forar a sada de loops Ex.: int x = 0; for(int i = 0; i < 10; i++) { x = x + i; if(x > 15) break; }
Prof. Rmulo Silva
Comando continue
Salta para o fim do bloco do loop e fora o teste novamente. Ex.:
int i = 0; while(i < 10) { if(i == 5) { Salta os comandos abaixo i++; continue; } System.out.println(i); i++; }
Prof. Rmulo Silva
Observaes
Evite usar break e continue dentro de loops
Comprometem a legibilidade do cdigo
Exerccios
1 - Faa um programa que imprima os nmeros de 1 a 100 inclusive. 2 - Faa um programa que imprima o fatorial de 1 a 10 inclusive. 3 - Altere o programa do exerccio 1 para imprimir uma mensagem na tela quando o nmero for mltiplo de 3 ou mltiplo de 5. 4 - Faa um programa que calcule o resto da diviso por 9 dos nmeros de 1 a 100, e imprima o prprio resto da diviso quando ele for igual a 2, 3, 5 ou 7. Para os outros valores imprima o dobro do resto
Prof. Rmulo Silva
Paradigma
Um paradigma de programao um modelo de construo de programas
Forma de abstrao
Orientao a objetos:
um paradigma de programao A soluo do problema corresponde a interaes de objetos criados em tempo de execuo
OO e Java
Compreender as estruturas sintticas parte fundamental para construo de sistemas OO, porm no suficiente O entendimento dos conceitos de OO que permitem construir bons sistemas:
Manutenibilidade Reusabilidade Flexibilidade
Objetos
Conceitos que possuem:
Identidade Estado Comportamento
Em Java:
Identidade: endereo do objeto na memria Estado: valores armazenados no objeto Comportamento: operaes aplicveis sobre o objeto
Classes
A classe uma especificao das caractersticas de objetos:
Definio das variveis dos objetos e das operaes que as manipulam
Classes no existem em tempo de execuo no contexto do programa, apenas seus objetos. Analogia:
Planta de um edifcio (especificao da classe) O edifcio construdo (objeto)
Prof. Rmulo Silva
Terminologia OO
Dados dos objetos:
Variveis de instncia ou atributos
Operaes:
Mtodos ou mensagens
Membros:
Usado indistintamente para atributos e mtodos
Ex. de classe
class MensagemTela { String mensagem;
construtor
public void imprime() { mtodo System.out.println(mensagem); } public static void main(String args[]) { MensagemTela msg = new MensagemTela(Hello World"); msg.imprime(); criao de objeto } chamada de mtodo }
Construtores
Definem como construir um objeto da classe Devem ter o mesmo nome da classe No devem indicar retorno, pois retornam implicitamente um objeto da prpria classe Criao de objeto (instanciao)
Invocao do construtor usando o operador new
Prof. Rmulo Silva
Mtodos
Definem as operaes vlidas para o objeto (comportamento) Sintaxe:
visibilidade tipo-retorno nome-mtodo(lista-parmetros) { corpo-do-mtodo }
Classes Pr-definidas
Em Java existem vrias classes prdefinidas que compem a API da linguagem. Exs.:
System Object String
Na prtica:
A alocao de memria para objetos/tipos privimitos diferente Tipo primitivo: variveis armazenam o prprio valor Tipo objeto: variveis armazenam o endereo do objeto na memria (referncia)
Prof. Rmulo Silva
M e m r ia x y 2
int x = 2; int y = x;
AAA msg1
msg2
BBB
msg1 = msg2;
M e m ria
A A A m sg1
m sg2
B B B
Comparao de objetos
O operador == compara valores de referncias e no valores armazenados nos objetos
MensagemTela msg1 = new MensagemTela("AAA"); MensagemTela msg2 = new MensagemTela("AAA");
M e m ria
A A A m sg1
objetos diferentes
m sg2
A A A "
null
Variveis de tipo objeto no inicializadas tem valor null A chamada de um mtodo sobre uma varivel que tem valor null ocasiona o lanamento da exceo NullPointerException Ex.:
MensagemTela msg1; msg1.imprime();
varivel com valor null
Exerccios
1 - Implementar a classe Pessoa com os seguintes
atributos: nome, idade e endereo. Crie um mtodo chamado imprime que imprima os dados da pessoa.
Captulo 7 Arrays
Arrays
Estrutura semelhante a vetores e matrizes em Matemtica Ex.:
tipo dos elementos
int[] x = new int[5]; x[0] = 20; nmero de elementos x[1] = 30; x[2] = 40; x[3] = 50; x[4] = 60;
Prof. Rmulo Silva
Arrays
Sempre comeam do ndice 0 uma referncia para elementos (tipos primitivos ou objetos)
Alocao da quantidade de elementos: operador new
Arrays
Podem ser inicializados com literais diretamente: int[] meuArray = { 10, 20, 30 }; No possvel alterar a quantidade de elementos aps a inicializao
Arrays
Arrays sem inicializao dos elementos:
Tipos numricos: elementos tm valor 0 (zero) Tipo booleano: elementos tm valor false Tipos objetos: elementos tm valor null
Arrays de objetos
tipo dos elementos alocao do nmero de elementos
MensagemTela[] meuArray = new MensagemTela[3]; meuArray[0] = new MensagemTela("AAA"); meuArray[1] = new MensagemTela("BBB"); meuArray[2] = new MensagemTela("CCC");
Nmero de elementos
O nmero de elementos pode ser obtido acessando-se a propriedade length
int[] meuArrayInt = new int[7]; ... for(int i = 0; i < meuArrayInt.length; i++){ System.out.println(meuArrayInt[i]); }
nmero de elementos
Arrays Multidimensionais
linhas
Arrays Multidimensionais
Em Java, matrizes so na verdade arrays de arrays.
dimenso no inicializada
int[][] mat = new int[2][]; mat[0] = new int[3]; mat[1] = new int[4];
3 elementos na linha 0 4 elementos na linha 1
System.out.println(mat[1].length);
Arrays Multimensionais
Inicializao usando literais:
int[][] mat = { {10,20}, {30,40,50}, {60,70} };
A classe System possui o mtodo arrayCopy para copiar elementos de um array para outro. quantidade de elementos
int[] origem = {20,30,40}; int[] destino = new int[10]; System.arraycopy(origem,0,destino,3,2); posio de incio da cpia a serem copiados
Arrays - varredura
Utilizando a propriedade length:
int[] meuArray = {10,20,30}; for(int i = 0; i < meuArray.length; i++){ System.out.println(meuArray[i]); }
Arrays - varredura
Utilizando enhanced-for (vlido somente na verso 5.0):
No precisa testar a propriedade length int[] meuArray = {10,20,30}; for(int x: meuArray) { System.out.println(x); }
Exerccios
1- Crie uma classe Matriz de inteiros, cujo construtor recebe como parmetro o nmero de linhas e colunas, e inicializa um array bidimensional com as dimenses correspondentes aos parmetros passados. Crie mtodos para atribuir e retornar valor de um elemento e outro para imprimir todos os elementos da matriz. Defina o mtodo main para testar a classe construda. 2 - Crie um array de 5 elementos da classe Pessoa, incialize-os e use um enhanced-for para varrer e imprimir os elementos.
Exerccios
3 - Crie um classe chamada TrianguloPascal cujo construtor receba como parmetro o nmero linhas e crie um array bidimensional que os nmeros do Tringulo de Pascal at atingir o nmero de linhas informado. Abaixo mostrado o Tringulo de Pascal para 5 linhas.
1 1 1 1 1 1 2 1 3 3 1 4 6 4 1
Orientao a Objetos
possvel escrever programas em Java sem utilizar os recursos OO, porm so:
difceis de dar manuteno difceis de reutilizar Perdem os benefcios de OO
As linguagens de programao fornecem ao programador meios de definir novos tipos a partir dos existentes
Linguagens OO
Os principais mecanismos (tcnicas) para definio de novos tipos das linguagens OO, incluindo Java, so:
Herana Sobreposio (overrinding) Sobrecarga (overloading) Polimorfismo
Herana
Chamada de generalizao/especializao Define uma classe como uma extenso (especializao) de outra definida previamente Efeito:
A classe derivada (especializada) herda todos os atributos e mtodos definidos na classe genrica
Herana - exemplo
class Pessoa { String nome; int idade; construtor atributos parmetros
public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; } public void incrementaIdade() { idade++; } } referncia para o objeto sendo criado mtodo
Herana - exemplo
classe derivada (subclasse)
class Aluno extends Pessoa {
construtor
String matricula; public Aluno(String nome, int idade, String matricula){ super(nome,idade); this.matricula = matricula; } public String getMatricula() { chamada para o return matricula; construtor da superclasse } }
superclasse
Aluno
matricula getMatricula(): int
subclasse
atributos e mtodo herdados pela classe Aluno atributo exclusivo da classe Aluno
Aluno
matricula getMatricula(): int
Herana - exemplo
O mtodo incrementaIdade() vlido para objetos do tipo Aluno:
Aluno meuAluno = new Aluno("Joao", 20, "12345-X"); meuAluno.incrementaIdade(); mtodo herdado da classe Pessoa
Variveis do tipo Pessoa podem armazenar referncias para objetos do tipo Aluno
Pessoa p = new Aluno("Joao", 20, "12345-X"); p.incrementaIdade();
Automovel
Motocicleta
Palio
Corsa
Veiculo superclasse de Automovel e Motocicleta Todo Automovel um Veiculo Toda Motocicleta um Veiculo Todo Palio um Automovel Todo Corsa um Automovel
Herana
As classes derivadas so um subtipo da classe base:
Relao um
Aplicao da herana:
Reuso de cdigo (implementao)
Deve ser empregada com critrio, pois um relacionamento esttico entre classes
Todos os objetos so afetados
Herana - Object
Todas as classes que no especificam uma superclasse so derivadas da classe prdefinida Object Object a raiz da hierarquia de herana
superclasse de todas as classes no sistema
Herana Mltipla
Herana mltipla:
Capacidade de uma classe ter mais de uma classe base
A B
C derivada das classes A e B
Herana - observaes
Java NO permite herana mltipla de classes, como ocorrem em outras linguagens, como em C++.
Evitar ambigidade
A
m (): v o id
B
m (): v o id
chamada ambgua
Referncias
Chamada de mtodos da subclasse usando variveis do tipo da superclasse so invlidos, mesmo que armazenam referncia para objeto da subclasse. Ex.:
Pessoa p = new Aluno("Joao", 20, "12345-X"); String matricula = p.getMatricula();
Casting
A chamada de um mtodo da subclasse usando uma referncia de objeto da superclasse possvel usando casting Ex.:
Pessoa p = new Aluno("Joao", 20, "12345-X"); String matricula = ((Aluno)p).getMatricula();
casting
ClassCastException
Um casting invlido ocasiona o lanamento da exceo ClassCastException Ex.:
Pessoa p = new Pessoa("Maria", 30); String matricula = ((Aluno)p).getMatricula();
instanceof
O operador instanceof permite testar se uma varivel uma referncia para um tipo especfico
Usado para evitar castings invlidos
Pessoa p; ... if(p instanceof Aluno) { String matricula = ((Aluno)p).getMatricula(); }
Assinatura de um mtodo
o que diferencia um mtodo de outro do ponto de vista da chamada (invocao):
Nome do mtodo Quantidade, tipo e ordem dos parmetros
class Veiculo { String placa; int velocidade; public Veiculo(String placa){ this.placa = placa; } assinatura
Sobreposio (overrinding)
a sobrescrita de um mtodo herdado til quando a classe derivada precisa especializar ou alterar algum comportamento definido na superclasse. A assinatura do mtodo sobrescrito deve ser idntica a do mtodo definido na classe base
Sobreposio
Pessoa
Aluno
Sobreposio - exemplo
class Funcionario extends Pessoa { float salarioBase; public Funcionario(String nome, int idade, float salarioBase) { super(nome,idade); this.salarioBase = salarioBase; } salrio do funcionrio = salrio base public float getSalario() { return salarioBase; } }
Sobreposio - exemplo
class Professor extends Funcionario { boolean temAbono; public Professor(String nome, int idade, float salarioBase, boolean temAbono) { super(nome,idade,salarioBase); mtodo sobrescrito this.temAbono = temAbono; } public float getSalario() { if(temAbono) return super.getSalario() + 200;//abono fixo. else return super.getSalario();// sem abono } } chama o mtodo definido na superclasse
Sobreposio - exemplo
Funcionario f1 = new Funcionario("Joao",20,300); float salarioF1 = f1.getSalario(); // R$ 300,00 executa mtodo definido na classe Funcionario Professor f2 = new Professor("Joao",20,300, true); float salarioF2 = f2.getSalario(); //R$ 500,00
Sobreposio
O mtodo invocado de acordo com o tipo real do objeto, e no de acordo com o tipo da varivel declarada.
Funcionario f = new Professor("Joao",20,300, true); float salario = f.getSalario(); //R$ 500,00
Sobrecarga (overloading)
a definio de mtodos que possuem o mesmo nome, porm com assinaturas diferentes
Quantidade de parmetros diferentes Ordem dos parmetros Tipo dos parmetros
Sobrecarga (overloading)
til quando:
Se quer definir valores defaults para um ou mais parmetros Se deseja disponibilizar um mtodo que faa a mesma tarefa, porm de forma diferente
Sobrecarga exemplo
class Professor extends Funcionario { ... assinatura public float getSalario() { if(temAbono) return super.getSalario() + 200;//abono fixo. else return super.getSalario();//sem abono } public float getSalario(float horas) { return 20*horas; } ... }
assinatura
Sobrecarga - exemplo
Professor prof = new Professor("Jose", 20,300,true ); ... float sal1 = prof1.getSalario(); //ir retornar R$500 ... executa a definio de getSalario() sem parmetro
float sal2 = prof1.getSalario(30);//ir retornar R$600 executa a definio de getSalario() com parmetro do tipo float
Sobrecarga de construtores
class Professor extends Funcionario { boolean temAbono; public Professor(String nome, int idade, float salarioBase, boolean temAbono) { super(nome,idade,salarioBase); this.temAbono = temAbono; } public Professor(String nome, int idade, float salarioBase) { super(nome,idade,salarioBase); this.temAbono = false; } ... }
Polimorfimos
Poli = muitos, morfismo = forma
Polimorfismo
Capacidade de cada subclasse ter implementaes diferentes para o mesmo mtodo
Utilizao de sobreposio
A verso (implementao) do mtodo a ser chamada ser determinada apenas em tempo de execuo
late binding run-time binding dynamic binding
Prof. Rmulo Silva
Polimorfismo - exemplo
Pessoa
Polimorfismo - exemplo
class ImpostoRenda { ... public void calculaImpostoRenda(Funcionario f){ ... float sal = f.getSalario(); ... pode armazernar referncia } de Funcionario, Professor ou Diretor ... } verso a ser chamada ser determinada em tempo de execuo
Exerccios
1 - Crie uma classe Veiculo que tenha os atributos ano,
modelo, cor, placa e valor de mercado; e mtodos que retornam os valores dos atributos e um que imprime as informaes do veiculo na tela. Crie as subclasses Automovel e Motocicleta de Veiculo. Para automveis h um atributo que armazena a quantidade de portas.
Exerccios
3 - Escreva uma classe que represente um ponto de coordenadas x e y. 4 - Escreva uma classe que represente um pixel: um ponto que possui uma cor. 5 - Escreva uma classe que represente um crculo usando um ponto e um raio. Crie um mtodo que calcule a rea do crculo. 6 - Crie uma classe Conta com os atributos nmero e saldo; e os mtodos que permitam fazer o saque, depsito, e um para imprimir os dados da conta.
Prof. Rmulo Silva
Modularidade e Reutilizao
Uma classe tem granularidade muito fina para reutilizao em sistemas complexos, com milhares de linhas de cdigo Sistemas complexos precisam ser modularizados para facilitar a manuteno Soluo em Java: uso de pacotes.
Pacotes
Um pacote um agrupamento de classes que formam um mdulo de um sistema Sintaxe:
package nomedopacote;
Conveno de nomeao:
Em letras minsculas Agregar ao nome do pacote o domnio da empresa (Internet) de trs para frente Exs: package org.eclipse.core.runtime; package com.sun.java.swing;
Prof. Rmulo Silva
Pacote
Declarao de pacote deve vir antes da declarao da classe Ex.: package class ... }
com.b3informatica.biblioteca;
Livro {
Pacotes - observaes
Toda classe deve pertencer a um nico pacote Java cria o pacote default para classes que no declaram pacote Nome completo da classe: nomedopacote.NomedaClasse
package class ... } com.b3informatica.biblioteca; Livro {
com.b3informatica.biblioteca.Livro
Pacotes - observaes
Classes com mesmo nome em pacotes diferentes so consideradas classes distintas
package com.empresa.biblioteca;
package
com.b3informatica.biblioteca;
Reutilizao de pacotes
Para usar classes de um pacote deve-se import-la Sintaxe:
import nomedopacote.NomedaClasse;
Declarao de import deve antes da definio da classe cliente, aps a declarao do pacote.
package com.empresa.informatica; import java.io.FileInputStream; class Livro { ... } classe importada
Reutilizao de pacotes
Quando se deseja utilizar vrias classes do mesmo pacote, pode-se usar * (asterisco) no lugar do nome da classe para importar todas as classes do pacote:
package com.empresa.informatica; import java.io.*; class Livro { ... }
importa todas as classes do pacote java.io
Pacotes observaes
A escolha de quais classes devem pertencer a um determinado pacote em funo dos critrios de modularizao do sistema Em geral, agrupa-se classes que tratem do mesmo assunto (domnio de aplicao)
Ex.: package com.empresa.contabilidade;
Modificadores de Visibilidade
Definem o escopo de atributos, mtodos e classes
Onde eles so visveis (referenciveis)
Sintaxe:
modificador-visibilidade atributo; modificador tipo-retorno nomeMetodo (listaparmetros) { Corpo-metodo }
Modificadores de Visiblidade
Modificadores para atributos e mtodos:
private: visveis apenas dentro da classe proprietria protected: visveis dentro da classe proprietria e suas subclasses (classes derivadas) public: visveis a todas as classes
Atributos e mtodos que no declaram modificadores de visibilidade, tem escopo package, isto , so visveis a todas classes do mesmo pacote
Prof. Rmulo Silva
Modificadores de Visiblidade
Somente o modificador public vlido para classes Classes sem declarao de modificador tem escopo package, isto , so visveis a apenas classes do mesmo pacote
package com.empresa.biblioteca; import java.io.*; public class Livro { // classe pode ser referenciada em outros pacotes ... }
Membros estticos
Atributos e mtodos estticos so nicos por classe, compartilhado por todos os objetos da classe A alocao de memria para os atributos feita durante a carga da classe, antes mesmo de ser criada qualquer instncia Os membros estticos devem ser referenciados usando o nome da classe ao invs de variveis de tipo objeto.
Prof. Rmulo Silva
Membros estticos
public class ContaInstancia { private static int nroInstancias; public ContaInstancia() { nroInstancias++; } chamada de mtodo esttico
public static void imprimeNroInstancias() { System.out.println("Nro de Instncias:"+ nroInstancias); } public static void main(String[] args) { ContaInstancia c1 = new ContaInstancia(); ContaInstancia c2 = new ContaInstancia(); ContaInstancia c3 = new ContaInstancia(); ContaInstancia.imprimeNroInstancias(); } }
Variveis de classe
Podem ser inicializadas na prpria declarao ou dentro de um bloco static:
public class ContaInstancia { private static int nroInstancias = 0; ...
ou
public class ContaInstancia { private static int nroInstancias; static { nroInstancias = 0; } ...
Membros final
A palavra final indica que o membro no pode ser alterado, aps ser inicializado. Mtodo: no pode ser sobreposto nas subclasses Atributo: ao lado de static, ser tratado como uma constante Classe: no permite criao de classes derivadas.
Exerccios
1 - Em geral, as classes definem a visibilidade de suas variveis de instncia como private, e os mtodos que manipulam as variveis como public. Qual a vantagem de assim proceder? 2 - Crie um mtodo esttico para a classe Conta do captulo anterior que faa uma transferncia de valor entre duas contas. 3 - O construtor da classe padro java.lang.Math tem visibilidade private e todos os demais mtodos so estticos. Qual a razo disto? 4 - Em orientao a objetos, comum encontrar situaes onde preciso garantir a existncia de uma nica instncia de uma determinada classe. Como possvel garantir isso usando modificadores de acesso? Prof. Rmulo Silva
Problema
Como fornecer uma implementao para o mtodo da classe Figura abaixo???
Figura desenha()
Circulo desenha()
Quadrado desenha()
Triangulo desenha()
Sintaxe:
Visibilidade abstract tipo-retorno nomeMetodo(lista-parametros);
Classes que possuem um mtodo abstrato devem ser declaradas como abstratas
Prof. Rmulo Silva
Interfaces
Uma interface uma coleo de assinaturas de mtodos, que em conjunto definem um contrato entre uma classe utilitria e suas clientes.
Mtodos no tm implementao
Sintaxe:
interface NomeInterface { assinaturasMetodos }
Interfaces - exemplo
interface Conjunto { void addElemento(Object elem); void removeElemento(Object elem); Object getElemento(int pos); } Conveno de nomeao: a mesma para classes
Alguns programadores gostam de incluir um I maisculo no incio para facilitar a identificao em outros pontos do cdigo interface IConjunto { ...}
Prof. Rmulo Silva
Interfaces
Vrias classes podem fornecer implementaes diferentes para a mesma interface til para promover o desacoplamento entre especificao/implementao Permite a troca de uma implementao sem afetar as classes clientes.
Interfaces - exemplo
package com.empresa.Conjuntos; import java.util.Vector; public class MeuConjunto implements Conjunto { private Vector elementos; public MeuConjunto() { elementos = new Vector(); } public void addElemento(Object x) { implementao if(!elementos.contains(x)) de interface elementos.addElement(x); } public void removeElemento(Object x) { boolean achou = elementos.removeElement(x); } public Object getElemento(int pos) { return elementos.elementAt(pos); } }
Interfaces - observaes
Na terminologia OO, diz-se que uma classe implementa ou assume uma interface Uma classe, mesmo que no declare implementaes de interfaces, possui uma interface implcita:
Formada pelas assinaturas do mtodos pblicos
Conjunto addElemento(Object x): void removeElemento(Object x): void getElemento(int pos): Object
MeuConjunto
Interfaces
Mais de uma classe pode implementar a mesma interface
<<interface>>
Conjunto addElemento(Object x): void removeElemento(Object x): void getElemento(int pos): Object
MeuConjunto
ConjuntoTamFixo
Interfaces
O uso de interface aumenta a flexibilidade do cdigo:
amplia a capacidade de polimorfismo objetos que tm a mesma interface podem ser usados indistintamente em relao aos mtodos que compem a interface
Interfaces
<<interface>>
addElemento(Object x): void Polimorfismo: removeElemento(Object x): void getElemento(int pos): Object ... Conjunto conj; ConjuntoTamFixo MeuConjunto ... String str = "um elemento"; conj.addElemento(str); ...
Conjunto
Interfaces - herana
Uma interface pode estender outras interfaces, herdando as assinaturas dos mtodos Ao contrrio de classes, pode ocorrer herana mltipla
No h ambigidade, pois no h implementaes reais de mtodos, apenas assinaturas
Interfaces - observaes
Se uma classe que assume uma interface no prov implementao para algum mtodo da interface, ela deve ser obrigatoriamente declarada como abstract Uma mesma classe pode assumir mais de uma interface simultaneamente.
Interfaces - exemplo
interface A { void metodoA(int x); } interface B { int metodoB(); } interface C extends A, B { void metodoC(); } class Z implements A, B { ... public void metodoA(int x) { ... } public int metodoB() { ... } }
Interfaces - observaes
Princpio de OO para reutilizao/substituio de componentes:
Programar mais para interfaces que para implementaes concretas Acoplamentos fracos
No momento de projetar as classes, procurar pensar mais em termos de interfaces (contrato dos mtodos)
Exerccios
1 - Defina uma interface Node que represente um elemento de uma lista e que especifique uma assinatura de mtodo void imprime(). Defina uma classe Lista que implementa uma lista de nodes, com os mtodos:
boolean isVazia(): retorna true se a lista est vazia void addNode(Node x): adiciona um elemento na lista void imprime(): imprime todos os elementos da lista.
O construtor da lista deve receber o nmero mximo de elementos como parmetro. Crie duas classes, por exemplo: Pessoa e Livro, que implementem a interface Node e crie instncias para testar a classe Lista.
Exerccios
2 - Crie um esqueleto de programa para fazer o tratamento de transaes bancrias. Cada transao tem um cdigo e um nmero especfico de campos. As transaes so enviadas para o servidor como um string, porm cada transao sabe como gerar o string da forma como o servidor espera. Fornea uma soluo usando os recursos de classes abstratas e interfaces.
Tipos de Erros
Erros de lgica de programao:
Diviso por zero
Erros incontornveis:
Falta de memria, erro interno da JVM
Prof. Rmulo Silva
Tratamento de Excees
Em Java, uma exceo um tipo especial de objeto, lanado quando ocorre um erro. O objeto lanado pode ser capturado e tratado de maneira simples e elegante.
Tratamento de Excees
Sintaxe:
try { // bloco de comandos ... } catch(TipoExcecao1 e) { // bloco de tratamento da exceo 1 ... } catch(TipoExcecao2 e) { // bloco de tratamento da exceo 2 ... } ... catch(TipoExcecaoN e) { // bloco de tratamento da exceo N ... }
Excees pr-definidas
ArrayIndexOutOfBoundsException:
Lanada quando referenciada uma posio invlida de um array
NullPointerException:
Lanada quando se tenta invocar um mtodo usando uma referncia nula.
FileNotFoundException:
Lanada quando se tenta ler um arquivo inexistente
Tipos de Excees
Checked:
Tratamento obrigatrio (exigido pelo compilador) Ex.: FileNotFoundException
Unchecked:
Tratamento opcional Ex.: ArrayIndexOutOfBoundsException
Definio de Excees
So classes que estendem a classe prdefinida java.lang.Exception
public class ConfiguracaoException extends Exception { public ConfiguracaoException(String nome) { super("A Config. "+ nome + invlida"); } }
Lanamento de excees
Para lanar usa-se a palavra reservada throw (sem s):
... Configuracao c = arq.LeConfiguracao(); if(c.getNumConfiguracao() < 0) { throw new ConfiguracaoException(arq.getNome()); } ...
lana uma exceo
Lanamento de excees
O lanamento de exceo interrompe o fluxo normal do programa, subindo de escopo at encontrar um bloco catch apropriado. A ocorrncia de excees do tipo unchecked, quando no tratadas ocasionam a queda da aplicao.
Lanamento de excees
Mtodos que no tratam excees do tipo checked devem declarar na sua assinatura o lanamento das excees
clusula throws (com s) Responsabilidade de tratamento fica para a classe cliente
Clusula throws
public class Aplicacao { ... public void setConfiguracao(Arquivo arq) throws ConfiguracaoException { Configuracao c = arq.LeConfiguracao(); if(c.getNumConfiguracao() < 0) { throw new ConfiguracaoException(arq.getNome()); } ... delega tratamento } para a classe cliente
Clusula throws
Um mtodo pode lanar mais de uma exceo Sintaxe:
public tipo-retorno nomeMetodo(listaparametros) throws TipoExcecao1, TipoExcecao2, ..., TipoExcecaoN { // corpo do mtodo ... }
finally
Bloco opcional usado junto a um bloco trycatch
O contedo do bloco executado independentemente se ocorre exceo ou no Se ocorre exceo, executado aps o bloco catch da exceo lanada.
finally
try { ... } catch(TipoExcecao1 e) { ... } ... catch(TipoExcecaoN e) { ... } finally { //bloco sempre executado ... }
Exerccios
1 - Crie uma exceo ListaCheiaException e altere o mtodo void addNode(Node x) da classe Lista proposta no exerccio 1 do captulo 10 para lan-la quando houver a tentativa de inserir um n na lista que j tenha atingindo o tamanho mximo. Faa um teste onde ocorra o lanamento da exceo. 2 - Crie uma exceo ExecucaoTransacaoException e remodele a aplicao de transaes bancrias, proposta no exerccio 2 do captulo 10 , para que quando o servidor retorne erros da execuo da transao, seja lanada uma exceo apropriada.
Captulo 12 Collections
Estruturas de Dados
A maioria das aplicaes precisam de estruturas de dados que armazenem colees de objetos:
Listas, pilhas, filas, rvores binrias, tabelas hash, etc.
O pacote java.util define uma srie de classes e interfaces para implementao e tratamento de colees.
Collections Framework
Interface java.util.Collection
boolean add(Object) void clear() boolean contains(Object) boolean isEmpty() Iterator iterator() boolean remove(Object) int size()
java.util.Collection
<<interface>>
<<interface>>
java.util.List
java.util.Set
List:
Seqncia definida Elementos indexados
Set:
Seqncia arbitrria No h elementos repetidos
Prof. Rmulo Silva
classe ArrayList
Implementa a interface java.util.List usando um array interno. ArrayList lista = new ArrayList(); lista.add("elem1"); lista.add("elem2"); lista.add("elem3");
classe LinkedList
Implementa uma lista, com mtodos adicionais para insero/remoo de elementos no incio e no fim da lista
LinkedList lista = new LinkedList(); lista.addFirst("elem1"); lista.addLast("elem2"); lista.addFirst("elem3");
Exerccios
1 - Crie uma exceo ListaCheiaException e altere o mtodo void addNode(Node x) da classe Lista proposta no exerccio 1 do captulo 10 para lan-la quando houver a tentativa de inserir um n na lista que j tenha atingindo o tamanho mximo. Faa um teste onde ocorra o lanamento da exceo. 2 - Crie uma exceo ExecucaoTransacaoException e remodele a aplicao de transaes bancrias, proposta no exerccio 2 do captulo 10 , para que quando o servidor retorne erros da execuo da transao, seja lanada uma exceo apropriada.
java.lang.Object
Raiz da hierarquia de classes do sistema Principais mtodos:
boolean equals(Object): retorna true se duas referncias de objetos so iguais (apontam para o mesmo objeto) String toString(): transforma uma referncia de objeto para String. Class getClass(): retorna um objeto representado a classe do objeto (metaclasse)
java.lang.System
Atributos estticos que representam o sistema
System.in : entrada padro do sistema System.out : sada padro do sistema System.err : sada padro de erro
Principais mtodos:
String getProperty(String p): retorna valores de propriedades do sistema (verso da mquina virtual, separador de arquivo, sistema operacional) void exit(int codigoSaida)
Prof. Rmulo Silva
java.lang.Math
Prov constantes matemticas (PI e E), mtodos estticos para clculo de funes matemticas Principais mtodos:
double pow(double a, double b) double sqrt(double a) long round(double a) int round(float a) double random()
java.lang.String
Implementa um objeto que armazena uma cadeia de caracteres Principais mtodos:
char charAt(int pos) byte[] getBytes() int length() String substring(int indiceInicio, int indiceFim) String valueOf(int) : converte um inteiro para string
java.lang.String comparao
Cuidado!!: variveis inicializadas com literais de String iguais apontam para um mesmo objeto
String str1 = "azul"; Ir retornar true String str2 = "azul"; if(str1 == str2) { //compara referncias str1 e str2 System.out.println(objetos iguais"); } else { System.out.println(objetos diferentes"); }
java.lang.String comparao
Variveis inicializadas usando os construtores da classe String nunca apontam para um mesmo objeto
String str1 = new String("azul"); String str2 = new String("azul"); if(str1 == str2){ //compara referncias str1 e str2 System.out.println("objetos iguais"); } Ir retornar false else { System.out.println("objetos diferentes"); }
java.lang.String comparao
Para evitar confuso nas comparaes de strings, use sempre o mtodo equals. Mtodo equals da classe String:
Sobreposto de Object Retorna true se duas strings contm a mesma seqncia de caracteres
java.lang.String comparao
String str1 = new String("azul"); String str2 = new String("azul"); if(str1.equals(str2)){ //compara contedo de str1 e str2 System.out.println("strings iguais"); } Ir retornar true else { System.out.println("strings diferentes"); }
Pacote java.io
Define vrias interfaces e classes para tratamento de entrada e sada Classe java.io.File:
Usada para representar o sistema de arquivos Mtodos para testar existncia de arquivos, listar diretrios, verificar permisses, etc. A existncia de um objeto File no implica na existncia real do arquivo
java.io.File
Principais mtodos:
boolean exists() boolean isFile() boolean isDirectory() String[] list() String getAbsolutePath() boolean createNewFile() boolean mkdir()
java.io.File - exemplo
... File f = new File("c:\\temp"); if(f.isDirectory()) { String[] arqs = f.list(); ...
Streams de bytes
InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream
OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream
Streams de Caracteres
Reader BufferedReader InputStreamReader FileReader
Writer BufferedWriter OutputStreamWriter FileWriter
Streams de bytes
InputStream
Classe genrica (abstrata) Principais subclasses: FileInputStream e BufferedInputStream Mtodos principais: int read() : l um byte int read(byte[] buffer): coloca os bytes lidos no array do parmetro e retorna a quantidade de bytes lidos void close(): fecha o stream
java.io.FileInputStream
File f = new File("c:\\arquivo.txt"); try { FileInputStream in = new FileInputStream(f); //cria stream byte[] buf = new byte[1024]; int qtdBytesLidos = in.read(buf); //le stream while(qtdBytesLidos != -1) { String dados = new String(buf); System.out.println(dados); in.read(buf); } -1 indica fim de arquivo in.close(); //fecha stream } catch(FileNotFoundException e){ System.out.println("No encontrou arquivo"); } catch(IOException e){ System.out.println("Erro na leitura"); }
Stream de bytes
OutputStream
Classe genrica (abstrata) Principais subclasses: FileOutputStream e BufferedOutputStream Principais mtodos: void write(int b) void write(byte[] buffer) close() flush()
Streams de Caracteres
Reader
Classe genrica (abstrata) Principais subclasses: BufferedReader e InputStreamReader int read() : l um caracter int read(char[] buffer) : coloca caracteres lidos no array passado como parmetro e retorna a quantidade de caracteres lidos close() : fecha o stream
Streams de Caracteres
Writer
Classe genrica (abstrata) Principais subclasses: BufferedWriter e OutputStreamWriter Principais mtodos: void write(int c) void write(char[] buffer) close() flush()
Leitura do teclado
System.in : um objeto esttico do tipo InputStream que representa a entrada padro (teclado) Para ler no formato de strings ao invs de bytes: embrulhar o objeto System.in dentro BufferedReader com InputStreamReader
Mtodo String readLine(): retorna uma string com a linha lida
Para ler nmeros: usar classes Wrappers para converter a string lida para nmero
Prof. Rmulo Silva
Exerccios
1- Crie uma classe nomeada ListaInteiros, que implemente uma lista de inteiros, usando o tipo primitivo int. Teste a classe criada. 2 - Faa um programa que leia um arquivo texto e imprima o seu contedo na console.
Exerccios
3 - Implemente uma agenda em um arquivo texto, onde cada registro contenha as seguintes informaes separadas por 2 pontos: nome, data de nascimento, endereo, telefone, e-mail. Crie uma classe para representar os registros, com um atributo para cada campo correspondente; e faa a leitura do arquivo carregando os registros em uma lista e imprimindo-os em seguida. Sugesto: utilize a classe java.util.StringTokenizer.
Aparncia e comportamento dependente de plataforma Classes e interfaces dos pacotes java.awt e java.awt.event
Prof. Rmulo Silva
Swing
Lanado na verso 1.2 Conhecido como JFC (Java Foundation Classes) Fornece interface mais rica que AWT Menos dependente de plataforma Utiliza e expande os tipos de eventos e gerenciadores de leiaute definidos no AWT Hoje, usa-se sempre que possvel Swing e no mais objetos do AWT
Swing
java.awt.Container so objetos continers: usado para incluir outros objetos grficos javax.swing.JComponent a superclasse da maioria de componentes grficos do ja v a .la n g .O b je c t Swing.
ja v a .a w t.C o m p o n e n t
ja v a .a w t.C o n ta in e r
ja v a x .s w in g .J C o m p o n e n t
javax.swing.JComponent
Alugns mtodos:
void void void void void setPreferredSize(Dimension d) setEnabled(boolean b) setForeground(Color c) setBackground(Color c) setFont(Font c)
Swing - Componentes
Principais componentes:
JLabel JTextField JButton JRadioButton JCheckBox JComboBox JList JPanel
Swing - Componentes
Swing - continers
Todas as aplicaes grficas devem utilizar um dos seguintes continers para conter os demais objetos grficos:
javax.swing.JFrame: usado para conter objetos grficos do Swing. JApplet: usado para conter objetos grficos do Swing para rodar dentro de browsers
Swing - continers
Os objetos grficos no so adicionados diretamente em JFrame ou JApplet
necessrio adicionar os componentes no continer opaco (independente de plataforma) implementado no JFrame ou JApplet: Para obter o continer opaco: JFrame fr = new JFrame(); Container c = fr.getContentPane(); Ou JApplet applet = new JApplet(); Container c = applet.getContentPane();
Prof. Rmulo Silva
Swing - exemplo
import java.awt.*; import javax.swing.*;
public class MinhaAplicacao extends JFrame { public MinhaAplicacao() { super("Ttulo da Minha Aplicacao"); Container c = this.getContentPane(); //obtem o continer interno do JFrame c.setLayout(new FlowLayout()); //configura leiaute do JFrame JLabel rotuloNome = new JLabel("Nome"); //cria rtulo JTextField txtNome = new JTextField("valor inicial do campo"); c.add(rotuloNome); //adciona rtulo no continer interno do JFrame c.add(txtNome); JLabel rotuloEndereco = new JLabel("Endereco"); JTextField txtEndereco = new JTextField("valor inicial"); c.add(rotuloEndereco); c.add(txtEndereco); setSize(500,300); //configura tamanho inicial para o JFrame setVisible(true); // coloca o JFrame visvel } public static void main(String[] args) { MinhaAplicacao aplic = new MinhaAplicacao(); //cria um JFrame } }
Criao da aplicao
Swing - exemplo
FlowLayout
o leiaute mais simples Posiciona os componentes em seqncia, um ao lado do outro. O componentes so, por default, posicionados justificados no centro. Leiaute default para JPanel
FlowLayout
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteFlowLayout extends Jframe { public TesteFlowLayout(){ super("Teste de FlowLayout"); Container c = getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); c.add(new JButton("Confirma")); setSize(300,100); setVisible(true); } public static void main(String[] args) { TesteFlowLayout fr = new TesteFlowLayout(); } }
BorderLayout
Implementa um leiaute geogrfico, dividindo o continer em 5 regies: NORTH, SOUTH, WEST, EAST e CENTER Default para JFrame e JApplet Objetos so adicionados nas regies.
NORTH WEST EAST CENTER
SOUTH
BorderLayout - exemplo
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteBorderLayout extends JFrame { public TesteBorderLayout(){ super("Teste de BorderLayout"); Container c = getContentPane(); c.setLayout(new BorderLayout()); JTextArea area = new JTextArea(); area.setText("linha1/nlinha2/nlinha3"); c.add(new JLabel("Nome"), BorderLayout.WEST); c.add(new JTextField("Joao da Silva"), BorderLayout.EAST); c.add(new JButton("Confirma"), BorderLayout.SOUTH); c.add(new JTextArea("linha1\nlinha2\nlinha3"), BorderLayout.CENTER); setSize(400,120); setVisible(true); } public static void main(String[] args) { TesteBorderLayout fr = new TesteBorderLayout(); } }
BorderLayout - regras
NORTH e SOUTH tm prioridade no uso da largura e altura limitada pelo preferredSize do componente WEST e EAST tem altura limitada pela existncia ou no de componentes no NORTH e SOUTH e largura limitada pelo preferredSize do componente CENTER ignora preferredSize e ocupa todo o espao que puder, mas limitado pela existncia de objetos em NORTH, SOUTH, WEST e EAST Aceita somente um objeto por regio
Prof. Rmulo Silva
GridLayout
Posiciona os componentes em uma forma de tabela com linhas e colunas. Cada clula aceita somente um objeto Clulas no preenchidas ficaro em branco Componente adicionado a uma clula ocupa toda a clula Ignora o preferredSize dos objetos
GridLayout - exemplo
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TesteGridLayout extends JFrame { public TesteGridLayout(){ super("Teste de GridLayout"); Container c = getContentPane(); c.setLayout(new GridLayout(3,2)); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); c.add(new JCheckBox("Funcionario", true)); c.add(new JCheckBox("Estrangeiro")); c.add(new JButton("Confirma")); c.add(new JButton("Cancela")); setSize(300,130); setVisible(true); } public static void main(String[] args) { TesteGridLayout fr = new TesteGridLayout(); } }
Swing - Eventos
Definidos nos pacotes java.awt.event e javax.swing.event
java.lang.Object
java.util.EventObject
java.awt.AWTEvent
ActionEvent
ItemEvent
ComponentEvent
AdjustmentEvent
ContainerEvent
FocusEvent
InputEvent
PainEvent
WindowEvent
KeyEvent
MouseEvent
Swing - Eventos
Gerados automaticamente pela JVM (mquina virtual) durante a interao do usurio com os objetos grficos da aplicao Tratamento de eventos feito atravs da criao de classes:
Devem implementar interfaces pr-definidas (listeners) para o tipo de evento especfico Utilizao do padro de projetos Observer
Swing - Listeners
So interfaces que devem ser implementadas por classes que tratam os eventos
< < in te r fa c e > >
ja v a . u t il. E v e n t L is t e n e r
A c t i o n L is t e n e r
< < in te rfa c e > >
A d ju s t m e n t L is t e n e r
< < in te rfa c e > >
C o m p o n e n t L is t e n e r
< < in te rfa c e > >
C o n t a in e r L is t e n e r
< < in te rfa c e > >
F o c u s L is t e n e r
< < in t e r f a c e > >
I t e m L is t e n e r
< < in te rfa c e > >
K e y L is t e n e r
< < in te rfa c e > >
M o u s e L is t e n e r
< < in te rfa c e > >
W in d o w L is t e n e r
public TratadorEventoBotao(JTextField txtCampo){ this.txtCampo = txtCampo; } public void actionPerformed(ActionEvent e){ String dadosCampo = txtCampo.getText(); txtCampo.setText(dadosCampo.toUpperCase()); //coloca em maiusculo } }
mtodo de ActionListener
mtodos de KeyListener
Retorna o objeto que gerou o evento Faz o tratamento especfico para cada objeto
Applets
Uma aplicao que roda dentro de um browser Cria-se uma classe que derive JApplet para conter os objetos grficos Adio de objetos grficos semelhante utilizada com Jframes Deve-se sobrepor os mtodos:
void void void void init(): inicializao de componentes do applet start(): o que fazer quando o applet iniciar stop(): o que fazer antes de parar destroy(): o que fazer quando o applet terminar
Applet - exemplo
import javax.swing.*; import java.awt.*; public class TesteApplet extends JApplet { public TesteApplet(){ } Chamado automaticamente pelo browser
public void init() { Container c = this.getContentPane(); c.setLayout(new FlowLayout()); c.add(new JLabel("Nome")); c.add(new JTextField("Joao da Silva")); setSize(300,130); } }
Applets - observaes
Um Applet possui vrias restries por razes de segurana:
No pode ler/escrever arquivos na mquina cliente No pode iniciar a execuo de um programa na mquina cliente No tem acesso a maior parte das propriedades do sistema.
Exerccios
1- Faa um programa utilizando os componentes Swing e gerenciadores de leiaute adequados para obter-se uma tela como abaixo:
Exerccios
2- Implemente o tratamento de eventos para os botes da seguinte forma:
Ao pressionar Copiar, o contedo do JTextField adicionado ao JTextPane Ao pressionar Limpar, o contedo do JTextField limpado Ao pressionar sair, a aplicao termina a execuo
Exerccios
3-Altere o programa do exerccio anterior para que seja exibida uma tela como abaixo:
Na rea indicada da figura devem ser exibidos os formulrios 1 e 2 conforme se pressiona os botes esquerda. O formulrio 1 deve ser exatamente a tela mostrada no exerccio 1. O formulrio 2 deve ser conforme a apresentao abaixo. (Sugesto: pesquise sobre o gerenciador de leiaute CardLayout).
Formulrio 1 rea de exibio de Formulrios Formulrio 2