Académique Documents
Professionnel Documents
Culture Documents
Orientação a Objetos
Linguagem Java
UNICEUB
Jorge Farias
Mar/2008
1
Objetivo Geral
2
Objetivos Específicos
3
Principais Tópicos
• Visão geral
O ambiente de desenvolvimento JDK
Características gerais
Um programa simples
Convenções
• Estrutura da linguagem
Comentários
Tipos primitivos
Operadores
Controle de fluxo
4
Principais Tópicos
• Introdução a Orientação a Objetos
Visão geral de orientação a objetos
Classes
Objetos
Criação de objetos em Java
Referência a membros de objetos e classes
5
Principais Tópicos
• Classes e objetos
Conceitos de orientação a objetos
Declaração de classes e métodos
Instanciação e referência a objetos e métodos
Abstração
Encapsulamento
Herança
Troca de Mensagem
Polimorfismo
Sobreposição de métodos
Sobrecarga de métodos
6
Principais Tópicos
• Classes em Java - tópicos avançados
Vector
Dados estruturados
Classes Abstratas
Interfaces
Classes Aninhadas ou Internas
7
Principais Tópicos
• AWT
Usando Gerenciadores de Layout
Escrevendo Manipuladores de Eventos
• Applets
8
1 - Visão Geral
9
O ambiente de desenvolvimento JDK
10
O que é JAVA?
11
As principais metas
12
As principais metas – cont.
13
Possui as características:
• Simplicidade
Sintaxe do C++, mas:
• Não possui herança múltipla.
• Faz coleta automática de lixo em memória
(“Garbage collection”)
Linguagem “enxuta”
• Interpretador e biblioteca padrão pequenos
• Programação em máquinas pequenas
14
Tecnologia de Objetos
Estado
Mensagem Var3
Var1
Var2 Var4
Mensagem
Comportamento
Mensagem Met1 Met2
Met3 Met4
TCP/IP FTP
HTTP URL
16
Linguagem Robusta e Segura
• Tipagem estática
Verificação em tempo de compilação
• Avançado modelo de referências
Não existe manipulação direta de ponteiros
Elimina invasão indevida de área de memória
• Programação distribuída
Técnicas de autenticação via encriptação
17
Heterogeneidade
Código
Fonte
Compilação
Bytecode
Interpretação
19
A arquitetura Java
20
A arquitetura Java
21
A arquitetura Java
• Segurança do código
Os programas javas são convertidos de código
fonte para um conjunto de código binário (byte
code).
Em tempo de execução, os códigos binários são
carregados, checados e executados pelo
interpretador. O interpretador possui dois serviços:
Executar o código binário;
Fazer as chamadas apropriadas ao sistema
operacional para o hardware em uso.
22
Segurança do código
23
Segurança do código
• O que é verificado?
Teste quanto ao formato dos fragmentos do
código binário.
Aplicado provas de teoremas para checar a
legalidade do código quanto a:
• códigos que corrompem ponteiros;
• violação dos direitos de acesso a objetos;
• mudanças em tipos de objetos ou classes.
24
O ambiente de programa java,
onde podemos ver como java
força a segurança do código Runtime
Compile Carregador
de Classe
Verificador
do
Bytecode
Interpretador
JIT
Gerador de
javac Hello.java
Runtime código
Hello.class Hardware
25
A Plataforma Java
• javac
• javadoc
• java
• appletviewer
Http://www.javasoft.com
26
A Plataforma Java
javac java
Sua classe Byte code gerado Sua aplicação
.java .class Java
javadoc referenciado
no
aplletviewer
Documentação Código Sua applet Java
HTML da classe HTML
27
Meu Primeiro Programa
28
Compilando um programa
• Certifique-se de ter adicionado a sua lista de path’s o path
do compilador e interpretador Java, Javac e Java
respectivamente.
• Crie o arquivo ao lado em um diretório qualquer e salve
com o nome: HelloInternet.Java
• Chame o compilador Java para este arquivo: Javac
HelloInternet.Java
• Seu diretório deve ter recebido um novo arquivo após essa
compilação: HelloInternet.class
• Chame o interpretador Java para este arquivo (omita a
extensão .class de arquivo): Java HelloInternet
• Observe o resultado na tela: Hello Internet!
29
//Comentário de uma linha
30
public class HelloInternet
31
HelloInternet
32
O trecho do programa
public:
É um qualificador do método que indica que este é acessível
externamente a esta classe (para outras classes que
eventualmente seriam criadas), não se preocupe com ele
agora, apenas declare todos os métodos como public
33
static
34
void
35
main
36
(String args[])
37
{ ... }
38
System.out.println("Hello Internet!");
39
Exibindo a saída em uma janela ou
caixa de diálogo
• Utilizando a classe JOptionPane do pacote
swing.
Barra de título
Ícone apropriado
40
Tipos de diálogo de mensagem
Tipo Ícone Descrição
JOptionPane.WARNING_MESSAGE
! Exibe um diálogo de advertência.
import javax.swing.JOptionPane;
public class HelloInternetGrafico
{
public static void main (String [] args)
{
JOptionPane.showMessageDialog(null,
"Hello Internet gráfico!",
"Primeiro Programa Gráfico",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
42
Primeiro programa gráfico - cont.
• O resultado:
43
Convenções
• Variáveis e métodos iniciam com letras
minúsculas.
• Classes iniciam com letras maiúsculas
• Nome composto: utilizar letras maiúsculas para
as iniciais das palavras que seguem a primeira
• Letras maiúsculas para as constantes
44
2 - Estrutura da Linguagem
45
Estrutura da linguagem
Comentários
Tipos primitivos
Operadores
Controle de fluxo
46
Comentários
47
Descritores do javadoc
48
Exemplo de javadoc
/**
* Programa para exemplificar o javadoc.
*/
51
Palavras reservadas
abstract do implements private throw
boolean double import protected throws
break else instanceof public transient
byte extends int return true
case false interface short try
catch final long static void
char finally native super volatile
class float new switch while
continue for null synchronized
default if package this
Nota: atualmente as seguintes palavras reservadas não são utilizadas:
cast, const, future, generic, goto, inner, operator, outer, rest, var.
52
Tipos Primitivos
54
Operadores Aritméticos
55
Operadores Aritméticos
Operador Uso Descrição
Categoria Comando
decisão if-else, switch-case
loop for, while, do-while
diversos break, continue, label: , return
59
Controle de Fluxo - if
if (expressão booleana)
comando ou bloco
else
comando ou bloco
60
Exemplo de uso - if
public class UsoIF
{
public static void main (String args[])
{
int a = 10;
int b = 20;
int c;
if (a > b)
c = a;
else
c = b;
System.out.println("O maior valor = " + c);
}
}
61
Controle de Fluxo - while
do
comando ou bloco
while(expressão booleana);
62
Exemplo de uso - while
public class UsoWhile
{
public static void main (String args[])
{
int i = 0;
while (i < 11)
{
if ( (i % 2) == 0)
{
System.out.println("Número " + i + " e' par !");
}
i = i + 1;
}
}
}
63
Exemplo de uso - do while
public class UsoDoWhile
{
public static void main (String args[])
{
int i = 0;
do
{
if ( (i % 2) == 0)
{
System.out.println("Número " + i + " e' par !");
}
i = i + 1;
}
while (i < 11);
}
}
64
Controle de Fluxo - for
expressão inicial;
while (expressão booleana)
{
comando ou bloco
expressão de iteração;
}
65
Exemplo de uso - for
66
Controle de Fluxo - switch
switch (expressão1)
{
case expressão2:
comando ou bloco
break;
. . .
case expressãon:
comando ou bloco
break;
default:
comando ou bloco
break;
}
67
Exemplo de uso - switch
public class UsoSwitch
{
public static void main (String args[])
{
for (int i = 1; i<5; i++)
{
switch (i)
{
case 1: System.out.println ("Numero UM");
break;
case 2: System.out.println ("Numero DOIS");
break;
case 3: System.out.println ("Numero TRES");
break;
default: System.out.println ("NUMERO INVALIDO");
}
}
}
}
68
Exercícios
69
3 - Introdução a Orientação
a Objetos
70
Orientação a Objetos
Conceitos a serem abordados:
• Componentes:
Objetos
Classes
71
Orientação a Objetos
72
Classes - conceitos
• definem a estrutura e o
comportamento de um tipo de Nome
objeto;
• atuam como templates; Atributos
73
Classes
Visão do mundo real:
• moldes para criação de objetos;
• especificam propriedades e ações em comum a todos seus
objetos.
Classe
Automóvel
74
Classes
Classes - Visão em POO:
Um protótipo que define os atributos e os métodos comuns a
todos objetos de um determinado tipo e da própria classe, com a
finalidade de servir como molde para a criação de objetos.
Classe
Empregado
Objetos
76
Objetos
Visão do mundo real:
• Na nossa vida, estamos cercados por objetos.
77
Objetos
Visão em POO:
Um conjunto distinto de atributos e métodos que representam
entidades do mundo real, implementados por software e gerados
(instanciados) através de classes.
Métodos
Métodos
78
Criando Objetos em Java
• Objetos são criados através da declaração new, seguida
de um método construtor. Exemplo:
Automovel gol = new Automovel();
• Uma classe pode ter construtores especializados ou
somente o construtor default (gerado pelo compilador);
• Um construtor recebe sempre o mesmo nome da sua
classe;
• O método construtor gera uma instância do objeto em
memória e o seu código é executado imediatamente após
a criação do objeto provendo-lhe um estado inicial;
79
Criando Objetos em Java - cont.
• Valores de parâmetros são passados no momento da
criação;
• Quando declaramos variáveis de qualquer tipo
primitivo (boolean, byte, short, char, int, long, float,
ou double) o espaço em memória (na área de dados) é
alocado como parte da operação;
• A declaração de uma variável referência a um objeto
não aloca espaço em memória;
• A alocação de memória (no heap) é feita somente
quando o objeto é criado.
80
Criando Objetos em Java - cont.
• Considere o exemplo abaixo:
Automovel gol;
gol = new Automovel();
• O primeiro comando, a declaração, aloca apenas o
espaço suficiente para a referência. O segundo,
aloca o espaço para os atributos do objeto gol.
• Somente após a criação do objeto é que seus
membros (atributos e métodos) podem ser
referenciados.
81
Criando objetos - cont
• Alocação e layout
No corpo do método, a declaração
Automovel gol aloca espaço somente para a referência:
gol ????????
• Alocação e layout
Finalmente, atribuindo a variável referência o
endereço do objeto alocado.
gol = new Automovel();
gol 0x01abdfe
String modelo ?
String cor ?
int ano 0
83
Exemplo
public class Automovel
{
String modelo,cor;
int ano;
boolean estadoMotor = false;
public void ligaMotor()
{
estadoMotor = true;
}
public void informaDados()
{
String motorString;
if (estadoMotor){
motorString = " ligado";
}
else{
motorString = " desligado";
}
System.out.println("Automovel:" + modelo + " "
+ ano + " " + cor + motorString);
}
} 84
Exemplo - cont.
public class AgenciaAutomoveis
{
public static void main(String args[])
{
// Criando os objetos (instancias) da classe
Automovel:
Automovel fusca = new Automovel();
Automovel gol = new Automovel();
fusca.modelo = "Fusca";
fusca.cor = "Preto";
fusca.ano = 69;
gol.modelo = "Gol";
gol.cor = "Vermelho";
gol.ano = 96;
// Ligando o motor de um automoveis:
fusca.ligaMotor();
// Mostrando informações dos automóvel
fusca.informaDados();
gol.informaDados();
}
}
85
Atributos
• propriedades associadas a uma classe e seus objetos;
• atributos armazenam resultados do processamento feito
pelos métodos da classe.
instância
• Nome
• Cor do pêlo • Número de patas
• Idade
86
Exemplo
public class Canil
{
public static void main(String args[])
{
Cachorro rex = new Cachorro();
rex.nome = "Rex";
rex.idade = 2;
rex.corDoPelo = "Marrom";
System.out.println("Todo cachorro tem " +
Cachorro.NUMERODEPATAS + " patas");
System.out.println("O cachorro "+ rex.nome +
" tem pêlo de cor:" + rex.corDoPelo);
}
}
class Cachorro
{
// Atributos da classe Cachorro
public static final int NUMERODEPATAS = 4;
// Atributos do objeto (criados quando o objeto é instanciando)
public String nome;
public int idade;
public String corDoPelo;
} 87
Métodos
• Operações que manipulam o estado do objeto.
• Podem fazer parte da interface do objeto ou
realizar uma função interna.
Classe: Lâmpada
Métodos
Objeto: philips60w
• acender
• apagar
• indicarVoltagem
88
Referência a Membros de Objetos e
Classes
Variável
< referência.variável>
fusca.ano = 69;
Método
< resultado = referência.método( parâmetros )>
fusca.ligaMotor();
• Resgatar o resultado é opcional
• Os parâmetros, quando existentes, são posicionais e são tipados
• Número de parâmetros é verificado em tempo de compilação
89
Retornando valor em métodos
• Na definição do nome do método deve ser
indicado se haverá ou não o retorno de valores.
– Com retorno de valores:
public int quadrado (int y)
{
return y * y;
}
– sem retorno de valores:
public void setValor (int y)
{
valor = y;
}
90
Membros Estáticos
91
Dados Estáticos
92
Exemplo: dados estáticos
class Empregado
{
String nome;
int matricula;
static int totalEmpregados=0;
Empregado (String nm, int mat)
{
matricula = mat;
nome = nm;
}
}
public class Empresa
{
public static void main(String args[])
{
Empregado novoEmpregado = new Empregado(“Adail”, 123);
System.out.println(Empregado.totalEmpregados);
Empregado.totalEmpregados++;
System.out.println(Empregado.totalEmpregados);
}
}
93
Métodos Estáticos = métodos da
classe
• Da mesma forma como há dados que pertencem a
uma classe como um todo, também existem
métodos estáticos, que, em vez de serem aplicados
a um objeto individual, executam operações que
afetam a classe inteira
• Métodos estáticos não podem acessar os dados de
instâncias
• Métodos estáticos só podem acessar diretamente
campos estáticos
94
Exemplo: métodos estáticos
class Empregado
{
String nome;
int matricula;
static int totalEmpregados;
public Empregado (String nome, int matricula)
{...}
static void abreEmpresa()
{
Empregado.totalEmpregados=0;
}
}
public class Empresa
{
public static void main(String args[])
{
Empregado.abreEmpresa();
Empregado = new Empregado (“Adail”, 123);
System.out.println(Empregado.totalEmpregados);
Empregado.totalEmpregados++;
System.out.println(Empregado.totalEmpregados);
}
}
95
Exercício
96
4 - Manipulação de Array,
Integer e String
97
O pacote lang e util
Classe Integer
Array
Classe String
Classe StringBuffer
Classe StringTokenizer
98
Integer
• Um objeto do tipo Integer contém uma variável do
tipo int.
Construtor Operação
Integer(int value) Constrói um novo objeto Integer contendo
o valor inteiro do argumento.
Integer(String s) Constrói um novo objeto Integer contendo
o valor inteiro do argumento convertido
em int.
Constantes Valor
static int MAX_VALUE O maior valor do tipo int.
static int MIN_VALUE O menor valor do tipo int.
99
Alguns métodos da classe Integer
Métodos
byte byteValue( ) : retorna o valor do Integer como byte.
short shortValue( ) : retorna o valor do Integer como short.
int intValue( ) : retorna o valor do Integer como int.
long longValue( ) : retorna o valor do Integer como long.
float floatValue( ) : retorna o seu valor como float.
100
Alguns métodos da classe Integer -
cont.
Métodos
int compareTo(Integer outroInteger) : compara dois objetos
inteiros numericamente. Se o resultado for 0, então os dois
objejtos são iguais. Se o resultado for maior que zero então
o objeto é maior que o do argumento. Se o resultado menor
que zero então o objeto é menor que o do argumento.
static int parseInt(String s) : retorna o valor do String s como
int.
String toString( ) : retorna o seu valor como String.
static String toString(int i ) : retorna uma String do valor
inteiro i.
101
Exercício
102
Array
• Seguro:
- Controle de acesso fora do limite
- Controle de inicialização
• Exemplos:
int[] array1;
int array2[];
int[] array3 = {1, 2, 3};
int array4[] = array3;
int[] array5 = new int[5];
• Primeiro elemento: índice 0
• Constante length:
array3.length → 3
array5.length → 5
103
Array - cont
• Array retangular com múltiplas dimensões:
int[][] array6 = {{1,2},{3,4},{5,5}};
int[][] array7 = new int[3][2];
• Constante length:
array6.length → 3
array6[0].length → 2
• Array não retangular com múltiplas dimensões:
int[][] array8 = {{1,2,3},{3,4},{5}};
int[][] array9 = new int[3][];
array9[0] = new int[3];
array9[1] = new int[2];
array9[2] = new int[1];
• Constante length:
array9.length → 3
array9[0].length → 3
array9[1].length → 2
array9[2].length → 1 104
Exemplo de uso - array
105
Exercícios
106
Exercícios - cont.
107
String
108
String
Construtor
String() : aloca um novo objeto String com nenhum caracter.
String(String value) : aloca um novo objeto String com
o mesmo conteúdo do objeto String de argumento.
String(char value[]) : aloca um novo objeto String contendo a
mesma sequência de caracteres do array de caracteres de
argumento.
String(StringBuffer value) : aloca um novo objeto String com
o mesmo conteúdo do objeto StringBuffer de argumento.
109
String
Construtor
String(byte[] bytes, int offset, int length) : constrói uma nova
String pela decodificação do array de bytes usando os
caracteres padrões da plataforma alvo.
String(byte[] bytes, String charsetName) : constrói uma nova
String pela decodificação do array de bytes usando os
caracteres de um charset específico.
String(char[] value, int offset, int count) : aloca uma nova
String que contém os caracteres do array de caracteres.
110
String
Métodos
char charAt(int Index) : recupera o caracter na posição
informada.
String concat(String str) : concatena a string do parâmetro ao
final desta string.
boolean contentEquals(StringBuffer sb) : retorna verdadeiro se
e somente se essa string representa a mesma seqüência de
caracteres do stringbuffer passado como parâmetro.
boolean endsWith(String s) : retorna um boleano indicando se o
objeto string termina ou não com o string de argumento.
boolean equals(String val) : testa a igualdade do conteúdo de
dois strings.
111
String
Métodos
boolean equalsIgnoreCase(String s) : testa igualdade do
conteúdo de dois string, considerando maiúscula e
minúscula iguais.
int indexOf(char c) : retorna o índice da 1ª ocorrência de c ou
-1 se o argumento não foi encontrado.
int length( ) : retorna o número de caracteres do string.
int lastIndexOf(char c) : procura do fim para o começo.
String replace(char oldChar, char newChar) : retorna uma
nova string resultante da atualização de todas as ocorrências
do oldChar nesta string pelo newChar.
112
String
Métodos
String replaceFirst(String regex, String replacement) :
atualiza a primeira substring nesta string anterior a expressão
regular que seja igual a string passada no parâmetro.
String [] split(String regex) : quebra a string em várias
substring que esteja delimitada pela expressão regular dada.
Retorna um array de string.
Ex: a string "boo:and:foo”:
Regex Resultado
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
113
String
Métodos
boolean startsWith(String s) : retorna um boleano indicando se
o objeto string começa ou não com o string do argumento.
String substring(int inic, fim ) : retorna um novo objeto string
contendo o conjunto de caracteres especificado (inic .. fim-1).
char [] toCharArray( ) : retorna um array dos caracteres do
string.
String trim( ) :retorna um novo objeto string sem espaços no
início e fim.
114
String
115
String
public class TesteString
{
public static void main(String args[])
{
String str1 = "Hello";
String str2 = str1;
str2 = str2 + " world!";
116
String
• Observação:
117
Exercícios
4.5 - Crie uma classe java com o nome “Extremos” que
receba parâmetros da linha de comando e mostre em seguida
qual destes é o maior e qual o menor.
118
Exercícios - cont.
4.6 - Crie uma classe em Java que recebe um objeto String e
retorna um objeto String com os valores de entrada na forma
invertida.
int i = 10;
Integer intObj = new Integer(i);
String str1 = intObj.toString();
120
Conversão de tipos - cont.
ou
121
Entrada de dados via janela ou
caixa de diálogo
• Utilizando a classe JOptionPane do pacote
swing.
Barra de título
Ícone apropriado
123
StringBuffer
124
StringBuffer
Construtor Operação
StringBuffer() Aloca um novo objeto StringBuffer
com nenhum caracter e uma
capacidade inicial de 16 caracteres.
125
StringBuffer
Métodos
StringBuffer append(String s) : String é concatenado no final do
StringBuffer, aumentando o seu tamanho, se necessário.
StringBuffer append(Object obj),
StringBuffer append(char str[]),
StringBuffer append(int i),
StringBuffer append(long l),
StringBuffer append(double d) :o argumento é convertido para
String e concatenado no final do StringBuffer, aumentando o
seu tamanho quando necessário.
char charAt(int i) :retorna o caracter (char) na posição indicada.
126
StringBuffer
Métodos
StringBuffer insert(int i, String s) : insere o string na posição
indicada.
int length( ) : retorna o número de caracteres do
stringbuffer.
void setCharAt(int i, char c) :modifica o valor na posição
indicada.
void setLength(int i) : trunca ou expande o stringbuffer. Na
expansão preenche os novos espaços com valor nulo.
String toString( ) : cria um objeto string a partir deste
stringbuffer.
127
StringBuffer
public class TesteStringBuffer
{
public static void main(String args[ ])
{
StringBuffer strB1 = new StringBuffer();
strB1 = strB1.append("Hello");
StringBuffer strB2 = strB1;
strB1 = strB1.append(" World").append("!");
StringBuffer strB3 = new StringBuffer("Hello");
strB3.append(" world!");
System.out.println("strB1 = " + strB1);
System.out.println("strB2 = " + strB2);
System.out.println("strB3 = " + strB3);
4.11 - Crie uma classe Java que recebe uma String contendo um
nome e retorna um StringBuffer contendo o nome alterado para
o formato ABNT. Ex.: José Luiz Ferreira -> Ferreira, J.L.
129
StringTokenizer
130
StringTokenizer
Construtor
StringTokenizer(String str): constrói uma StringTokenizer
para uma String específica.
StringTokenizer(String str, String delim) : constrói uma
StringTokenizer para uma String específica usando a lista de
delimitadores do parâmetro.
StringTokenizer(String str, String delim,
boolean returnDelims) : constrói uma StringTokenizer para
uma String específica usando a lista de delimitadores do
parâmetro. Podendo ou não o delimitador ser considerado
como um token dependendo do valor do parâmetro
returnDelims.
131
StringTokenizer
Métodos
int countTokens() : calcula o número de vezez que o método
nextToken pode ser chamado antes de gerar uma exceção.
boolean hasMoreTokens() : testa se há mais tokens
disponíveis para a string em questão.
String nextToken() : retorna o próximo token da string em
questão.
String nextToken(String delim) : retorna o próximo token
da string utilizando as lista de delimitadores do parâmetro.
132
Exemplo
import java.util;
public class TestStringTokenizer
{
public static void main (String [] args)
{
StringTokenizer st = new StringTokenizer
(”Isso é um teste de StringTokenizer");
while (st.hasMoreTokens())
{
println(st.nextToken());
}
}
}
133
Exercício
4.12 - Faça um programa que leia N linhas e faça:
a) dividir as linhas lidas em palavras, armazenando-as em
um array de String;
b) considerar os delimitadores: “ \t\n\r;#”. Porém, não
considerar os delimitadores como tokens.
c) definir o array de String com tamanho inicial igual a 50 e
fazer a expansão do array de 10 em 10 elementos. Esta
funcionalidade deve ser feita através de um método com a
seguinte assinatura: public String [] expande(String [] st);
d) Não considerar as palavras: “de”, “do”, “dos”, “o”, “a”,
“os”, “as”, “em”, “um”, “uma”, “e”, “com” e “;
e) Mostrar as palavras em ordem crescente alfabeticamente.
134
5 - Orientação a Objetos em
Java
135
Orientação a Objetos
Conceitos a serem abordados:
• Características:
Abstração Encapsulamento
Herança Polimorfismo
Mensagem Interfaces
136
Abstração
• “Extrair tudo o que for essencial e nada mais” (Aaron
Walsh)
cor
placa cilindrada
cor velocidadeMax
númeroChassi
138
Encapsulamento
139
Encapsulamento - modificadores de
visibilidade
public Estes atributos e métodos são sempre acessíveis em
todos os métodos de todas as classes. Este é o nível
menos rígido de encapsulamento, que equivale a não
encapsular.
141
Encapsulamento
class CorpoCeleste {
public long id; class CorpoCeleste {
public String nome; private long id;
..... private String nome;
} .....
public long getId()
{
return id;
}
public String getNome()
{
return nome;
garante acesso externo }
somente no modo “read-only” .....
}
142
Herança
143
Herança
144
Herança
Visão do mundo real:
• Estamos acostumados a lidar com classes agrupando-as em
estruturas hierárquicas;
Tem pêlos
duas dentições Classe mamíferos Anfíbios ...
amamentam filhotes
146
Hierarquia de Classes
Em Java, a classe “Object” é raiz de todas as classes:
Object
Sobremesa
Bolo Torta
LuisFilipe
147
Herança - exemplo 1
class HelloInternet
{
public static void main (String args[])
{
System.out.println ( "Hello Internet");
}
}
148
Herança - exemplo 2
class Veiculo
{
float preço;
String modelo;
}
149
Herança - exemplo 2 (cont.)
public class Agencia
{
public static void main(String args[])
{
Motocicleta cbHonda = new Motocicleta();
cbHonda.preço = 15000.0f;
cbHonda.modelo = “Trail”;
cbHonda.cilindrada = 1000;
System.out.println(“O modelo “ +
cbHonda.modelo +
“ preço “ + cbHonda.preço);
Veiculo honda = new Veiculo();
honda.preço = 45000f;
honda.modelo = “civic”;
honda = cbHonda; // OK
cbHonda = honda; // Oops!
}
} 150
Declaração de Atributos
Forma
private
protected
public
<branco>
152
Visibilidade de Atributos - exemplo 1
package Grego;
class Alfa
{
protected int campoProtegido;
}
class Beta{
void acessaMetodo(){
Alfa a = new Alfa;
a.campoProtegido = 15; // OK!
}
}
package Latin;
import Grego.*;
class Delta extends Alfa {
void acessaMetodo(Alfa a, Delta d){
a.campoProtegido = 20; // Ilegal
d.campoProtegido = 30; // OK!
}
}
153
Visibilidade de Atributos - exemplo 2
package Grego;
class Alfa{
void metodoPackage(){
System.out.println(“Package”);
}
}
class Beta{
void acessaMetodo(){
Alfa a = new Alfa;
a.metodoPackage(); // OK!
}
}
package Latin
import Grego.*;
class Delta extends Alfa {
void acessaMetodo(Alfa a, Delta d){
a.metodoPackage(); // Ilegal!
d.metodoPackage(); // Ilegal!
}
}
154
this
155
this
this
A B
A = this
156
this - exemplo
//Classe ponto
public class Ponto
{
private float x,y;
public Ponto(float x,float y)
{
this.x=x; this.y=y;
}
public void move(float dx,float dy)
{
this.x+=dx; this.y+=dy;
}
public float retorna_x()
{
return x;
}
157
Exemplo - cont.
public void mostra()
{
System.out.println( "(" + this.x + "," +
this.y + ")" );
}
}
158
super
159
Declarações de Métodos
accessLevel public, protected, private, private protected.
Forma
< resultado = referência.método( parâmetros );>
resultado = terra.nomeOrbita();
161
Passagem de Parâmetros
162
Exercício
5.1 - Crie duas classes que definam os seguintes
atributos e métodos para objetos do tipo:
Aviao Piloto
164
Polimorfismo
165
super()
• O operador super pode ser utilizado de duas
formas:
a) Executar na subclasse métodos que foram sobrepostos.
Esta modalidade pode ser feita em qualquer método da
subclasse e em qualquer posição.Segue a sintaxe:
super.<método_na_superclasse>;
b) Executar o método construtor da superclasse na
subclasse. A chamada do construtor da superclasse só
pode ser feita no construtor da subclasse e deve ser o
primeiro comando. A sintaxe:
super(correspondente_construtor_na_supeclasse);
166
Polimorfismo -Sobreposição
Substituir a implementação de um método herdado
por uma implementação própria da subclasse
169
Polimorfismo - Sobreposição
int getAcidoCitrico()
{
return acidoCitrico;
}
void setAcidoCitrico(int acido)
{
this.acidoCitrico=acido; sobreposição
}
void descascar ()
{
System.out.println(
“Aqui eu descasco so citricos”);
}
}
170
Polimorfismo - Sobrecarga
172
This()
• O código this(corresp) é uma expressão comum quando se
faz sobrecarga no método construtor:
chame o construtor com essa assinatura da minha classe
Classe TortaFruta
{
private double peso;
private java.util.Date feitaEm;
public TortaFruta(int i)
{
this ((double) i);
}
public TortaFruta(double d)
{
this.peso = d;
feitaEm = new java.util.Date();
}
173
}
Polimorfismo - exercício
5.2 - Crie duas classes que definam os seguintes atributos e métodos para objetos do tipo:
Empregado
nome: String
salario: float
getSalario() : float
setSalario(salario: float): void
Gerente
comissao: float
175
Exercício
5.3 - Faça um programa que crie alguns objetos utilizando a
mesma referência, de tal forma que todas as vezes que um
novo objeto for criado o anterior emita uma mensagem
através do método finalize() informando que vai deixar
de existir. Eis as funcionalidades:
a) criar a classe ExercícioFinalize, com 2 atributos nome
msg do tipo String. E o método finalize(), onde neste
método deve ser dada a mensagem: “O objeto “ + nome +
“vai morrer!”.
b) criar a classe Principal, e instânciar 10 ocorrência de
objetos tipo ExercícioFinalize. Os objetos com nome
Objeto1, ..., Objeto10;
observação: para invocar o “Garbage collection” use
System.gc(). 176
Classes Abstratas
Conta
177
Classes Abstratas
178
Classes Abstratas: Exemplo
public abstract class VeiculoAquatico
{
abstract void definirRumo (int n);
abstract void definirVelocidade (int n);
}
class Canoa extends VeiculoAquatico
{
void definirRumo (int n)
{
....
}
void definirVelocidade (int n)
{
...
}
}
179
Exercício
5.4 - Considerando a hierarquia de contas anterior, fazer um programa
que faça a simulação de 1000 transações de débito e crédito nas
diversas contas. Utilize a função Math.randon() (consulte a
documentação para esta função). Eis as funcionalidades:
a) a classe conta possui o atributo saldo e os métodos abstratos: void
debito(float valor), void crédito (float valor) e
float saldo();
b) a classe poupança possui os atributos: int diasJuro, final float
PERCENTUALJURO=0.007 e o método: void calculaJuros().
c) a classe pessoa física possui o atributo: float limite.
d) a classe pessoa jurídica somente os membros definidos na
superclasse.
Lógica dos métodos:
a) fazer o débito em uma conta e o crédito em outra. O débito só deve ser
feito se houver saldo. O valor a ser debitado e as contas envolvidas na
transação calculados de forma randômica.
180
Exercício - cont.
b) o saldo total da conta física é: saldo + limite.
c) a cada lançamento de crédito na conta poupança, adicionar 1 nos
diasJuro e calcular os juros.
d) o cálculo do juros da conta poupança é o saldo mais o acréscimo dos
juros no período de 30 dias. Da seguinte forma:
se diasJuro > 30 então
juros = saldo * 0.007;
diasJuro = diasJuro - 30;
senao
juros = 0;
saldo = saldo + juros;
e) Implemente uma classe Principal que cria 3 contas: poupança, física e
jurídica e faça os 1000 lançamentos nas diversas contas. No final
informar o saldo de cada conta. Os atributos definidos como private
e criar os métodos get e set apropriados.
181
Interface
182
Interface
Visão do mundo real:
• Na nossa vida, estamos acostumados a lidar com objetos através
de sua interface, ignorando sua complexidade.
183
Interfaces em Java
184
Interface - exemplo
185
Modificadores de Classes em Java
189
6 - Classes em Java
190
Vector
191
Vector
Construtor
Vector() : constrói um vector vazio e tamanho inicial de 10
elementos.
Vector(int initCap) : constrói um vector vazio com a capacidade
informada.
Vector(Collection c) : constrói um vector contendo os elementos
da coleção.
Vector(int initialCapacity, int capacityIncrement) : constrói um
vector vazio com a capacidade e incremento informados.
192
Vector
Métodos
void add(int index, Object element) : insere o elemento no
vector na posição especificada.
boolean addAll(Collection c) : adiciona todos os elementos da
coleção especificada no final do vector.
void addElement(Object obj) : adiciona o componente
especificado no final. O tamanho é acrescido de 1.
void clear() : remove todos os elementos do vetor.
Object clone() : retorna um clone deste vector.
boolean contains(Object o) : verifica se o objeto
especificado é um componente do vector.
void copyInto(Object[] anArray) : copia os componentes deste
vetor dentro de array especificado.
193
Vector
Métodos
Object elementAt(int i) : retorna o componente no índice indicado.
boolean equals(Object o) : compara o objeto especificado com
aqueles armazenados no vector.
void insertElementAt(Object o, int i) : insere o componente
especificado na posição indicada. O indice i deve estar dentro do
vector. O vector é reorganizado e seu tamanho acrescido.
boolean isEmpty() : verifica se o vector está vazio.
int indexOf(Object o) : retorna o índice da primeira ocorrência do
195
Vector
import java.util.Vector;
public class PilhaVector
{
private Vector pilha;
public PilhaVector()
{
pilha = new Vector();
}
196
Vector
public Object pop()
{
if (pilha.isEmpty())
{
return null;
}
else
{
Object retorno = pilha.elementAt(pilha.size()-1);
pilha.setSize(pilha.size() - 1);
return retorno;
}
}
}
197
Exercício
6.1 - Crie uma classe em java que executa as funcionalidades
de uma pilha (como no exemplo anterior) que extraia e
insira elementos no início do vetor.
6.2 - Crie uma classe em java que executa as funcionalidades
de uma fila.
6.3 - Crie duas classes em java: Aviao e Passageiro. A classe
Aviao conterá os seguintes métodos (com estas
assinaturas):
public void embarcaPassageiro(Passageiro p);
public Passageiro desembarcaPassageiro();
public int totalPassageiros();
public String[] listaDePassageirosEmbarcados();
198
Exercícios - cont.
A classe Passageiro terá os métodos, para armazenar e
retornar o nome do passageiro:
public String getNome();
public void setNome(String nome);
E as funcionalidades:
a) utilize a classe Vector para armazenar internamente os
passageiros no avião.
b) crie uma terceira classe que instancie um objeto da classe
Aviao e vários objetos da classe Passageiro, atribua um
nome para cada passageiro, embarque cada um dos
passageiros, solicita uma lista dos passageiros embarcados
e imprima o nome de cada um deles.
199
7- Interfaces Gráficas em
Java
200
Introdução
204
Classes de suporte
Além das classes vistas no slide anterior, a interface
gráfica necessita utilizar várias classes de auxílio à
montagem de uma interface gráfica. São elas:
Point
Dimension
Rectangle
Color
Font
205
Point
Propósito: representar um ponto num sistema de
coordenadas (linhas e colunas) visando indicar a
localização de um componente visual AWT no
container onde o mesmo está inserido.
Construtores:
Point ( ) Cria uma ponto nas coordenadas
(0, 0).
Método Uso
207
Dimension
Propósito: representar a dimensão (em largura e altura)
de um componente visual AWT.
Construtores:
Dimension ( ) Cria uma dimensão com 0
para largura e altura.
Dimension (int largura, int altura)
Cria uma dimensão com os valores
definidos nos parâmetros para
largura e altura.
Variáveis:
• height - a altura da dimensão.
• width - a largura da dimensão.
208
Dimension
Método Uso
209
Rectangle
Propósito: representar um retângulo que especifica o formato
(em largura e altura) e a localização (eixos x e y) de um
componente visual AWT.
Construtores:
Rectangle (int x, int y, int largura, int altura)
Cria um retângulo com localização e
formato pré-definidos.
Rectangle (Point p, Dimension d)
Cria um retângulo com localização
representada pelo objeto p e
formato representado pelo objeto d.
Variáveis:
• x - representa a coluna.
• y - representa a linha.
• height - a altura do retângulo.
• width - a largura do retângulo. 210
Rectangle
Método Uso
getLocation( ) retorna um objeto Point representando
a localização do retângulo.
setLocation(Point p) redefine a localização do retângulo.
contains(Point p) verifica se o ponto p está contido na
área do retângulo.
grow(int l, int a) aumenta o retângulo com base nos
valores de incremento l e a.
intersection(Rectangle r)
calcula a interseção entre dois
retângulos devolvendo um novo.
211
Color
Propósito: representar uma cor através da composição das cores
primárias vermelho, verde e azul. A cor gerada poderá ser
então atribuída a um componente visual, para definir suas
propriedades para cor de frente e fundo.
Método Uso
213
Font
Construtor:
Font(String name, int style, int size)
Atributos
PLAIN, BOLD, ITALIC
Exemplo
Font f = new Font(“arial”,
Font.PLAIN,14);
214
Criando aplicações gráficas AWT e JFC
Component
Container
Panel Window
222
Containers
• Alguns containers devem ser associados a uma
outra superfície gráfica:
panel
applet
• Uma applet é associada a um browser ou a uma
janela do appletviewer e um panel é associado a
qualquer outro container.
• Outros containers podem ser movimentados de
maneira independente:
window
frame
dialog 223
Container - métodos
• add(Component c)
– Adiciona um componente ao container.
• add(Component c, int i)
– Adiciona um componente ao container na posição
indicada pelo segundo parâmetro.
• addContainerListener(ContainerListener c)
– Associa um “ouvinte” de eventos para o
container.
• doLayout( )
– Reorganiza os componentes do container.
224
Container - métodos
• getAlignmentX( )
– Retorna um inteiro correspondente ao alinhamento no
eixo x.
• getAlignmentY( )
– Retorna um inteiro correspondente ao alinhamento no
eixo y.
• getComponent(int i)
– Retorna o componente localizado na posição indicada
pelo parâmetro fornecido.
• getComponentAt(int x, int y)
– Localiza o componente que contêm a posição x,y.
225
Container - métodos
• getComponentCount()
– Retorna o número de componentes inseridos.
• getComponents( )
– Devolve um array contendo todos os componentes
inseridos no container.
• getLayout( )
– Devolve o gerente de layout utilizado pelo container.
• isAncestorOf(Component c)
– Verifica se o componente está contido
hierarquicamente no Container.
• remove(Component c)
– Remove o componente especificado do container. 226
Container - métodos
• remove(int)
– Remove o componente especificado pelo índice do
container.
• removeAll( )
– Remove todos os componentes inseridos.
• setCursor(Cursor c)
– Redefine a imagem associada ao cursor dentro do
container.
• setLayout(LayoutManager l)
– Redefine o gerente de layout para o componente.
• validate( )
– Reorganiza o container e todos os seus componentes. 227
Window
Construtor
Window(Frame f)
229
Window
Método Uso
show( ) Mostra a janela e a coloca na frente das
outras.
dispose( ) Fecha a janela.
toBack( ) Move a janela para traz de outra janela.
toFront( ) Move a janela para frente de outra janela.
pack( ) Redimensiona a janela de tal forma que
todos os seus componentes fiquem com
seus tamanhos “preferidos” ou mínimos.
230
Migrando de AWT para Swing
• A AWT sempre esteve presente na linguagem Java.
Os seus defeitos a muito tempo são bem conhecidos
e os desenvolvedores tem gasto muito tempo e
esforço na criação de componentes para prover
alguma funcionalidade inexistente na AWT para
construir interfaces que atentam às necessidades dos
usuários.
• A meta do projeto Swing foi acrescentar novas
funcionalidades, através de uma biblioteca de
classes, a fim de suprir as demandas dos usuários.
231
O que é o JFC ?
(Java Foundation Class)
232
A estrutura hierárquica AWT e Swing
JWindow
Frame JFrame
Component Container
JLabel
AbstractButton JButton
Jcomponent
JPanel
JRootPane
234
Qual a relação entre JFC e AWT ?
235
Qual a relação entre JFC e AWT ?
236
O que necessito reaprender para
usar os componentes Swing?
237
Os pacotes do Swing
238
Os pacotes do Swing
javax.swing
javax.swing.border
javax.swing.event
javax.swing.plaf
javax.swing.plaf.basic
javax.swing.plaf.metal
javax.swing.plaf.motif
javax.swing.plaf.multi
javax.swing.plaf.windows
javax.swing.preview
javax.swing.table
javax.swing.text
javax.swing.text.html
javax.swing.text.rtf
javax.swing.tree
javax.swing.undo
239
A estrutura hierárquica AWT e Swing
JWindow
Frame JFrame
Component Container
JLabel
AbstractButton JButton
Jcomponent
JPanel
JRootPane
245
Frame
Construtor Operação
246
Frame
Método Uso
getTitle() Retorna um objeto String
contendo o título.
setTitle(String t) Atribui um título, passado como
parâmetro, ao objeto Frame.
getIconImage() Retorna um objeto do tipo Image
contendo a imagem mostrada
quando a janela é iconificada.
setIconImage(Image I) Atruibui uma imagem a ser
mostrada quando a janela é
iconificada. 247
Frame
Método Uso
getMenuBar() Retorna a barra de menu
do Frame
setMenuBar(MenuBar m) Atribui uma barra de menu
ao Frame.
isResizable() Retorna true se o usuário pode
modificar o tamanho do Frame e
false, caso contrário
248
Frame
Método Uso
251
A estrutura de JFrame
JFrame
JRootPane
JLayeredPane
MenuBar (opcional)
GlassPane
ContentPane
252
A estrutura de JFrame
253
A estrutura de JFrame
254
JFrame
• A classe JFrame é ligeiramente incompatível com
java.awt.Frame. JFrame contém a classe JRootPane
como filho único.
• A contentPane deve ser pai de qualquer filho da
classe JFrame. Essa é diferença da java.awt.Frame.
P.ex. para adicionar um filho na Frame da AWT
deve-se escrever:
frame.add(child);
• Contudo, usando a JFrame necessita-se adicionar o
filho ao contentPane da JFrame:
frame.getContentPane().add(child);
255
JFrame
Método Uso
getContentPane( ) retorna o objeto contentPane
para este Frame.
256
JFrame
Método Uso
public void dispose( ) : fecha a janela. Herdado da classe
Window.
public void setDefaultCloseOperation(int operação) : determina a
operação default para quando o usuáro tentar fechar a
janela.
Tipos de operação:
• JFrame.DO_NOTHING_ON_CLOSE (definido em WindowConstants): nada acontece,
pois requer que o programa manipule a operação no método windowClosing do evento
WindowListener registrado pelo objeto que gerou a ação.
• JFrame. HIDE_ON_CLOSE (definido em WindowConstants): automaticamente oculta a
janela após ser invocado qualquer objeto WindowListener. Este é o valor default de JFrame.
• JFrame. DISPOSE_ON_CLOSE (definido em WindowConstants): automaticamente
oculta e descarta a janela após ser invocado qualquer objeto WindowListener.
• JFrame. EXIT_ON_CLOSE (definido em JFrame): automaticamente sai da aplicação
utilizando o método exit( ) da classe System. Aconselha-se que esta operação seja usada apenas
em aplicações. 257
JFrame - exemplo
import javax.swing.*;
public class BasicFrame extends JFrame {
public static void main(String[] args) {
BasicFrame bf = new BasicFrame ("Tela Simples");
}
258
JFrame - resultado
259
JFrame – exemplo 1
import javax.swing.*;
Import java.awt.*;
public class MyJFrame {
tela.setSize(200,200);
tela.setBackground(Color.blue);
tela.setVisible(true);
}
}
260
JFrame – exemplo 2
import java.awt.*;
import javax.swing.*;
public class MyJFrame extends JFrame
{
public static void main (String args[])
{
MyJFrame tela = new MyJFrame();
tela.setTitle ("Tela Exemplo2");
tela.setSize(500,500);
tela.setBackground(Color.green);
tela.setVisible(true);
}
}
261
JFrame – exemplo 3
import java.awt.*;
import javax.swing.*;
public class MyJFrame extends JFrame
{
public static void main (String args[])
{
MyJFrame tela = new MyJFrame("Tela Exemplo 3");
tela.setSize(500,500);
tela.setBackground(Color.lightGray);
tela.setVisible(true);
}
MyJFrame(String titulo)
{
super(titulo);
}
}
262
JFrame – exemplo 4
// Arquivo MyJFrame.java
import java.awt.*;
import javax.swing.*;
public class MyJFrame extends JFrame
{
MyJFrame(String titulo)
{
super(titulo);
setSize(200,200);
setBackground(Color.blue);
setVisible(true);
}
}
// Arquivo ChamaMyJFrame.java
public class ChamaMyJFrame
{
public static void main(String args[])
{
MyJFrame tela = new MyJFrame("Minha Tela");
}
} 263
JFrame – exemplo 5
import java.awt.*;
import javax.swing.*;
public class MyJFrame extends JFrame
{
public static void main (String args[])
{
MyJFrame tela = new MyJFrame();
tela.setTitle ("Tela1 Exemplo 5");
tela.setSize(500,500);
tela.setBackground(Color.green);
tela.setVisible(true);
267
JFrame – exercício
Crie uma classe em java (CandidatoEmprego.java) que
contenha um atributo privado de nome janela (um objeto da
classe JFrame). Esse atributo deverá ser instanciado no
construtor da classe atual:
Título: Candidato a Emprego
Cor de Fundo: (202,202,202)
Dimensão : largura = 510 e altura = 490
Layout: nulo
Resizable: false
A classe CandidatoEmprego deverá conter um método público com a
seguinte assinatura: public void mostraJanela(). Este método se encarregará
de tornar visível o objeto janela para o usuário.
269
JPanel
• A classe JPanel (painel) é uma sub-classe de
JComponent.
• Tem o propósito de agrupar componentes para
serem posteriormente inseridos em outro
container.
• Permitem a criação de layouts sofisticados.
• podem conter componentes incluindo outros
painéis.
• Utiliza o gerente de layout FlowLayout como
padrão.
270
JPanel
Construtor Operação
271
JPanel
272
JPanel - exemplo
import java.awt.*;
import javax.swing.*;
public class PanelDemo {
private JPanel painelAzul;
private JPanel painelVermelho;
private JFrame janelaDemo;
public PanelDemo() {
painelAzul = new JPanel();
painelVermelho = new JPanel();
janelaDemo = new JFrame();
painelAzul.setBackground(Color.blue);
painelVermelho.setBackground(Color.red);
painelAzul.setSize(50,50);
painelVermelho.setSize(100,100);
janelaDemo.getContenPane().setLayout(null);
janelaDemo.setSize(200,200);
janelaDemo.getContentPane().add(painelAzul);
janelaDemo.getContentPane().add(painelVermelho);
painelAzul.setLocation(10,10);
painelVermelho.setLocation(10,70);
janelaDemo.setVisible(true);
}
public static void main(String[] args) {
PanelDemo p = new PanelDemo();
}
} 273
JPanel – exercício (1)
Utilize a classe CandidatoEmprego.java e lhe acrescente 4
atributos privados da classe JPanel. Esses atributos deverão ser
instanciados no construtor da classe atual:
painelIdentificacao:
Cor de Fundo: (202,202,202)
Retângulo:(10,70,480,80)
Layout: nulo
painelCurriculum:
Cor de Fundo: (202,202,202)
Retângulo:(10,155,480,150)
Layout: nulo
274
JPanel – exercício (*2)
painelAreas:
Cor de Fundo: (202,202,202)
Retângulo:(10,310,480,80)
Layout: nulo
painelBotoes:
Cor de Fundo: (87,213,87)
Retângulo:(10, 395, 480,37)
Layout: nulo
*Adicioná-los ao ContentPane.
275
JDialog
276
JDialog
• Caixas de diálogos podem ser modais ou não-modais
– Caixas modais não permitem que outras janelas sejam
acessadas até que a caixa de dialogo seja fechada.
• Ex.: Janela de confirmação de exclusão de arquivos no Windows
Explorer do Windows 9x
– Caixas não-modais permitem que outras janelas sejam
manipuladas concomitantemente a janela de dialogo
• BorderLayout é o gerente de layout usado
implicitamente por caixas de diálogos
• JDialog utiliza uma estrutura de camadas como a
classe JFrame. Assim, ao adicionarmos um
componente, devemos utilizar o ContentPane:
dialog.getContentPane().add(comp1);
277
JDialog
Construtor Operação
JDialog(Dialog f, boolean m)
Constrói uma nova instância de JDialog
inicialmente invisível, definida como modal
caso o parâmetro m seja verdadeiro.
278
JDialog
Construtor Operação
JDialog(Frame f, boolean m)
Constrói uma nova instância de JDialog
inicialmente invisível, definida como modal
caso o parâmetro m seja verdadeiro.
279
JDialog
Método Uso
isModal() Retorna verdadeiro se o objeto
JDialog questionado for modal.
280
JDialog - exercício
Complementando o exercício CandidatoEmprego, crie uma
classe em java (DocumentosEntregues.java) que seja subclasse
de JDialog. Todas as características devem ser definidas no
construtor da classe atual:
281
JDialog – exercício (interface final)
(complementar ao exercício CandidatoEmprego.java)
282
Imagens nos componentes: ícones
• O Swing inclui a implementação do ícone
através da classe ImageIcon, que permite
associar imagens a objetos Jcomponent. A
ImageIcon possui vários construtores, seguem
três deles:
public JLabel( )
public JLabel (String s)
public JLabel (String s, int alignment)
public JLabel(String text, Icon icon,int horizontalAlignment)
public JLabel(Icon icon, int horizontalAlignment)
Constantes de alinhamento:
– SwingConstants.LEFT
– SwingConstants.CENTER
– SwingConstants.RIGHT
285
JLabel - métodos
• public String getText()
– retorna o texto do rótulo.
• public void setText(String s)
– coloca o texto s no rótulo.
• public void setAlignment (int alignment)
– alinha o texto do rótulo conforme as constantes
de alinhamento vistas anteriormente.
• public void setVerticalTextPosition(int textPosition)
– especifica a posição do texto com relação à
imagem(TOP, CENTER (default)ou BOTTOM).
• public void getVerticalTextPosition( )
• public void setHorizontalTextPosition(int textPosition)
– especifica a posição do texto com relação à
imagem(LEFT, CENTER, RIGHT).
• public void getHorizontalTextPosition( )
286
JLabel - exemplo
import java.awt.*;
import javax.swing.*;
public class TesteLabel
{
public static void main(String[] args)
{
JFrame fr = new JFrame();
JLabel lb = new JLabel(“Texto em baixo”,
new ImageIcon(“duke.gif”),
SwingConstants.LEFT);
lb.setHorizontalTextPosition(SwingConstants.CENTER);
lb.setVerticalTextPosition(SwingConstants.BOTTOM);
fr.getContentPane().add(lb);
fr.pack();
fr.setVisible(true);
}
} 287
JLabel - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 5
atributos privados da classe JLabel. Esses atributos deverão ser
instanciados no construtor da classe atual:
jlCabecalho : título “Ficha de Avaliação”, alinhamento CENTER, cor de frente azul,
retângulo (130, 20, 250, 25) e fonte ("Arial", negrito, 18). Adicionar ao ContentPane.
jlNome : título “Nome”, alinhamento LEFT, cor de frente default, retângulo (15, 20,
40, 20) e fonte ("Arial", negrito, 12). Adicionar ao painelIdentificacao.
jlSexo: título “Sexo”, alinhamento LEFT, cor de frente default, retângulo (15, 45, 40,
20) e fonte ("Arial", negrito, 12). Adicionar ao painelIdentificacao.
jlInteresse: título “Interesse”, alinhamento LEFT, cor de frente default, retângulo (60,
10, 150, 20) e fonte ("Arial", negrito, 12). Adicionar ao painelAreas.
jlAtuacao: título “Atuação”, alinhamento LEFT, cor de frente default, retângulo (270,
10, 150, 20) e fonte ("Arial", negrito, 12). Adicionar ao painelAreas.
288
JTextComponent
289
JTextComponent - métodos
290
JTextComponent - métodos
291
JTextComponent - métodos
292
JTextField
293
JTextField - construtores
• public JTextField()
– constrói um objeto do tipo campo de texto.
• public JTextField(int colunas)
– constrói um objeto campo de texto vazio com o número
especificado de colunas.
• public JTextField(String texto)
– constrói um objeto campo de texto com o texto fornecido
no parâmetro texto.
• public JTextField(String s, int colunas)
– constrói um objeto campo de texto com o texto fornecido
no parâmetro texto com o número especificado de colunas.
294
JTextField - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 1
atributo privado da classe JTextField. Esse atributo deverá ser
instanciado no construtor da classe atual:
295
JTextArea
296
JTextArea - construtores
public JTextArea( )
– constrói um objeto do tipo campo de texto com possibilidade para
várias linhas.
298
JTextArea - exemplo
import java.awt.*;
import javax.swing.*;
public class TextAreaDemo
{
public TextAreaDemo()
{
JLabel lNome = new JLabel("Observação:");
JTextArea tArea = new JTextArea("",5,30);
JScrollPane sp = new JScrollPane(tArea,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JPanel painelLabel = new JPanel();
JFrame janelaDemo = new JFrame();
painelLabel.add(lNome );
painelLabel.add(sp );
janelaDemo.getContentPane().add(painelLabel);
janelaDemo.pack();
janelaDemo.setVisible(true);
}
public static void main(String[] args)
{
TextAreaDemo t = new TextAreaDemo();
}
}
299
JTextArea - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 1
atributo privado da classe JTextArea. Esse atributo deverá ser
instanciado no construtor da classe atual:
Viewport (onde é
feita a rolagem do
objeto)
A linha Rolagem
header vertical
Rolagem horizontal
cantos 302
JScrollPane
Construtor
JScrollPane() cria um JScrollPane vazio (nenhuma viewport)
onde as áreas de scrollbar horizontal e vertical
aparecem quando necessário.
JScrollPane(Component view)
cria um JScrollPane que exibe o conteúdo de
um componente específico, onde os scrollbars
horizontal e vertical aparecem quando o
conteúdo do componente é maior do que o
campo de visão.
303
JScrollPane
Construtor
304
JScrollPane
Constantes
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
JScrollPane.VERTICAL_SCROLLBAR_NEVER
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
305
JScrollPane
Métodos
setHorizontalscrollBarPolicy (int policy)
determina quando a scrollbar horizontal
aparecerá na scrollpane.
setVerticalscrollBarPolicy (int policy)
determina quando a scrollbar veritcal
aparecerá na scrollpane.
setViewportView(Component view)
Creates a viewport if necessary and then
sets its view.
306
JScrollPane - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 1
atributo privado da classe JScrollPane. Esse atributo deverá ser
instanciado no construtor da classe atual com os parâmetros:
jspCurriculum: (jtaCurriculum,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS),
posição (10, 20) e dimensão (460, 120) .
Adicionar ao painelCurriculum.
307
Botões
308
JButton
É subclasse de AbstractButton e Jcomponent.
• public JButton( )
– constrói um objeto do tipo Botão sem texto.
• public JButton(String texto)
– constrói um objeto Botão com o texto especificado .
• public JButton(Icon icon)
– constrói um objeto Botão com o ícone especificado.
• public JButton(String texto, Icon icon)
– constrói um objeto Botão com o texto especificado.
309
JButton - métodos
• getText()
– retorna o String representando o texto vinculado ao botão.
• setText(String s)
– define um texto para representar o botão.
• getIcon()
– retorna o ícone vinculado ao botão.
• setIcon(Icon icon)
– define um ícone para ser mostrado pelo botão.
310
JButton - métodos
• setDisabledIcon(Icon icon)
– atribui o ícone a ser exibido quando o botão for inibido.
• setPressedIcon(Icon icon)
– atribui o ícone a ser exibido quando o botão for pressionado.
• setSelectedIcon(Icon icon)
– atribui o ícone a ser exibido quando o botão for selecionado.
• setRolloverIcon(Icon icon)
– atribui o ícone a ser exibido quando o botão for selecionado.
311
JButton – exemplo
import java.awt.*;
public class ButtonDemo
{
private Button[] botoes;
private Frame janelaDemo;
public ButtonDemo()
{
janelaDemo = new Frame(“Botões”);
janelaDemo.setLayout(new FlowLayout());
botoes = new Button[5];
for(int i = 0; i< botoes.length;i++)
{
botoes[i] = new Button(“Botão “+i);
janelaDemo.add(botoes[i]);
}
janelaDemo.pack();
}
public void mostraExemplo()
{
janelaDemo.setVisible(true);
}
public static void main(String[] args)
{
ButtonDemo t = new ButtonDemo();
t.mostraExemplo();
}
} 312
JButton - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 3
atributos privados da classe JButton. Esses atributos deverão ser
instanciados no construtor da classe atual com os parâmetros:
jbDocumentosEntregues:texto “Documentos
Entregues”, retângulo (20,6,200,25) e
ToolTipText("Clique aqui para acessar a tela
de Documentos Entregues"). Adicionar ao
painelBotoes.
jbSalva: texto “Salva” e retângulo
(240,6,100,25). Adicionar ao painelBotoes.
jbCancela: texto “Cancela” e retângulo
(360,6,100,25). Adicionar ao painelBotoes.
313
JRadioButton
314
JRadioButton
import java.awt.*;
import javax.swing.*;
public class MeuRadioButton extends JFrame
{
public static void main(String args[])
{
MeuRadioButton window = new MeuRadioButton ();
JPanel p = new JPanel();
window.getContentPane().add(p);
JRadioButton masculino = new JRadioButton(
"Masculino" );
p.add( masculino );
JRadioButton feminino = new JRadioButton( "Feminino" );
p.add( feminino );
ButtonGroup grupo = new ButtonGroup ();
grupo.add(masculino);
grupo.add(feminino);
window.pack();
window.setVisible(true);
} 315
}
JRadioButton - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 3 atributos
privados: 2 da classe JRadioButton e outro da classe ButtonGroup .
Esses atributos deverão ser instanciados no construtor da classe atual
com os parâmetros:
jrbfeminino: texto “Feminino”,
retângulo(65,45,150,20) e selecionado =
true. Adicionar ao painelIdentificacao e
ao bgGrupoSexo.
jrbMasculino: texto “Masculino” e
retângulo(220,45,150,20). Adicionar ao
painelIdentificacao e ao bgGrupoSexo.
bgGrupoSexo: adicionar-lhe os objetos
jrbFeminino e jrbMasculino. NÃO
adicionar a nenhum painel. 316
JCheckBox
318
JCheckBox - exemplo
import java.awt.*;
import javax.swing.*;
public class MeuCheckbox extends JFrame
{
public static void main(String args[])
{
MeuCheckbox window = new MeuCheckbox();
JPanel p = new JPanel();
window.getContentPane().add(p);
JCheckBox negrito = new JCheckBox( "Negrito" );
p.add( negrito );
JCheckBox italico = new JCheckBox( "Itálico" );
p.add( italico );
window.pack();
window.setVisible(true);
}
} 319
JCheckBox - exercício
Utilize a classe DocumentosEntregues.java e lhe acrescente 5
atributos privados da classe JCheckBox (não agrupados). Esses
atributos deverão ser instanciados no construtor da classe atual e
adicionados ao ContentPane correspondente:
jcbDoc1: texto “Carteira de Identidade e CPF”, ativo = true,
cor de fundo (255,204,0), cor de frente preta,
retângulo(10,20,270,45).
jcbDoc2: texto “Carteira de Trabalho”, ativo = false, cor de
fundo default, cor de frente preta, retângulo(10,65,270,45).
jcbDoc3: texto “Curriculum resumido e Comprovantes”,
ativo = false, cor de fundo (255,204,0), cor de frente preta,
retângulo(10,110,270,45).
jcbDoc4: texto “Foto 3x4”, ativo = true, cor de fundo
default, cor de frente preta, retângulo(10,155,270,45).
jcbDoc5: texto “Proposta de Trabalho”, ativo = true, cor de
fundo (255,204,0), cor de frente preta,
retângulo(10,200,270,45).
320
JComboBox
322
JComboBox
Construtores
• public JComboBox(ComboBoxModel aModel)
– Cria um objeto JComboBox que recebe seus itens de um ComboBoxModel
previamente definido.
• public JComboBox(Object[] items)
• public JComboBox()
– Cria um objeto JComboBox com um modelo de dados padrão (uma lista de
objetos vazia). 323
JComboBox
Métodos
• public void setModel(ComboBoxModel aModel)
– Redefine o modelo de dados que o JComboBox utilizará.
• public ComboBoxModel getModel()
– Resgata o modelo de dados que o JComboBox está utilizando.
• public void setEditable(boolean aFlag)
– Faz com que o JCombobox se comporte como um JTextField,
possibilitando a edição ou seleção dos elementos cadastrados. (a edição não
afeta a massa de dados, apenas o campo)
• public boolean isEditable()
– Informa se o objeto JComboBox está editável ou não.
• public void setMaximumRowCount(int count)
– Define o número máximo de linhas que o JComboBox irá mostrar.
• public int getMaximumRowCount()
– Informa o máximo de linhas que o JComboBox poderá mostrar.
324
JComboBox
Métodos
• public void setSelectedItem(Object anObject)
– Seleciona um determinado objeto da lista no JComboBox.
• public Object getSelectedItem()
– Retorna o item correntemente selecionado.
• public void setSelectedIndex(int anIndex)
– Seleciona um determinado objeto da lista no JComboBox através do seu
valor posicional.
• public int getSelectedIndex()
– Retorna o posicional do item correntemente selecionado.
• public void addItem(Object anObject)
– Adiciona um elemento na lista padrão (usado quando o JComboBox é
criado com construtor vazio).
325
JComboBox
Métodos
• public void insertItemAt(Object anObject, int index)
– Insere um elemento na lista padrão na posição informada pelo índice
(usado quando o JComboBox é criado com construtor vazio).
• public void removeItem(Object anObject)
– Remove o elemento na lista padrão (usado quando o JComboBox é
criado com construtor vazio).
• public void removeItemAt(int anIndex)
– Remove o elemento do índice informado na lista padrão (usado quando o
JComboBox é criado com construtor vazio).
• public void removeAllItems()
– Remove todos elementos da lista padrão (usado quando o JComboBox é
criado com construtor vazio).
326
JComboBox
Métodos
• public void setEnabled(boolean b)
– Define se o objeto poderá ser manipulado pelo usuário.
• public int getItemCount()
– Retorna o número de elementos no objeto JComboBox.
• public Object getItemAt(int index)
– Retorna o objeto referente ao elemento posicionado no índice fornecido.
327
JComboBox - exemplo
import javax.swing.*;
import java.awt.*;
public class ExemploJComboBox {
public ExemploJComboBox() {
JFrame f = new JFrame("Exemplo ExemploJComboBox");
JComboBox comboBox = new JComboBox();
comboBox.addItem("Consulta Conta Corrente");
comboBox.addItem("Extrato Conta Corrente");
comboBox.addItem("Consulta Cartão de Crédito");
comboBox.setBounds(10,10,200,30);
f.getContentPane().setLayout(null);
f.getContentPane().add(comboBox);
f.setSize(300,100);
f.setVisible(true);
}
public static void main(String args[]) {
ExemploJComboBox e = new ExemploJComboBox();
}
}
328
JComboBox – exemplo com array
import javax.swing.*;
import java.awt.*;
public class ExemploJComboBoxArray {
public ExemploJComboBoxArray() {
JFrame f = new JFrame("Exemplo com Array");
String[] dados = {"Melancia", "Abacate", "Melão" };
JComboBox comboBox = new JComboBox(dados);
comboBox.setBounds(10,10,200,30);
f.getContentPane().setLayout(null);
f.getContentPane().add(comboBox);
f.setSize(300,100);
f.setVisible(true);
}
public static void main(String args[]) {
ExemploJComboBoxArray e = new ExemploJComboBoxArray();
}
329
}
JComboBox - ComboBoxModel
• Conforme demonstrado nos exemplos anteriores, um objeto
JComboBox pode ser utilizado de forma semelhante ao objeto Choice
do pacote AWT (recebendo elementos um a um) ou recebendo uma
coleção de objetos via vetor ou array de objetos. Outra forma de se
utilizar um objeto JComboBox é através da criação de um modelo de
dados que se associa à classe JComboBox via método construtor -
public JComboBox(ComboBoxModel aModel) - ou por uma
chamada ao método:
public void setModel(ComboBoxModel aModel).
330
JComboBox - ComboBoxModel
Métodos
• public int getSize()
– Deverá ser implementado para retornar o número de elementos
da coleção de dados.
• public Object getElementAt(int index)
– Deverá retornar o objeto na posição informada pelo índice.
• public void setSelectedItem(Object anItem)
– Deverá marcar o elemento como selecionado.
• public Object getSelectedItem()
– Deverá devolver o elemento que foi previamente selecionado.
331
JComboBox - exercício
Utilize a classe CandidatoEmprego.java e lhe acrescente 2
atributos privados da classe JComboBox. Esses atributos
deverão ser instanciados no construtor da classe atual com os
parâmetros:
jcbInteresse: cor de fundo branca,
retângulo(60,30,150,25), fonte
("TimesRoman",Font.ITALIC,12) e
ToolTipText("Escolha a Área de Interesse").
Adicionar as Strings ("Professor", "Gerente",
"Desenvolvedor" e “Outra”). Adicionar ao
painelAreas.
jcbAtuacao: cor de fundo branca, retângulo
(270,30,150,25) e fonte
("TimesRoman",Font.ITALIC,12). Adicionar
as Strings ("Informática", "Matemática",
"Biologia" e “Outra”). Adicionar ao
painelAreas.
332
Criando Menus *LFSC*
Fonte : http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html
333
JMenuBar *LFSC*
334
JMenuItem *LFSC*
Construtores__________________
JMenuItem( ) Cria um item de menu.
JMenuItem(String s) Cria um item de menu com o
texto especificado.
JMenuItem(String s, Icon i) Cria um item de menu com o
texto e ícone especificados.
JMenuItem(String s, int mnemonic) Cria um item de menu
com o texto e mnemônico especificados.
335
JMenuItem *LFSC*
336
JMenu *LFSC*
338
JMenuBar e JMenu - exercício *LFSC*
339
JMenuItem - exercício 1 *LFSC*
jmiSobre: texto
“Sobre a Aplicação”
e ícone “tips.gif”.
343
Border
345
BorderFactory
static Border createEmptyBorder()
static Border createEtchedBorder()
static Border createLineBorder(Color color)
static Border createLoweredBevelBorder()
static Border createRaisedBevelBorder()
static TitledBorder createTitledBorder(Border
border)
static TitledBorder createTitledBorder(Border
border, String title)
static CompoundBorder createCompoundBorder(
Border outsideBorder, Border insideBorder)
346
Etapas na utilização de bordas
1. Criar o objeto visual que conterá a borda:
JPanel painelComBorda = new JPanel();
350
A classe JOptionPane
• Através da classe JOptionPane é fácil exibir uma
caixa de diálogo padrão que induza o usuário a um
valor ou o informa de alguma coisa.
• A classe aparenta ser complexa devido ao grande
número de métodos, porém a quase totalidade das
chamadas é constituída de métodos estáticos.
• Na sua forma mais básica, ela exibe uma linha de
mensagem e um botão rotulado com “OK”.
• Uma vez que o diálogo tenha sido exibido, ele fica
na tela até o usuário pressionar o botão “OK”.
Enquanto o diálogo continuar na tela, o usuário
não poderá interagir com mais nada na aplicação.
351
A classe JOptionPane
• A aparência de uma das caixas de diálogo é
similar à figura abaixo:
título da janela
mensagem
ícone
valor de entrada
botões opcionais
352
A classe JOptionPane
Constantes para tipos de mensagens:
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE
Constantes para opções de botões:
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
Constantes inteiras de retorno:
JOptionPane.YES_OPTION
JOptionPane.NO_OPTION
JOptionPane.CANCEL_OPTION
JOptionPane.OK_OPTION
JOptionPane.CLOSED_OPTION 353
JOptionPane - exemplos 1
354
JOptionPane - exemplo 2
Mostra um diálogo de aviso com opções OK e CANCELA:
Assinatura do método:
showOptionDialog(Component parent, Object mensagem,
String título, int optionType,
int messageType, Icon icone,
Object[] options,
Object intialValue).
355
JOptionPane - exemplos 3
356
JFileChooser (tópico extra)
365
Gerenciadores de Layout
366
Escolhendo um gerenciador de layout
• Se você precisa mostrar alguns componentes utilizando os
seus tamanhos naturais em uma linha, então use o
FlowLayout.
• Se você precisa mostrar componentes de mesmo tamanho
em linhas e colunas, então use o GridLayout.
• Se você precisa mostrar painéis alternativamente, então
use o CardLayout.
• Se você precisa mostrar componentes e espalhá-los
utilizando todo espaço disponível, então utilize o
BorderLayout ou GridBagLayout.
367
Gerenciadores de layout - regras gerais
• Cada container tem um gerenciador de layout default:
– JPanel (incluindo JApplet) → FlowLayout
– Window → BorderLayout
– JMenuBar → BoxLayout
• Para utilizar um gerenciador de layout diferente do default,
você precisa criar uma instância do gerenciador de layout
desejado e avisar ao container para usá-lo:
aContainer.setLayout(new CardLayout());
ou
CardLayout meuCardLayout = new CardLayout();
aContainer.setLayout(meuCardLayout);
ou
aContainer.setLayout(null); //sem gerenciador
368
Gerenciadores de layout - regras gerais
• Os métodos add, remove e removeAll (que adiciona e
removem componentes) podem ser utilizados a qualquer
momento.
• Se você muda o tamanho de um componente indiretamente
(por exemplo, mudando a sua Font), então você deverá
invocar o método invalidate para o componente e,
logo, após invocar o método validate para o container.
• Os métodos getPreferredSize e
getMinimumSize podem retornar valores sem
significado (os seus valores são válidos somente após o
componente ter sido mostrado a primeira vez).
369
Gerenciadores de layout - curiosidades *LFSC*
375
GridLayout
378
GridLayout - exercício 2
379
BorderLayout
382
BorderLayout - exercício 2
• Crie um JFrame com 5 botões gerenciados por um
BorderLayout, onde os botões estejam separados por
5 pixels.
• Quando o usuário clica em um botão, o mesmo se
torna invisível, e o botão invisível (se houver algum)
se torna visível.
• Dica: o método validate deve ser chamado
sempre que os botões se tornam visíveis ou invisíveis.
383
Gerenciadores de layout – exercício geral *LFSC*
public ExemploCardLayout() {
setLayout(new BorderLayout());
Panel choicePanel = new Panel();
paineisAlternativos.setLayout(new CardLayout());
paineisAlternativos.add(botoes, alt1);
paineisAlternativos.add(texto, alt2);
add("Center", paineisAlternativos);
}
387
CardLayout - exemplo - cont.
389
GridBagLayout
390
GridBagLayout - exemplo
. . . (atribui as restrições)
391
GridBagConstraints
392
GridBagConstraints
• Usar GridBagConstraints.REMAINDER para
especificar que o componente é o último da linha ou
coluna.
c.gridwidth = GridBagConstraints.REMAINDER;
393
GridBagConstraints
394
8 - Eventos AWT
395
O que são eventos?
actionPerformed (ActionEvent e)
{
BOTÃO ……
}
botao.addActionListener(action listener)
Tipo do Evento
(ex. Action event)
…
Lista de eventos registrados
(EventListenerList)
398
Modelo de delegação – possibilidades *LFSC*
401
Alguns dos eventos gerados pelos componentes AWT/Swing
button
checkbox
combo box
Component
Container
dialog
frame
label
list
menu item
panel
radio button
scrollbar
text area
text field
window
403
Interface de eventos listener AWT (1)
405
A hierarquia de classes de eventos
AWT
• A classe AWTEvent
Cada método de cada interface “listener” dos eventos na
AWT possui um único argumento: uma instância de uma
classe que descende da classe java.awt.AWTEvent.
Essa classe não define nenhum método ou API que o usuário,
usualmente, necessite. Contudo, herda um método muito útil
da classe java.util.EventObject:
Object getSource( ): retorna o objeto (do tipo Object) que gerou o
evento.
Sempre que possível, as subclasses da AWTEvent definem métodos
similares que retornam tipos mais restritivos. Por exemplo, na classe
ComponentEvent existe o método getComponent( ) que retorna o
componente que gerou o evento.
406
A hierarquia de classes de eventos
AWT
ja v a . la n g . O b je t
ja v a . u t il.E v e n t O b je c t
A W TEvent
A c t io n E v e n t A d ju s t m e n t E v e n t C o m p o n e n tE v e n t Ite m E v e n t T e x tE v e n t
C o n t a in e r E v e n t FocusEvent In p u tE v e n t W in d o w E v e n t
K e yE ve nt M ouseEvent
407
As 4 maneiras de implementar um
evento (1) *LFSC*
– void windowClosed(WindowEvent)
• é chamado pela AWT após a janela tiver sido fechada.
– void windowIconified(WindowEvent)
– void windowDeiconified(WindowEvent)
• é chamado pela AWT assim que a janela tenha sido
iconizada ou deiconizada.
– Void windowActivated(WindowEvent)
– void windowDeactivated(WindowEvent)
• é chamado pela AWT assim que a janela tenha sido
ativada ou desativada.
412
WindowListener – exemplo
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WindowListenerDemo {
public static void main (String args[])
{
JFrame j = new JFrame("Evento de Janela");
j.setSize(200,200);
j.addWindowListener (new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); //classe anônima interna de tratamento do evento
j.setVisible(true);
}
}
413
A classe WindowEvent
414
WindowListener - exercício LFSC*
*
419
A classe ActionEvent
int getModifiers( )
• retorna um inteiro associado com a chave que foi
pressionada pelo usuário quando o evento ocorreu.
Pode-se usar as constantes definidas na classe
ActionEvent: SHIFT_MASK, CRTL_MASK,
META_MASK e ALT_MASK para determinar
qual chave foi pressionada.
420
ActionListener para texto
421
ActionListener para texto – exemplo (1)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionListenerDemo extends JFrame {
JTextField textField;
JTextArea textArea;
String newline;
public ActionListenerDemo() {
textField = new JTextField(20);
textArea = new JTextArea(5,20);
textArea.setBackground(Color.blue);
textArea.setEditable(false);
Container c = getContentPane();
c.add(textField, BorderLayout.NORTH);
c.add(textArea, BorderLayout.CENTER);
textField.addActionListener(new MeuEvento());
newline = System.getProperty("line.separator");
}
422
ActionListener para texto – exemplo (2)
423
ActionListener – exercício 1 *LFSC*
424
ActionListener – exercício 2 *LFSC*
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ItemListenerDemo implements ItemListener {
JComboBox lista;
JLabel label;
JFrame fr;
public ItemListenerDemo() {
fr = new JFrame("teste de ItemListener");
Container c = fr.getContentPane();
lista = new JComboBox();
lista.addItem("primeiro");
lista.addItem("segundo");
lista.addItem("terceiro");
lista.addItem("quarto");
lista.addItemListener(this);
label = new JLabel();
setLabelText(lista.getSelectedIndex(),
lista.getSelectedItem().toString());
428
ItemListener – exemplo 1 (*2)
c.add(lista,BorderLayout.CENTER);
c.add(label,BorderLayout.SOUTH);
fr.pack();
fr.setVisible(true); }
void setLabelText(int num, String text) {
label.setText("Item #" + num + " selecionado. "
+ "Texto = \"" + text + "\"."); }
public void itemStateChanged(ItemEvent e) {
setLabelText(lista.getSelectedIndex(),
lista.getSelectedItem().toString()); }
public static void main(String args[]) {
ItemListenerDemo demo = new ItemListenerDemo(); }
} 429
ItemListener – exemplo 2 (1)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ItemListenerDemo extends JFrame
implements ItemListener {
JPanel cards;
final static String BUTTONPANEL = "Painel com botão";
final static String TEXTPANEL = "Painel com texto";
public ItemListenerDemo() {
getContentPane().setLayout(new BorderLayout());
setFont(new Font ("SansSerif", Font.PLAIN, 14));
JPanel cp = new JPanel();
Choice c = new Choice();
c.add (BUTTONPANEL);
c.add(TEXTPANEL);
c.addItemListener(this);
cp.add(c);
getContentPane().add(cp, BorderLayout.NORTH);
cards = new JPanel();
cards.setLayout(new CardLayout());
JPanel p1 = new JPanel();
430
ItemListener – exemplo 2 (2)
432
9 - Applet
433
Applet - ordem de inicialização
434
Applet - exemplo
import java.applet.*;
import java.awt.*;
import java.awt.Graphics;
public class TesteApplet extends Applet
{
StringBuffer mensagem;
int cont;
public void init() {
mensagem = new StringBuffer();
adicionaMsg("entrou no init() "); }
public void start() {
cont = cont + 1;
adicionaMsg("entrou no start() "
+ cont + " ");
} //Continua …
435
Applet - exemplo
}
} //Fim.
436
Applet e HTML
437
Applet e HTML
No código HTML:
< param name=parTipo value=intranet >
< param name=parValor value=50 >
No código da Applet:
String tipo = getParameter(“parTipo”);
int valor = (new Integer (getParameter("parValor")))
.intValue();
438
Applet e URL
import java.net.URL;
. . .
getAppletContext().showDocument(new URL(url, opção)
onde opção:
• _self: mostrar no frame atual
• _parent: mostrar no frame-pai
• _top: mostrar no primeiro frame
• _blank: mostrar em uma nova janela do browser
439
Bibliografia
Cornell, Gary. Core Java; tradução Daniel Vieira; revisão técnica Rodrigo
Rodrigues. São Paulo, Makron Books, 1997.
Eckel, Bruce. Thinking in Java. Prentice Hall PTR, USA, 1998.
Campione, Mary. The Java Tutorial: object-oriented programming for the
internet. Addison Wesley Longman, California- USA, 1998.
Deitel, H. M.;Deitel, P. J. Java, Como Programar. 3a. edição – Porto Alegre:
Bookman, 2001.
Java Tutorial : http://java.sun.com/docs/books/tutorial/java/TOC.html#nutsandbolts.
JAVA Swing (JFC) : http://java.sun.com/docs/books/tutorial/uiswing/TOC.html#start.
JAVADOC: http://java.sun.com/j2se/1.4/docs/api/index.html.
Classes Essenciais Java: http://java.sun.com/docs/books/tutorial/essential/TOC.html.
JAVA WORLD e CORE JAVA: http://www.javaworld.com/channel_content/jw-core-index.shtml.
440