Escolar Documentos
Profissional Documentos
Cultura Documentos
Java, OO
: Leila
Carvalho
Leituras recomendadas:
Refactoring
www.mundojava.com.br www.javamagazine.com.br
Consulte as edies: Leia as edies:
??
Design Patterns.
35 36
44 46
Sites e livro: -wiki.java.net/bin/view/People/SmellsToRefactorings -www.refactoring.com/sources.html -www.martinfowler.com/ -KERIEVSKY, Joshua. Refactoring to Patterns. (.pdf) 2
Leituras recomendadas:
Refactoring
Leituras recomendadas:
Patterns
www.mundojava.com.br www.javamagazine.com.br
Consulte as edies: Leia as edies:
20 21 28 42 45
DAO, DTO, VO etc. Patterns aplicados. De volta aos patterns. Design patterns aplicados. 4 vdeo-aulas: patterns na prtica.
15 17 20 ??
Boas prticas e padres JEE Sistemas OO com padres de negcio. Camada de negcios: DAO genrico. Edies: 21, 22, 23...
Livros: - ALUR, Deepak et al. Core J2EE Patterns: Best Practices and Design Strategies - FREEMAN, Eric et al. Head First Design Patterns. (Use a cabea!) - FOWLER, Martin. Patterns of Enterprise Application Architecture. - GAMMA, E. et al. Padres de Projeto. Bookman, 2005. - BUSCHMANN, Frank et al. Patterns-Oriented Software Architecture (POSA), Volume 1: A System of Patterns. -EVANS, Eric. Domain-Driven Design: Tackling Complexity in the Heart of Software. -Dudney, Bill. J2EE Antipatterns.
4
Referncias
Rumbaugh, James; Blaha, Michael; Premerlani, William; Eddy, Frederick; Lorensen William. Modelagem e Projetos Baseados em Objetos. Editora Campus, 1994 - ISBN 85-7001-841-X.
Larman, Craig. UTILIZANDO UML E PADRES - Uma introduo analise e ao projeto orientado a objetos. Editora Bookman, 2000 ISBN 85-7307-651-8. Gamma et al. Padres de Projeto - Solues Reutilizveis de Software Orientado a Objetos. Editora Bookman, 2000 - ISBN 85-7307-610-0.
Consideraes gerais
Conhecimentos prvios necessrios:
- Interfaces e classes abstratas. - Classes internas. - Princpios bsicos de OO: - Abstrao. - Encapsulamento x interface do objeto. - Herana. - Polimorfismo. *Quais relacionamentos definem (UML)? *Problema: so insuficientes para um bom programador!!
Cenrio atual: Refactoring, Processo gil e customizado, Modelagem gil com UML,
Dificuldades no mundo OO
No programamos e nem modelamos bem OO: vcios, desconhecimento,
desatualizao, dificuldade em acompanhar as mudanas. Programamos estruturado em Java: - no abstramos os objetos devidos. - no distribumos bem as responsabilidades entre os objetos. * o Diagrama de Seqncia pode mostrar isso. - no desacoplamos corretamente das tecnologias empregadas. - lidamos diretamente com as implementaes concretas dos objetos. - no trabalhamos orientados por componentes ou arquitetura. Modelamos estruturado com UML: - nossos UCs tratam de incluir, alterar, excluir e consultar . - no modelamos os processos: modelagem essencial ou de negcio. Produzimos documentao em excesso: - desconhecemos as boas prticas. - todo problema nos parece uma novidade!! - nenhum diagrama proibido.
8
MVCs.
Persistncia, Stored procedures pblicas e Stored procedures privadas. -Eric Evans (Domain Driven Model):User interface, Application, Domain e Infrastructure.
....
Cada classe deve ter uma nica razo para mudar (coeso).
- ex: CompositeView, Iterator... ou qualquer classe.
10
11
Bad smell (mau cheiro) ou anti-patterns: =cdigo complicado ou confuso devido a um design ruim, ou mesmo pela falta de design. =mau uso dos paradigmas de OO. -pode causar dificuldade de entendimento ou de manuteno.
12
13
14
15
16
17
public class BadSmell05 { /** Ha 2 bad smells nesta classe.*/ int testar(int valor) { return (maiorQueCinco(valor)) ? 2 : 1; } boolean maiorQueCinco(int valor) { return (valor > 5); } }
18
19
class Endereco{ String cidade; String estado; public String getCidade() { return cidade; } public void setCidade(String cidade) { this.cidade = cidade; } }
Na classe Aluno, aplique Generate Delegate Methods para o objeto Endereo.
20
(??)
21
Outro exemplo:
Template Method
ASuperClasse
MinhaSubclasse1
MinhaSubclasse2
mostraMensagem1( ) mostraMensagem2( )
22
Incluir aluno
Incluir curso
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
24
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito
Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
25
FIM
26
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos
Java x UML
Instrutora : Leila Carvalho
Perodo
Disciplina Aula
: maro / 2008
: Java Bsico : 05
27
Java X UML
Exemplo de Abstrao
28
Incluir curso
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
29
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
30
Exerccios
31
Associao - especifica que objetos de um elemento (classe) esto conectados a objetos de outros elementos. Generalizao (herana) - relacionamento entre descries mais gerais e descries mais especficas, com mais detalhes sobre alguns dos elementos gerais. Agregao - relacionamento fraco do tipo parte de. um tipo especial de associao. Composio - relacionamento forte do tipo parte de. A composio entre um elemento (o todo) e outros elementos (as partes) indica que as partes s existem em funo do todo. Realizao - relacionamento entre uma interface e o elemento que a implementa. Dependncia - relacionamento de uso, no qual uma mudana na especificao de um elemento pode alterar a especificao do elemento dependente.
32
Associao
Sem/com navegao
Dependncia
Agregao Generalizao
Composio
Realizao
33
Classe
exatamente 1
Classe
0..1
Classe
m..n
Classe
seqncia especificada
34
* +empregador
1..* Empregado
+subordinado
0..*
1.1
+chefe
1.2
1.3
35
Quadrado
2.1
36
2.2
37
Computador
4.1
Monitor
Teclado
Mouse
CaixaSistema
4.2
4.3
38
5.1
5.2
5.3
39
6.1
v erificarFicha() calcularSalrio()
6.2
6.3
40
41
Pedido
0..*
faz
itens
Item de Pedido -quantidade: Integer -preco: Currency -emEstoque: Boolean Cliente pessoa-jurdica nomeContato: String telefones[1..10]: String CGC: String FAX[1..3]: String Cliente pessoa-fsica nome: String CPF: String numCartaoCredito colocarListaNegra()
*
Produto
representante de vendas
Empregado
IPessoa
43
e-business: exerccio 10
44
45
46
FIM
47
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos
Java x UML
Instrutora : Leila Carvalho
Perodo
Disciplina Aulas
: maro / 2008
: Java Bsico : 05 e 06
48
Java X UML
Exemplo de Abstrao
49
Incluir curso
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
50
Aluno
ID Nome Endereo Telefones Documentos Descontos Pr-requisito Incluir ( ) Alterar( ) Mostrar nome( ) ID Data Taxa
Matrcula
Curso
ID Nome Mensalidade Disciplinas Perodo Incluir ( ) Alterar( ) Incluir disciplina( ) Verificar pr-requisito( ) Calcular mensalidade() Emitir histrico( )
51
52
Associao - especifica que objetos de um elemento (classe) esto conectados a objetos de outros elementos. Generalizao (herana) - relacionamento entre descries mais gerais e descries mais especficas, com mais detalhes sobre alguns dos elementos gerais. Agregao - relacionamento fraco do tipo parte de. um tipo especial de associao. Composio - relacionamento forte do tipo parte de. A composio entre um elemento (o todo) e outros elementos (as partes) indica que as partes s existem em funo do todo. Realizao - relacionamento entre uma interface e o elemento que a implementa. Dependncia - relacionamento de uso, no qual uma mudana na especificao de um elemento pode alterar a especificao do elemento dependente.
53
Associao
Sem/com navegao
Dependncia
Agregao Generalizao
Composio
Realizao
54
Classe
exatamente 1
Classe
0..1
Classe
m..n
Classe
seqncia especificada
55
* +empregador
1..* Empregado
+subordinado
0..*
1.1
+chefe
1.2
1.3
56
Quadrado
2.1
57
2.2
58
Computador
4.1
Monitor
Teclado
Mouse
CaixaSistema
4.2
4.3
59
5.1
5.2
5.3
60
6.1
6.2
6.3
61
62
Pedido
0..*
faz
itens
Item de Pedido -quantidade: Integer -preco: Currency -emEstoque: Boolean Cliente pessoa-jurdica nomeContato: String telefones[1..10]: String CGC: String FAX[1..3]: String Cliente pessoa-fsica nome: String CPF: String numCartaoCredito colocarListaNegra()
*
Produto
representante de vendas
Empregado
IPessoa
64
e-business: exerccio 10
65
66
67
FIM
68
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos
Instrutora
Perodo
Disciplina Aulas
: maro / 2008
: Java Bsico : 08 e 09
69
Agenda
2- Vector
3- Stringx StringBuilder x StringBuffer 4- split x StringTokenizer (em desuso) 5- Expresses regulares
70
Vector
71
a classe Vector
Array:
- Comprimento fixo.
- Elementos de um mesmo tipo. - Alterao cria novo objeto.
not-insertion-order
Insertionorder
Vector
73
Vector : exemplo 1
package javabasico;
import java.util.Vector;
public class TesteDeAula { public static void main(String args[]){
//erro!!!
Vector : exemplo 2
75
tipos string
77
a classe String
- uma seqncia imutvel de caracteres. - Emprega os patterns Immutable e Flyweigth. String str = "abc"; //boxing
79
strings : EXERCCIOS 1 e 2 *Resolva apenas dois dos 4 exerccios a seguir: 1 - Construa uma classe em Java (Inverso.java) que receba um parmetro StringBuffer e retorne um objeto desse mesmo tipo, com os valores de entrada na forma invertida. Use o mtodo split().
Exemplo: Java hoje aula dia --> dia aula hoje Java
que
receba
uma
StringBuilder
no
campo1;campo2;
strings : EXERCCIOS 3 e 4
3 - Implemente um detector de seqncias palndromas. Use o mtodo reverse( ). Exemplo: ovo, radar, omo ... 4 - Crie a classe NomeABNT.java, a qual oferea os seguintes servios:
- retornar a seqncia no formato ABNT: ltimo sobrenome em maisculo + , + demais partes do nome + ;.
Exemplo: GROPP, William; LUSK, Ewing; DOSS, Nathan; SKJELLUM, Anthony.
81
expresses regulares
(regex)
82
* Nasceu em 1968 para uso no UNIX, editor ed. Depois veio o comando grep (global regular expression print).
* Denominaes possveis: expreg, regexp, regex e RE.
* Metacaracteres empregados: . ? * + ^ $ | [ ] { } ( ) \
-Se precisar usar esses caracteres em modo normal, coloque antes \\. - \\ evita conflitos de interpretao no Java. * Valida: data, horrio, nmero IP, telefone, CPF, carto de crdito etc.
83
Expresses Regulares - Guia de Consulta Rpida: http://guia-er.sourceforge.net/index.html Sun Javadoc: http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html Java Tutorials: http://java.sun.com/docs/books/tutorial/essential/regex/ 84
} }
85
", "34857bipip3245bi.347bip1212bipbip")); boolean found = false; while (matcher.find()) { String s = "Encontrei o texto " + matcher.group()+ " iniciando em " + matcher.start() + " e terminando em " + matcher.end(); JOptionPane.showMessageDialog(null,s); found = true; } if(!found){ System.out.printf("Padrao nao encontrado."); } } } } 86
87
3 O pattern ^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$ retorna verdadeiro ao criticar nmeros telefnicos no formato: (123)4567890, 123-456-7890, 1234567890, (123)-456-7890. Refatore a
finais.
4 Implemente um validador de CPF, considerando que a string de entrada deve ser no formato nnn.nnn.nnn-nn: 3 grupos de dgitos
89
??????
91
FIM
92
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos
Classes abstratas e
Interfaces
Instrutora : Leila Carvalho
Perodo
Disciplina Aula
: abril / 2008
: Java Bsico : 12
93
Teoria geral
94
UML: diagramas
95
Associao
Sem/com navegao
Dependncia
Agregao Generalizao
Composio
Realizao
96
Classes abstratas
97
98
http://simundi.blogspot.com/2008/02/design-pattern-template-method.html
100
exerccios
101
1/3
http://www.javabeat.net/tips/design/2007/08/using-the-template-method-pattern/
102
2/3
http://www.javabeat.net/tips/design/2007/08/using-the-template-method-pattern/
103
3/3
104
105
106
Interfaces
107
108
109
Interfaces :conceitos
Interface ...
a forma com que um objeto se apresenta para outros, no que diz respeito a seus atributos e mtodos. o conjunto de funcionalidades de uma classe.
Interfaces : exemplo 6
111
Interfaces : exemplo 6
112
Interfaces : exemplo 6
Interfaces : exemplo 6
114
Interfaces : exemplo 7
interface TesteInterface{ public String s = "10"; public final String s2 = "10"; public static String s3 = "10"; public static final String s4 = "10"; }
interface TesteInterface2 { public String s = "100"; public final String s2 = "100"; public static final String s3 = "100"; }
interface TesteInterface3 { public String s = "1000"; public final String s2 = "1000"; public static final String s3 = "1000"; } interface TesteInterface4 extends TesteInterface, TesteInterface2, TesteInterface3 { public String s = "10000"; public final String s2 = "10000"; public static final String s3 = "10000"; //private void teste (); } public class TesteInterfaceClasseAbstrata implements TesteInterface4{ public static void main (String args[]){ System.out.println(s); }
115
Interfaces : ????
116
Interfaces : ????
117
-java.util.RandomAccess.
-java.lang.reflect.Type (superinterface de alguns tipos em Java). -java.lang.Override (annotation) -java.lang.Deprecated (annotation) ..e vrias outras. -java.security.KeyStore.LoadStoreParameter
-java.security.KeyStore.Entry.
118
119
exerccios
120
1/2
if (tipo.equalsIgnoreCase("calculadoraJurosSimples")){ double totalJuros = montanteInicial * periodoMeses * jurosAoMes; montanteComJuros = montanteInicial + totalJuros; }else if (tipo.equalsIgnoreCase("calculadoraJurosCompostos")){ // calcula 1+i jurosAoMes = jurosAoMes + 1; // calcula 1+i elevado a N double periodoCalculado = Math.pow(jurosAoMes, periodoMeses); montanteComJuros = montanteInicial * periodoCalculado; } //continua...
121
2/2
System.out.println(" ************ Calculo de Juros ************"); System.out.println(" Montante Inicial....: " + montanteInicial); System.out.println(" Periodo em Meses....: " + periodoMeses); System.out.println(" Juros ao Mes........: " + jurosAoMes); System.out.println(" Objeto calculadora..: " + tipo); System.out.println(); System.out.println(" Total...............: " + montanteComJuros); System.out.println(" ******************************************"); } public static void main (String[] args) { ServicoUtil servico = new ServicoUtil( ); //parametros explicitos no codigo = "hard-coded" servico.calcularExibir(10000, 6, 0.03, "calculadoraJurosSimples");
}
} //fim.
122
Strategy: Calculadora
Servico
http://s2i.das.ufsc.br/tikiwiki/apresentacoes/padroes_de_projeto.pdf 123
Refactoring: Servico
public class Servico { private CalculadoraFinanceira calculadora; //a interface do Strategy.
public Servico (CalculadoraFinanceira calculadora) { this.calculadora = calculadora; } public void calcularExibir(double montanteInicial, int periodoMeses, double jurosAoMes) { double montanteComJuros = calculadora.calcularMontanteComJuros( montanteInicial, periodoMeses, jurosAoMes); System.out.println(" ************ Calculo de Juros ************"); System.out.println(" Montante Inicial....: " + montanteInicial); System.out.println(" Periodo em Meses....: " + periodoMeses); System.out.println(" Juros ao Mes........: " + jurosAoMes); System.out.println(" Objeto calculadora..: " + calculadora); System.out.println(); System.out.println(" Total...............: " + montanteComJuros); System.out.println(" ******************************************"); } public static void main(String[] args) { Servico servico = new Servio (new CalculadoraJurosSimples( )); servico.calcularExibir(10000, 6, 0.03); } }
124
FIM
125
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Objetos
Contedo
Links interessantes
http://www.unix.org.ua/orelly/java-ent/jnut/ch03_13.htm
http://www.unix.org.ua/orelly/java-ent/jnut/ch03_12.htm#javanut3-ch-3-exanoncl http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
128
N classes no mesmo
arquivo
129
public class ClassesNoMesmoArquivo { public static void main(String args[]){ HelloWorld helloWorld = new HelloWorld(); helloWorld.dizerAlgo(); } } class HelloWorld extends HelloWorldSuper{ public void dizerAlgo(){ System.out.println("Hello, world!!"); } } abstract class HelloWorldSuper implements HelloWorldInterface{ public abstract void dizerAlgo(); } interface HelloWorldInterface{ public void dizerAlgo(); }
130
1.Melhorar a clareza do cdigo-fonte. 2.Facilitar a manuteno ou o refactoring da classe. 3.Reduzir os conflitos de nomes de classes. 4.Enfatizar o relacionamento entre as classes. 5.Agrupar logicamente classes relacionadas.
131
Classes aninhadas
132
Uma classe definida dentro do escopo de outra classe. Por qu? E mais: aumentar o encapsulamento: membros private.
http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
133
Podem ocorrer sub-aninhamentos, ou seja, classe aninhada dentro de outra classe aninhada.
A classe aninhada recebe um nome conjunto: ClasseNoTopo$ClasseAninhada.class. Com isso, economizam-se nomes no pacote. O caminho de acesso classe aninhada deve ser do tipo: ClasseNoTopo.ClasseAninhada.
134
135
Classes aninhadas : exemplo 2 public class Externa { private String ve = "Varivel da classe externa"; class Interna { private String vi = "Varivel da classe interna";
public static void main(String args[]) { Externa.Interna ci = new Externa().new Interna(); ci.metodoDaClasseInterna(); } }
137
138
public class LocalInnerClass { private int count = 0; Counter getCounter( final String name ) { //sem modificador de visibilidade !!! class LocalCounter implements Counter { public int next() { System.out.print( name ); return count++; } } return new LocalCounter(); ///////// } public static void main( String[] args ) { LocalInnerClass lic = new LocalInnerClass(); Counter c1 = lic.getCounter( "Local inner " ); for( int i = 0; i < 5; i++ ) { System.out.println( c1.next() ); } } }
139
140
No aceita modificador de visibilidade. No possui construtor. Usar somente quando: a classe bem pequena. somente uma instncia necessria. a classe usada logo aps a definio. o nome da classe no interessa ao cdigo. Nomeao : ClasseNoTopo$n.class, sendo que n se inicia em 1 e vai sendo incrementado a cada nova ocorrncia de outra classe do mesmo tipo dentro da classe que as recebe. Cuidado: torna o cdigo difcil de ser lido !! Muito usada em tratamento de eventos: listener ou adapter. um atalho para implementar interface ou classe. O mtodo dessa classe pode receber parmetro? Testar!!
141
Classe annima : exemplo 1 public class AnonymousClassBasica { public static void main (String args[]){
//pode criar objeto, mas no h reuso da classe.
};
t.mostrar(); } } interface Teste{ public void mostrar(); }
142
Exerccios
144
private void addAgua( ){ System.out.println("Adicionando gua..."); } private void addAcucar( ) { System.out.println("Adicionando Acar..."); }
3 O mtodo de uma classe annima pode receber parmetros? Tente uma refatorao do mtodo addExtrato( ), da classe Bebida: parametrize-o com a String extrato. 4 Refatore a AnonymousClassBasica: implemente a interface Teste e anule o uso de classe annima.
146
cone: nulo.
Array de opes: array de Object com as opes Sim e No. Opo default: Sim (posio zero).
*Consulte o mtodo setDefaultCloseOperation(int i) de JFrame para saber como proceder se o usurio retroceder na sua deciso de fechar a janela da aplicao.
147
FIM
148
Universidade Catlica de Braslia Pr-Reitoria de Ps-Graduao e Pesquisa Lato Sensu em Sistemas Orientados a Ob etos
Interfaces grficas
(AWT e Swing)
Instrutora Perodo Disciplina Aulas :
Leila Carvalho
Contedo
As interfaces grficas Os elementos grficos A hierarquia Icon JFrame Boas prticas CadastroEvento Eventos de janela JButton JComboBo !oo" And Feel #erenciadores de la$out
2
Links interessantes
O %rojeto Eclipse&'()
'*ing+
veja, http://www.javamagazine.com.br/edicoes/jm23/index.jsp
As interfaces grficas
As interfaces grficas: AWT e Swing Java fornece um suporte muito interessante para construo de ap ica!es "rficas por meio de duas interfaces: AWT #$%stract &indo'in" (oo )it* + ,nicia mente o -nico tipo de ferramentas. at/ a verso 1+1+ (odas as c asses esto no pacote 0ava+a't+ 1 %astante incomp eta: fa tam (a% e. (a%%ed2ane. 3 ider etc+ 4ependente de p ataforma #peer-model* e comportamento 5etero"6neo+ 7 Swing ou JFC #Java 8oundation 9 ass* 7 sur"iu na verso J4:1+2+ 3u%stituiu $&(. mas ainda comparti 5am partes fundamentais #como eventos*+ $tua mente as c asses esto no pacote 0ava;+s'in"+ 3o <lightweight components=.
5
independentes de p ataforma+
? compati%i idade entre os componentes $&( e 3'in". para @ue no 5a0a conf ito de vers!es+ ? componentes 3'in" @ue 5erdam de componentes $&(+ A;emp o: o componente J8rame. @ue fornece a 0ane a principa da ap icao. / derivado da c asse 8rame+ Bs nomes dos componentes J89 sempre comeam com <J=+ Co mais uti iDar os componentes $&(: usar os componentes correspondentes criados no 3'in"+ 3o dois "randes e;emp os de reuso: no / necessrio reescrever cEdi"o. mas apenas uti iDar as funciona idades imp ementadas nesses pacotes+
>
Os
5ttp://0ava+sun+com/products/0fc/0's/3'in"3et2+0n p
1/3
10
2/3
11
3/3
12
A hierar!uia
13
JWindow
Window
Dialog
JDialog
JFra
Abstract!utton
J!utton
'Co!%onent JPanel
J"ootPane
14
Co!%onent
$ c asse 9omponent define um o%0eto @ue ten5a representao "rfica. como %ot!es. campos de te;tos. c5oices etc+ (odos os m/todos definidos nesta c asse estaro disponHveis para todos os componentes visuais das su%c asses+ ,niciou a id/ia de componentiDao: arrastar e ementos "rficos e criar ap ica!es visuais+ $s ferramentas I$4 #Iapid $pp ication 4eve opment* uti iDam esse princHpio+
15
set%ounds#int ;. int K. int ar". int a t* - $etermina a posi%"o e o tamanho. set&oreground#9o or c* set%ac'ground#9o or c* set&ont#8ont f*
- Altera a cor de frente. - Altera a cor de fundo. - Altera a fonte. Veja prximo slide.
1>
Color e )ont
Color: atri%ui cor #frente ou fundo* ao componente.
atrav/s da composio primria de verme 5o. verde e aDu #padro ILB*+ Mse: 1 J o construtor Color!int red" int #reen" int blue$% 2 J ou as Constantes #tambm em minsculas*: ! A#% ! &' #(A) DA"%*+"A( +"A( +"'') I+,-*+"A( .A+')-A /"A)+' PI)% "'D W,I-' A;emp o: Color c & ne' Color !())" )*" +$% //red
('
/W
)ont: determina a fonte # etra* em @ue os rEtu os sero escritos+ Mse o construtor
&ont#Strin# nome" int,estilo" int,taman-o*+ Estilo: PL./0" BOL1" /2.L/C
(use o " para juntar estilos)
Container
1 uma cate"oria especia de componente "rfico @ue pode conter outros componentes ou mesmo outros containers+ a mesma noo do mundo real. Mti iDa uma ista encadeada para referenciar os seus e ementos inte"rantes+ Mm app et. uma 0ane a e um paine so e;emp os de container+ 9ada container possui associado um "erenciador de aKout para contro ar a maneira pe a @ua seus componentes sero mostrados #taman5o e posio*+
18
#ontainer
add#9omponent c* add#9omponent c. int i* set"ayout#NaKoutOana"er *
validate# *
20
J#omponent
2 J 4iversos tipos de !orda* @ue tam%/m definem os imites do componente+
21
J#omponent
3 J $ 5a%i idade para definir o taman+o m;imo. mHnimo e preferido de um componente. mesmo se a te a for redimensionada+ , - -ool-ip: fai;a de te;to @ue aparece @uando o cursor passa so%re o componente+
22
$eve ser usado com gerenciador de la)out. - atribui o tamanho m!nimo permitido.
Icon
24
*con
$ interface ,con / imp ementada pe a c asse 2mage2con. @ue permite associar ima"ens a o%0etos J9omponent+ Construtores: ImageIcon!Strin# 4ile0ame$ ImageIcon!URL url$ ImageIcon!/ma#e im#$ ,&e!%lo: ,con d R ne' ,ma"e,con # S///$:/du)e2+"if= *T ,con m R ne' ,ma"e,con # =midd e+"if= *T Java pode manusear: L,8. J2AL e J2L+
25
JFra
2>
')ra!e
1 o tipo mais especia iDado de 0ane a Java+ 2ossui uma barra de t$tulo e uma borda+ J8rame / derivado do contro e da $&(+ 2ermite intera!es atrav/s de tec ado e mouse+ ,nc uir no cEdi"o: import 3ava(4s5ing467 1 um container: pode conter outros componentes+ 2ara a terar o Hcone da 0ane a. consu te
#pecifying 8indo5 9ecorations:
http,--java.sun.com-docs-boo"s-tutorial-uis*ing-components-frame.html/set0efault!oo"AndFeel0ecorated
2ossui 5 su%containers+ 2or isso. / i"eiramente incompatHve com 0ava+a't+8rame. @ue no possui su%containers+ um "erenciador de aKout / automaticamente associado a cada um de seus su%containers+ % seguir&
2F
/s containers de JFrame
J
Content%ane
28
/s containers de JFrame
1 - .:oot0ane: container principa de J8rame. "erencia os demais
su%containers+ 9o%re a superfHcie inteira da 0ane a. e;ceto a %arra de tHtu o e o taman5o da %arra+ 9onsu te:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html
2G
/s containers de JFrame
3 - 1enu%ar: encapsu a os conceitos da p ataforma para os imites da %arra
de menu+ 2ara associar uma %arra de menu U 0ane a. c5amar setOenuBar+ B "erenciador de aKout defau t / o Bo;NaKout+ 9onsu te:
http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
30
/s containers de JFrame
5 - Content0ane: / rea de tra%a 5o onde adicionamos diretamente nossos
componentes+ B "erenciador de aKout defau t / o %order"ayout+ 2ara o%ter este componente. e;ecute o%0Jane a+"et9ontent2ane# *+ 9onsu te:
http,--java.sun.com-docs-boo"s-tutorial-uis*ing-components-toplevel.html
31
JFrame
dispose# *
set9efaultClose/peration#intVoperao*
(ipos de operao:
2 JFrame.0O89O):I9#8O98C!O'E #definido em &indo'9onstants*: nada acontece.
pois re@uer @ue o pro"rama manipu e a operao no m/todo 'indo'9 osin" do evento &indo'Nistener re"istrado pe o o%0eto @ue "erou a ao+
JFrame
pac'# *
3preferidos4&
- Atribui um t!tulo para a janela. - Atribui uma barra de menu 5 janela. - 6ermite& ou n"o& 0ue o usu.rio modifi0ue
o tamanho do 7rame& pelo uso do mouse.
JFrame
import javax.swing.*; import java.awt.*;
0 e2emplo 1
9ublic class Exemplo1 extends JFrame : 9ublic static void main!Strin#;< ar#s$ : =>em9lo* b4 & ne' =>em9lo* !?2ela Sim9les?$% } 9ublic Exemplo1(String title) su9er!title$% setSi@e!()+" (++$% setAisible!true$% } }
34
JFrame
$ resultado
35
JFrame 0 e2emplo 2
import java.awt.*; import javax.swing.*; 9ublic class Exemplo! : 9rivate B3rame janela% 9ublic Exemplo!() : anela & ne' B3rame!?2ela =>em9lo(?$% anela7setSi@e!(++"(++$% "ontainer c # janela.get"ontent$ane(); c.setLaCout!null$% anela7setAisible!true$% D 9ublic static void main!Strin# ar#s;<$: =>em9lo( tela & ne' =>em9lo(! $% D D
3>
')ra!e: e&erc-cio 1 ; Wuanto U c asse E(emplo2 #s ide anterior*" no construtor especia iDado '(emplo) (*tring titulo). ap i@ue os re@uisitos:
2 2 2 2 2 2 2 )<tulo Cor de Fundo 0imens7o !a$out =esi>able %osi67o ?cone da barra de t<tulo : <A;ercHcio de J8rame= : #255. 255. 255* : ar"ura R 510 e a tura R 510 : nu o : fa se : centro da te a : %o;+sm+"if
2 J 8aa com @ue o construtor default c5ame o construtor especia iDado definido no item 1+
3F
#oas $rticas
38
correspondentes c5amados por e e+ 9onfi"ure a"rupadamente todas as caracterHsticas de um atri%uto+ 2ara tratar o prE;imo atri%uto. sa te uma in5a e recomece o mesmo processo+ 4ei;e para o fina da c asse a rea de adicionar atri%utos aos containers. isto /. a c5amada dos m/todos add + B setAisible!true$ deve aparecer como - tima instruo+
3G
Inter3aces gr43icas
<<imports im9ort 777 p%&lic class 'oas$raticas <<declara=>o 9rivate BPanel p% 9rivate B4rame % 9ublic 'oas$raticas () <<instancia=>o 9 & ne' BPanel!$% ...
<<configura=>o de cada atri!uto 97setBacE#round!Color7GR==0$% ... <<adi=>o aos containers c7add!9$% 7777 } j.set(isi&le(tr%e); 9ublic static void main!Strin# ar#s;<$: 'oas$raticas tela & ne' 'oas$raticas ! $%
} }
40
Ca%astro&vento
41
42
&ventos %e 'anela
43
')ra!e
2J Oudar o comportamento defau t do ? da 0ane a: +++++++++++++++++++++ 3J (ratar o evento de 0ane a #c icar no ? *. com anon+mous inner class& +++++++++++++++++++++
44
(ipos de operao:
2 JFrame.0O89O):I9#8O98C!O'E
#definido em &indo'9onstants*: nada acontece. pois re@uer @ue o pro"rama manipu e a operao
no m/todo 'indo'9 osin" do evento &indo'Nistener re"istrado pe o o%0eto @ue "erou a ao+
2 JFrame.
:I0E8O98C!O'E
#definido
em
&indo'9onstants*:
automaticamente ocu ta a 0ane a apEs ser invocado @ua @uer o%0eto &indo'Nistener+ Aste / o va or defau t de J8rame+
automaticamente sai
da ap icao uti iDando o m/todo e;it# * da c asse 3Kstem+ $conse 5aJse @ue esta operao se0a usada apenas em ap ica!es+
45
JFrame
Interface Listener
0 e7entos de 6anela
,-to%os # pu% ic void++*
Classe A%a$ter
&indo'Nistener
&indo'$dapter
'indo'$ctived# Findo'=vent e * 'indo'9 osed# Findo'=vent e * 5indo5Closing# Findo'=vent e * 'indo'4eactivated# Findo'=vent e * 'indo'4eiconified# Findo'=vent e * 'indo',conified# Findo'=vent e * 'indo'Bpened# Findo'=vent e *
2ara um componente do tipo 0ane a. c5ame add8indo5"istener # Findo'Listener '* e imp emente o m/todo correspondente de &indo'Nistener (vide tabela acima). A;emp o:
anela7addFindo'Listener! ne' Findo'.da9ter! $: 9ublic void window"losing!Findo'=vent '$:77777DD$% Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/events/api+5tm + 4>
Z9onsu te o m/todo set9efaultClose/perationAint i@ de J8rame para sa%er como proceder se o 4F usurio retroceder na sua deciso de fec5ar a 0ane a da ap icao+
J#utton
48
1ot2es
Bs %ot!es podem conter te;to e Hcone+ Iea"em a eventos de ao ou de item+
J!utton
Interface Listener
0 e7ento de a89o
,-to%o # pu% ic void++* action0erformed# .ction=vent e*
Classe A%a$ter
$ctionNistener
JJJJJJJJJJJJ
2ara um componente do tipo %oto ou outro @ue aceite evento de ao. c5ame addBction"istener # .ctionListener a* e imp emente o -nico m/todo action2erformed (vide tabela acima). A;emp o: botao7add.ctionListener! ne' .ctionListener! $: 9ublic void action$er+ormed!.ction=vent a$: 77777 DD$% O/todo importante @ue pode ser usado dentro do action2erformed: ) getSo%rce( )* retorna o o%0eto #do tipo B%0ect* @ue "erou o evento+
50
jbConfirma:
Bo clicar: mostrar a mensa"em <$o no imp ementada+=. usando o m/todo s5o'Oessa"e4ia o" da c asse JBption2ane+ 2mplementa=>o: c asse interna c5amada Avento9onfirma #imp ements de $ctionNistener*+
jbCancela:
Bo clicar: fec5ar a 0ane a. c5amando a imp ementao feita para 'indo'9 osin". dentro do action2erformed+ 2mplementa=>o: c asse anYnima interna+ "ica&
janela.dispatch(vent * new :indow(vent * janela& :indow(vent.:9;$<:=>8<S9;?++@ 51
JCo .o#o/
52
J#ombo!o2
53
J#ombo!o2
Interface Listener Classe A%a$ter
0 e7ento de item
,-to%o # pu% ic void++* item#tateC+anged# /tem=vent e*
,temNistener
JJJJJJJJJJJJ
2ara um componente do tipo J9om%oBo; ou outro @ue aceite evento de item. c5ame add2tem"istener # /temListener a * e imp emente o -nico m/todo item3tate95an"ed (vide tabela acima). A;emp o: Combo7add/temListener! ne' /temListener! $: 9ublic void itemState",anged!/tem=vent e$ : i4!e7#etStateC-an#e! $ && /tem=vent7SE-E".E/$: 7777777 DDD$% 2mportante: J9om%oBo; tam%/m pode rea"ir a evento de ao+ Oais deta 5es em: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/events/api+5tm +
54
J#ombo!o2
0 e7ento de item
.:todos importantes ;ue podem ser usados dentro do item1tate#5anged : getSo%rce( )* retorna o o%0eto #do tipo B%0ect* @ue "erou o evento+ getItem( )* retorna o componente associado ao item cu0o estado ten5a mudado+
8re@^entemente. o retorno / uma 3trin" contendo o te;to so%re o item Co caso de uma ista de itens #Nist*. e e / o inteiro #,nte"er* @ue do item se ecionado+ se ecionado+ especifica o Hndice
getItemSelecta&le( )* retorna o componente @ue "erou o evento #item*+ getState",ange( )* retorna o novo estado do item. @ue pode ser 3ANA9(A4
e 4A3ANA9(A4+
55
Bo selecionar um item: preenc5er o campo 0tfAmai . conforme a se"uinte re"ra: J login: iniciais do nome se ecionado _ - timo so%renome+ J domCnio: `cadastroevento+com+%r 2mplementa=>o: c asse anYnima interna++
Dicas: -use e.getItem().toString() para o item selecionado. -use StringTokenizer de java.util; -use o mtodo charAt(0) de String. 5>
5F
LookAnd)eel: curiosidade
CadastroEvento43ava : a* 9riar um diretErio para os temas+ %* ,nc uir o Noo)$nd8ee +Dip no build path+ c* Asco 5er o tema dese0ado. no m/todo main+
trC : S0in-oo01ndFeel.setS0in(S0in-oo01ndFeel.load.,eme$ac0! GG?aquat-eme9acE7@i9?$$% GG?bb t-eme9acE7@i9?$$% GGcin@a com contorno a@ul GG?beost-eme9acE7@i9?$$% GGcin@a claro e cin@a escuro GG?macost-eme9acE7@i9?$$% GGcin@a claro e cin@a escuro
2modernt,emepac0.3ip2));
GG?'-istlert-eme9acE7@i9?$$% GGverdeGa@ul !ob etos quadrados$ GG?>9lunat-eme9acE7@i9?$$% GGverdeGa@ul !ob etos com borda"seleo em verde$ S0in-oo01ndFeel.ena&le(); Dcatc-!=>ce9tion e$:SCstem7out79rintln!?Ocorreu erro no LooEI3eel ?Je$%D "adastroEvento tela # new "adastroEvento( ); }
58
1erencia%ores %e la2out
5G
')ra!e
0 inserir componentes
aneiras+
( 3 $oss*veis
2J Msar "erenciador de aKout para contro ar a oca iDao dos componentes em 0ane as e pain/is+ Bs principais m/todos so:
set"ayout # NaKoutOana"er m * add # 9omponent c * ou add # 9omponent c. int i * set0referred#i$e # 4imension d *
>0
')ra!e 0
gerenciadores de la<out
>1
')ra!e 0
gerenciadores de la<out
>2
')ra!e 0
im9ort im9ort ava7a't7K% ava>7s'in#7K%
9ublic class 'order-a4o%t/emo e>tends B3rame : 9ublic static void main!Strin# ar#s;<$ : BorderLaCout1emo Container c & & ne' BorderLaCout1emo!$% 7get"ontent$ane!$%
7set2itle!?BorderLaCout?$% c7set-a4o%t !ne' 'order-a4o%t!$$% c7add !ne' Button !?.rea 0orte?$"'order-a4o%t.567.8$% c7add !ne' Button !?.rea Sul?$"BorderLaCout7S69.8$% c7add !ne' Button !?.rea Leste?$"BorderLaCout7E1S.$% c7add !ne' Button !?.rea Oeste?$"BorderLaCout7:ES.$% c7add !ne' Button !?.rea Centro?$"BorderLaCout7"E5.E7$% 79acE!$% 7setAisible!true$% DD
>3
')ra!e 0
2odeJse simp ificar um aKout pe o a"rupamento de componentes em containers do tipo J2ane #visHveis ou invisHveis*+ Exemplo & distribuir componentes no #ontent,ane de um -.rame. 2odeJse usar pain/is dentro de pain/is e cada um de es sendo contro ado por um "erenciador de aKout diferente. o @ue tam%/m au;i ia a distri%uio dos componentes visuais+ Exemplo & bot/es posicionados com dist0ncias hori1ontais di!erentes. 1 possHve atri%uir pain/is Us reas dos "erenciadores de aKout #os @ue assim o permitam* e ap icar a cada uma dessas reas um novo "erenciador+ Exemplo & 2uando no se consegue um boa distribuio direta (sem -,anel) dos componentes na 3rea disponibili1ada por um 4order5a+out. >4
')ra!e 0
Ca c asse CadastroEvento43ava* a tere o "erenciador de aKout do 9ontent2ane para 8 o'NaKout. com os se"uintes parXmetros:
2 Alinhamento : 8 o'NaKout+9AC(AI 2 Espa6amento hori>ontal : 1F 2 Espa6amento vertical : 1F
>5
'3anel
1 um container: tem o propEsito de a"rupar componentes para serem inseridos posteriormente em outro container. at/ mesmo outros pain/is+ 9om isso. permite a criao de aKouts sofisticados+ Mti iDa o "erente de aKout 8 o'NaKout como padro+
>>
JPanel $ e2emplo
im9ort ava7a't7K% im9ort ava>7s'in#7K% 9ublic class Panel1emo : 9rivate BPanel 9ainel.@ul% 9rivate BPanel 9ainelAermel-o% 9rivate B3rame anela1emo% 9ublic Panel1emo!$ : 9ainel.@ul & ne' BPanel!$% 9ainelAermel-o & ne' BPanel!$% anela1emo & ne' B3rame!$% Container c & anela1emo7#etContentPane!$% c7setLaCout!ne' 3lo'LaCout!$$% anela1emo7setSi@e!(++"(++$% 9ainel.@ul7setBacE#round!Color7blue$% 9ainelAermel-o7setBacE#round!Color7red$% 9ainel.@ul7setPre4erredSi@e!ne' 1imension!)+")+$$% 9ainelAermel-o7setPre4erredSi@e!ne' 1imension! *++"*++$$% c7add!9ainel.@ul$% c7add!9ainelAermel-o$% anela1emo7setAisible!true$% D 9ublic static void main!Strin#;< ar#s$ : >F Panel1emo 9 & ne' Panel1emo!$% D D
JPanel 0 e2erccio
a c asse CadastroEvento43ava* acrescenteJ 5e 3 atri%utos privados do tipo J2ane + Asses atri%utos devero ser instanciados no construtor da c asse atua e adicionados ao 9ontent2ane+ painel)itulo:
Cor de fundo: cinDa c aro -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R 1F0+ "ayout: manter o defau t. com os parXmetros #8 o'NaKout+NA8(. 15. >*+
painelOrgani>ador:
Cor de fundo: cinDa c aro -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R 180+ "ayout: manter o defau t. com os parXmetros #8 o'NaKout+NA8(. 15. >*+
painelBotoes:
Cor de fundo: amare o -aman+o: a0uste com set2referred3iDe para ar"ura R 450 e a tura R >3+ "ayout: manter o defau t
>8
FI M
>G
!ibliogra3ia
9orne . LarK+ 9ore JavaT traduo 4anie QieiraT reviso t/cnica Iodri"o
Iodri"ues+ 3o 2au o. Oa)ron Boo)s. 1GGF+ Ac)e . Bruce+ (5in)in" in Java+ 2rentice ?a 2(I. M3$. 1GG8+ 9ampione. OarK+ (5e Java (utoria : o%0ectJoriented pro"rammin" for t5e internet+ $ddison &es eK Non"man. 9a iforniaJ M3$. 1GG8+ 4eite . ?+ O+T4eite . 2+ J+ Java. 9omo 2ro"ramar+ 3a+ edio 7 2orto $ e"re: Boo)man. 2001+ Java (utoria : 5ttp://0ava+sun+com/docs/%oo)s/tutoria /0ava/(B9+5tm bnutsand%o ts+ J$Q$ 3'in" #J89* : 5ttp://0ava+sun+com/docs/%oo)s/tutoria /uis'in"/(B9+5tm bstart+ J$Q$4B9: 5ttp://0ava+sun+com/02se/1+4/docs/api/inde;+5tm + 9 asses Assenciais Java: 5ttp://0ava+sun+com/docs/%oo)s/tutoria /essentia /(B9+5tm + J$Q$ &BIN4 e 9BIA J$Q$: 5ttp://'''+0ava'or d+com/c5anne ]content/0'JcoreJinde;+s5tm +
F0