Você está na página 1de 440

Linguagem de Programação

Orientação a Objetos
Linguagem Java
UNICEUB

Jorge Farias

Mar/2008

1
Objetivo Geral

• Ao final do curso, o aluno estará


desenvolvendo aplicações visuais que
podem ser distribuídas pela internet,
utilizando os conceitos de orientação a
objetos com a linguagem Java.

2
Objetivos Específicos

• Utilizar o ambiente de desenvolvimento da


linguagem Java.
• Identificar e utilizar os principais componentes
da linguagem Java.
• Desenvolver aplicações na linguagem Java.

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

• Manipulação de Array, Integer e String


Classe Integer
Array
String
Conversão de tipos
StringBuffer

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

• Interfaces gráficas em Java


Visão geral da AWT e SWING
Hierarquia
Usando cada um dos seus componentes

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

• Instalar o JDK apropriado para o seu ambiente. A


última versão homologada encontra-se em:
www.javasoft.com
www.java.sun.com
www.sunsoft.com
• Inicializar apropriadamente as variáveis de ambiente. Para
a versão j2sdk1.6.0, segue:

 SET PATH=C:\J2SDK1.6.0\BIN; %PATH%


 SET CLASSPATH=J2SDK1.6.0\JRE\LIB\RT.JAR;%CLASSPATH%;.

10
O que é JAVA?

• Uma linguagem de programação


É o resultado da pesquisa por uma linguagem de
programação que provesse o poder da linguagem
C++e a segurança de SmallTalK.
• Um ambiente de desenvolvimento
• Uma ambiente para construir aplicações

11
As principais metas

• Criar-se uma linguagem orientada a objeto.


• Prover uma ambiente interpretado, por duas
razões:
Velocidade de desenvolvimento - elimina o ciclo
compila-linkedita-carrega-testa.
Portabilidade do código - um ambiente interpretado
que faz chamadas específicas a nível de sistema
operacional, para alguns procedimentos, em tempo
de execução.

12
As principais metas – cont.

• Eliminar práticas de codificação que afetam a


robustez do código:
Aritmética de ponteiros
Alocação e desalocação de memória
• Prover um maneira do programa executar mais
de “thread de atividade” ao mesmo tempo.

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

• Interfaces bem definidas


• Reusabilidade
15
Suporte a Redes

TCP/IP FTP
HTTP URL

• Bibliotecas padronizadas com suporte para protocolos


• Facilidade de interconexão
• Fácil acesso a recursos remotos

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

Máquina virtual JAVA


18
Programação Concorrente

Processo • Múltiplas linhas de controle


• Máquinas paralelas
• paralelismo
• Máquinas convencionais
Linhas de controle • concorrência
• Primitivas de sincronização

19
A arquitetura Java

• A máquina virtual Java (JVM)


É uma máquina imaginária que é implementada
pela emulação de um software sobre uma máquina
real.
Prover uma especificação de plataforma de
hardware no qual todos os códigos java são
compilados. Essa especificação torna os programas
java independente de plataforma porque toda
compilação é feita para uma máquina imaginária.

20
A arquitetura Java

• O coletor de lixo (“Garbage Collector”)


É um processo executado em background a nível de
sistema operacional que registra toda memória
alocada e mantém um contagem do número de
referências para cada ponto da memória.
A JVM (“thread” em background) de tempos em
tempos verifica se há na memória alguma referência
com valor 0, procedendo então a desalocação da
mesma.

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

Em alguns ambientes de execução do java,


uma porção do código binário verificado são
compiladas para código nativo da máquina e
é executado diretamente no hardware da
plataforma alvo (JIT).

Nota: Todas os arquivos classe que são


importados da internet são verificados pelo
verificador de código binário.

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

O JDK pode ser copiado de:

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

// Comentario de uma linha

public class HelloInternet


{
public static void main (String args[])
{
System.out.println("Hello Internet!");
}
}

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

Comentários em Java seguem a mesma sintaxe


de C++, “//” inicia uma linha de comentário,
todo o restante da linha é ignorado. Existe
também um outro tipo de comentário formado
por /* Insira aqui o texto a ser ignorado */ , este
tipo de comentário pode ser intercalado em uma
linha de código. Comentários são tratados como
espaços em branco.

30
public class HelloInternet

• class é a palavra reservada que marca o inicio


da declaração de uma classe.
• public é um especificador, por enquanto guarde
public class como o início da declaração de uma
classe. Toda classes serão declaradas assim por
enquanto.

31
HelloInternet

• É o nome dado a esta classe. O “abre chaves”


marca o início das declarações da classe que são
os atributos e métodos. Esta classe só possui uma
declaração, a do método main, note que um
método, ao contrário de C++, só pode ser
declarado {internamente} a classe a qual pertence,
evitando as confusões sobre “escopo”. Desta
forma, todo pedaço de código em Java deve
pertencer ao abre chaves, fecha chaves da
definição de uma classe.

32
O trecho do programa

public static void main (String args[])


{
System.out.println("Hello Internet!");
}

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

• É um outro qualificador ou “specifier”, que indica que o


método deve ser compartilhado por todos os objetos que
são criados a partir desta classe.
• Os métodos static podem ser invocados, mesmo
quando não foi criado nenhum objeto para a classe, para tal
deve-se seguir a sintaxe:
<NomeClasse>.<NomemetodoStatic>(argumentos);.
Retornaremos a esta explicação mais tarde, por hora você
precisa saber que particularmente o método main precisa
ter essa qualificação porque ele é chamado sem que se crie
nenhum objeto de sua classe (a classe HelloInternet).

34
void

• Semelhante ao void C++ ou C, é o valor


de retorno da função, quando a função não
retorna nenhum valor ela retorna void,
uma espécie de valor vazio que tem que ser
especificado.

35
main

• Este é um nome particular de método que


indica para o compilador o início do
programa;
• É dentro deste método e através das
iterações entre os atributos, variáveis e
argumentos visíveis nele que o programa se
desenvolve.

36
(String args[])

• É o argumento do método main e por


consequência do programa todo, ele é um vetor de
Strings que é formado quando são passados
ou não argumentos através da invocação do nome
do programa na linha de comando do sistema
operacional, exemplo:
Java HelloInternet argumentotexto1 argumentotexto2

37
{ ... }

• “Abre chaves” e “fecha chaves”. Para


quem não conhece C ou C++, eles podem
ser entendidos como algo semelhante ao
BEGIN END de Pascal, ou seja: delimitam
um bloco de código.

38
System.out.println("Hello Internet!");

• Chamada do método println para o atributo


out da classe System, o argumento é uma
constante do tipo String para imprimir a cadeia
“Hello Internet!” e posicionar o cursor na linha
abaixo.
• Por hora guardar esta linha de código como o
comando para imprimir mensagens na tela, onde o
argumento que vem entre aspas é a String a ser
impressa.

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

A região reservada O botão OK permite o usuário


ao diálogo de mensagem fechar a caixa de diálogo

40
Tipos de diálogo de mensagem
Tipo Ícone Descrição

JOptionPane.ERROR_MESSAGE Exibe um diálogo que indica um


erro.

JOptionPane.INFORMATION_ MESSAGE i Exibe um diálogo informacional.

JOptionPane.WARNING_MESSAGE
! Exibe um diálogo de advertência.

Exibe um diálogo que impõe uma


JOptionPane.QUESTION_MESSAGE ? pergunta ao usuário. Em botões
Yes ou NO.

JOptionPane.PLAIN_MESSAGE Sem Exibe um diálogo somente com


ícone mensagem.
41
Primeiro programa gráfico
• O código fonte:

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

• Há três formas de inserir comentários:


// comentários em uma linha
/* comentários em uma ou mais linhas */
/** documentando comentários */
 quando colocado Imediatamente antes da declaração (de
uma função ou variável), indica que o comentário poderá
ser incluído automaticamente em uma página html (gerado
pelo comando javadoc).

47
Descritores do javadoc

@param <nome> <Descrição do parâmetro>


Obs.: (incluir uma descrição para cada parâmetro)
@return <Descrição do retorno>
@exception <nome> <Descrição da exceção lançada pelo método>
@see <nome do hipertexto a ser relacionado>
@since <indicar a versão da inclusão deste membro>

48
Exemplo de javadoc
/**
* Programa para exemplificar o javadoc.
*/

public class HelloInternet


{
/**
* Método <code>main</code>. Determina o início da execução.
* @param args Recebe um array de elementos do tipo String
que
* será passado na linha de comando.
*/
public static void main (String args[])
{
System.out.println("Hello Internet!");
}
}
49
Ponto-e-vírgula, blocos e espaço em
branco
• Os comandos são terminados com ponto-e-vírgula.
• Um bloco é delimitado por chaves - { e } e constitui um
comando composto.
• O espaço em branco é permitido entre elementos do
código fonte, em qualquer lugar e em qualquer
quantidade. São considerados espaço em branco o
espaço, o tab (\t) e mudança de linha (\n).
{
int x;
x = 23 * 54;
}
50
Identificadores
• O identificador começa com uma letra, hífen-caixa-
baixa ( _ ), ou símbolo dólar ($). Os subsequentes
caracteres podem conter dígitos. Caracteres maiúsculo
e minúsculo são diferentes e não tem tamanho máximo.
Identificadores válidos:
• identifier • userName • User_name
• userName • _sys_var1 • $change
• Utilizar somente caracteres ascii (porque o unicode
pode suportar caracteres diferentes com a mesma
representação), não utilizar palavra reservada e evitar
nome iniciados com $ (por causa das variáveis de
ambiente do Sistema Operacional).

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

Tipo Tamanho Valor Mín Valor Máx


Wrapper
boolean 1-bit – – Boolean
char 16-bit Unicode 0 Unicode216- 1 Character
byte 8-bit -128 +127 Byte
short 16-bit -215 +215 – 1
Short
int 32-bit -231 +231 – 1
Integer
long 64-bit -263 +263 – 1
Long
float 32-bit IEEE754 IEEE754 Float
double 64-bit IEEE754 IEEE754
Double
void – – – Void 53
Declaração de variáveis e
constantes
int x, y; // declarando variáveis inteiras
x = 6;
y=1000; // atribuindo valores a variável

float z = 3.414f; // ponto flutuante


double w = 3.1415; // declarando e atribuindo double

boolean truth = true; // booleano

char c; // declarando variável caracter

c = ‘A’; // atribuindo um valor char

final int MAX = 2; // Constantes


final int CONSTANTE;
CONSTANTE = 1; // somente admite uma atribuição

54
Operadores Aritméticos

Operador Uso Descrição

+ op1 + op2 Retorna a soma de op1 e op2.


- op1 - op2 Retorna a subtração de op1
por op2.
* op1 * op2 Retorna a multiplicação de op1
por op2.
/ op1 / op2 Retorna a divisão de op1 por
op2.
% op1 % op2 Retorna o resto da divisão de
op1 por op2.

55
Operadores Aritméticos
Operador Uso Descrição

+ +op Promove op para int,


se for byte, short ou char.
- -op Retorna op aritmeticamente negado.
++ op++ Retorna o valor de op, depois o
incrementa de 1.
++ ++op Incrementa op de 1,depois retorna
o valor.
-- op-- Retorna o valor de op, depois o
decrementa de 1.
-- --op Decrementa op de 1,depois retorna
o valor.
56
Operadores Relacionais

Operador Uso Retorna verdadeiro se

> op1 > op2 op1 for maior que op2.


>= op1 >= op2 op1 for maior que ou
igual ao
op2.
< op1 < op2 op1 for menor que op2.
<= op1 <= op2 op1 for menor que ou
igual ao
op2.
== op1 == op2 op1 igual ao op2.
!= op1 != op2 op1 diferente do op2.
57
Operadores Lógicos
Operador Uso Retorna verdadeiro se

&& op1 && op2 op1 e op2 forem true. Só


avalia op2, se op1 for true.
|| op1 || op2 op1 ou op2 for true (ou
ambos).Só avalia op2, se op1
for false.
! ! op op for false.
& op1 & op2 op1 e op2 forem true. Sempre
avalia op1 e op2.
| op1 | op2 op1 ou op2 for true (ou ambos).
Sempre avalia op1 e op2.
!= op1 != op2 op1 diferente do op2.
58
Controle de Fluxo

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

while (expressão booleana)


comando ou bloco

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

for (expressão inicial;


expressão booleana;
expressão de iteração)
comando ou bloco

expressão inicial;
while (expressão booleana)
{
comando ou bloco
expressão de iteração;
}

65
Exemplo de uso - for

public class UsoFor


{
public static void main(String[] args)
{
for (int i=1;i<=15;i++)
{
System.out.println ("O quadrado de "
+ i + " = " + i * i );
}
}
}

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

2.1- Crie uma classe java com o nome “ValorChar” que


mostre na tela os caracteres correspondentes aos números
de 32 a 256.

Dica para resolução: utilize a seguinte notação para


transformar um int em char: (char) valorInteiro (por
enquanto não se preocupe com o significado desta notação,
ela será abordada mais tarde).

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

• Propósitos da Programação Orientada a Objetos


Prover mecanismos para visualizar a complexidade do
desenvolvimento de software da mesma forma que
visualizamos a complexidade do mundo real;
Acelerar o desenvolvimento de softwares com base na
modularidade e acoplamento;
Melhorar a qualidade do software desenvolvido.

72
Classes - conceitos

• definem a estrutura e o
comportamento de um tipo de Nome
objeto;
• atuam como templates; Atributos

• permitem a instanciação de um ou Métodos


mais objetos de um mesmo tipo.

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

Joaquim José Maria


75
Objetos - conceitos

• Objeto é uma representação abstrata de uma


entidade do mundo real, que tem um identificador
único, propriedades embutidas e a habilidade de
interagir com outros objetos e consigo mesmo.
• Estado do objeto é um conjunto de valores que os
atributos do objeto podem ter em um determinado
instante do tempo.

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 Atributos 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 ????????

O comando new Automovel() aloca e inicializa o


espaço:
String modelo ?
String cor ?
int ano
0
82
Criando objetos - cont

• 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

atributos do objeto atributos da classe (estáticos)

• 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

• Acessíveis através de uma instância ou diretamente


através da classe
• Campos estáticos
– Uma única variável cujo o valor é compartilhado por
todos os objetos da classe
– Comparáveis à variáveis globais
• Métodos estáticos
– Tarefas que envolvem um conjunto dos objetos
– Podem fazer acesso somente a membros estáticos

91
Dados Estáticos

• Os dados estáticos relativos a classe são únicos


para todos os objetos da classe. Funciona de
forma análogo a uma variável global.
– No exemplo a seguir a variável totalempregados guarda
o numero total de empregados e não é associada a UM
empregado específico.

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

3.1 – Uma classe de nome Triangulo, possui os


atributos: base e altura do tipo inteiro. E os
métodos:
public void setBase (int b);
public void setAltura (int a);
public int getArea();
Sabe-se que o cálculo da área do triângulo é: área
= base * altura / 2.
Logo, implemente em java um programa que
mostra a área de um triângulo de base igual 20 e
altura igual a 12;

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

4.1 - Faça um programa para exibir o maior e o


menor valor inteiro que pode ser armazenado em
um objeto Integer.

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

public class Arrays


{
public static void main(String[] args)
{
int[] array1 = { 1, 2, 3, 4, 5 };
int[] array2;
array2 = array1;
for(int i = 0; i < array2.length; i++)
array2[i]++;
for(int i = 0; i < array1.length; i++)
System.out.println("array1["+i+ "] = "+array1[i]);
}
}

105
Exercícios

4.2 - Crie uma classe Java (arquivo


ExercicioArray1.java) que contenha um método
que receba um array do tipo int, calcule o
somatório destes elementos e mostre o valor
encontrado na saída padrão.
4.3 -Na mesma classe anterior, crie outro método
com a mesma funcionalidade da classe anterior,
sendo que o array recebido tenha elementos do
tipo Integer.

106
Exercícios - cont.

4.4 - Crie uma classe Java (ExercicioArray2.java) que


contenha como atributo um array bidimensional
contendo informações sobre países e seus estados.
Esta classe conterá um método que retorna um array
dos estados do país informado como parâmetro.
Crie outra classe que recebe da linha de comando
um nome de país (ou JOptionPane) e que, a partir da
classe ExercicioArray2, liste seus estados.

107
String

A classe String representa uma seqüência de


literais (tipo char).

String str = "abc";


char data[] = {'a', 'b', 'c'};
String str = new String(data);

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

Concatenação de objetos do tipo String: "+"

String str1 = "Hello";


str1 = str1 + " World";

str1 aponta para um novo objeto String com


valor: "Hello World".

115
String
public class TesteString
{
public static void main(String args[])
{
String str1 = "Hello";
String str2 = str1;
str2 = str2 + " world!";

System.out.println("str1 = " + str1);


System.out.println("str2 = " + str2);
}
}

116
String
• Observação:

todos os objetos em Java são herança da classe


Object e nesta classe possui o método toString,
uma conversão para String pode ser obtida
através da utilização deste método.

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.

Dica para resolução: utilize a seguinte notação para receber um


int relativo ao tamanho da String de posição n do array args
(por enquanto não se preocupe com o significado desta notação,
ela será abordada mais tarde):
args[n].length( )
Atenção: cuidado para não confundir o atributo length de um
array com o método length( ) de uma String.

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.

4.7 - Crie uma classe Java (arquivo Utilitario.java) que


contenha um método que receba uma String no formato
campo1;campo2; (ex.:Janeiro;Fevereiro;Março;) e retorne um
array de Strings contendo os campos da String de origem dentro
deste array.

4.8 - Crie, na mesma classe anterior, outro método com a


funcionalidade inversa, isto é, recebe um array de Strings e
retorna este como uma String com os campos em sequência,
separados por “;”
119
Conversão de tipos

Conversão: int para String

int i = 10;
Integer intObj = new Integer(i);
String str1 = intObj.toString();

120
Conversão de tipos - cont.

Conversão: String para int

String str = “10”;


Integer intObj = new Integer(str);
int i = intObj.intValue();

ou

String str = “10”;


int i = Integer.parseInt(str);

121
Entrada de dados via janela ou
caixa de diálogo
• Utilizando a classe JOptionPane do pacote
swing.
Barra de título

Ícone apropriado

A região reservada O botão OK permite o usuário


para entrada de dados informar valor e Cancel
retorna null
122
Exemplo de entrada de dados em
janela gráfica
import javax.swing.JOptionPane;
public class TesteInput
{
public static void main (String [] args)
{
String valor;
valor = JOptionPane.showInputDialog(null,
"Informe o valor!",
"Input dialog",
JOptionPane.QUESTION_MESSAGE);
System.out.println("O valor : " + valor);
System.exit(0);
}
}

123
StringBuffer

• String: seqüência imutável de caracteres


de comprimento fixo.
Alteração ⇒ cria novo objeto

• StringBuffer: seqüência de caracteres de tamanho


variável.
Alteração ⇒ no mesmo objeto

124
StringBuffer

Construtor Operação
StringBuffer() Aloca um novo objeto StringBuffer
com nenhum caracter e uma
capacidade inicial de 16 caracteres.

StringBuffer(int length) Aloca um novo objeto StringBuffer


com nenhum caracter e a
capacidade inicial do argumento.

StringBuffer(String s) Aloca um novo objeto String com o


mesmo conteúdo do objeto String
de argumento.

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);

String str1 = strB1.append(" Again")


.append("!").toString() + " abc";
System.out.println("str1 = " + str1);
} } 128
Exercícios
4.9 - Crie uma classe Java (arquivo Utilitario.java) que
contenha um método que receba uma StringBuffer no formato
campo1;campo2 (ex.:Janeiro;Fevereiro;Março) e retorne um
array de Strings contendo os campos da String de origem dentro
deste array.

4.10 - Crie, na mesma classe anterior, outro método com a


funcionalidade inversa, isto é, recebe um array de Strings e
retorna este como uma StringBuffer com os campos em
sequência, separados por “;” .

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

• Esta classe permite quebra uma string em tokens.


• Os delimitadores de tokens default são " \t\n\r\f”,
que são os caracteres: barra de branco, a
tabulação, o newline, o
carriage-return e o form-feed. Os delimitadores
não são tratados como sendo tokens.
– P.ex: os tokens da string “onde está meu cão”.
São “onde”, “esta”, “meu” e “cão”.

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)

• “A abstração é o processo de filtragem de detalhes sem


importância do objeto, para que apenas as
características apropriadas que o descrevem
permanecam.” (Peter Van Der Linden)
• conceito aplicado a criação de software baseado em
objetos, partindo do princípio que devemos considerar
a essência de cada objeto e não pensar em todos os
detalhes de implementação;
• semelhante ao que normalmente fazemos na nossa vida
em relação aos objetos que nos rodeiam.
137
Abstração
Visão do mundo real:
• Estamos acostumados a sempre abstrair de objetos aquilo
que nos interessa.

cor
placa cilindrada
cor velocidadeMax
númeroChassi

138
Encapsulamento

• mecanismo utilizado visando obter segurança,


modularidade e autonomia para objetos;
• conseguido através da definição de visibilidade
privada dos atributos, ganhando-se assim autonomia
para definir o que o mundo externo ao objeto poderá
visualizar e acessar, normalmente através de métodos
públicos.
dica: sempre defina os atributos de uma classe como
privados, a não ser que tenha uma boa justificativa para
não serem.

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.

private Estes atributos e métodos são acessíveis somente nos


métodos (todos) da própria classe. Este é o nível mais
rígido de encapsulamento.

protected Estes atributos e métodos são acessíveis no pacote, nos


métodos da própria classe e suas subclasses, o que será
visto em Herança.
140
Encapsulamento - modificadores de
visibilidade

private Estes atributos e métodos são acessíveis somente nos


protected métodos da própria classe e suas subclasses.

<default> Visível no pacote e na classe.

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

• Herança significa ser capaz incorporar os dados e


métodos de uma classe previamente definida.
Assim como a herança de todas as operações e
dados, você pode especializar métodos da classe
ancestral e especificar novos operações e dados,
para refinar, especializar, substituir ou estender a
funcionalidade da classe progenitora.

143
Herança

• Você pode fazer sempre com que um objeto mais


geral armazene um objeto mais especializado, mas
o contrário não é verdadeiro sem uma conversão
explícita de tipos.

• Todos os cítricos são frutas, mas nem todas as


frutas são cítricos!

144
Herança
Visão do mundo real:
• Estamos acostumados a lidar com classes agrupando-as em
estruturas hierárquicas;

Filo dos cordados Possuem notocorda

Tem pêlos
duas dentições Classe mamíferos Anfíbios ...
amamentam filhotes

Ordem dos primatas Ordem dos roedores ...

Espécie homo sapiens Andam sobre dois pés


145
Herança - terminologia

• estender = criar uma nova classe que herda todo o


conteúdo da classe existente.
• superclasse = uma classe progenitora ou “base”.
• subclasse = uma classe filha que herda, ou estende,
uma superclasse.

146
Hierarquia de Classes
Em Java, a classe “Object” é raiz de todas as classes:

Object

Sobremesa

Bolo Torta

LuisFilipe
147
Herança - exemplo 1

public class HelloInternetSubClasse extends


HelloInternet
{
}

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;
}

class Motocicleta extends Veiculo


{
int cilindrada;
}

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

[<controleAcesso>] [static] [final] <tipo>


<nomeCampo>;
• controle de acesso
– define o escopo de visibilidade de um atributo.
• static
– define se o atributo diz respeito à classe (gerado uma única vez)
ou ao objeto.
• final
– especifica que o valor do campo é constante.
• tipo
– define a espécie do atributo, que pode ser um tipo primitivo (int,
long, double, boolean) ou um objeto (String, etc.).
• nome do campo
– especifica um nome para a propriedade. 151
Atributos - controle de acesso

Visibilidade dos membros de uma classe

Especificador Classe Subclasse Package Mundo

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

• this é uma palavra-chave usada


num método como referência para o
objeto corrente.
• ela tem o significado de: “o objeto para
o qual este trecho de código está sendo
executado”.

155
this

Refere-se ao objeto corrente quando


usado no código de um método não estático

Usado com freqüência para passar uma referência do objeto


corrente num envio de mensagem para um outro objeto

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 + ")" );
}
}

//Classe principal, Arquivo Principal.java

public class Principal {

public static void main(String args[]) {


Ponto ap;
ap=new Ponto((float)0.0,(float)0.0);
ap.mostra();
}
}

158
super

• super é uma palavra chave usada numa


subclasse como referência para membros da
superclasse.
• ela tem o significado de: “a superclasse da classe
corrente”.

Observação: normalmente utilizado com métodos.


Será visto em detalhes a frente.

159
Declarações de Métodos
accessLevel public, protected, private, private protected.

static Declara que o método é da classe, ao invés de ser do


objeto.

abstract O método não tem implementação e deve ser membro


de uma classe abstrata.

final O método não pode ser sobreposto por uma


subclasse.

synchronized Usado na declaração de threads.

returnType Tipo de retorno do método. Se não tem retorno,


especificar: void. 160
Mensagem - chamada de método

Forma
< resultado = referência.método( parâmetros );>
resultado = terra.nomeOrbita();

• A captura do retorno é opcional.


• Parâmetros possuem tipo.
• O número de parâmetros é verificado em tempo de
compilação.

161
Passagem de Parâmetros

• Toda passagem de parâmetro em Java é por valor.


Obs.: Se o argumento sendo passado é uma
referência a um objeto, então o valor passado é o
endereço do objeto. Desta forma, o conteúdo do
objeto referenciado pode ser alterado pelo método
que recebe a referência.

162
Exercício
5.1 - Crie duas classes que definam os seguintes
atributos e métodos para objetos do tipo:
Aviao Piloto

modelo: String nome: String


estaVoando: boolean aviaoPilotado: Aviao

decolar() : void pilotarAviao() : void


pousar(): void setNome (String nome): void
setModelo(String modelo) : void getNome (): String
getModelo() : String

• Ao final crie um objeto da classe Aviao e um objeto da


classe Piloto, fazendo com que o objeto piloto receba o
objeto aviao e pilote ele.
163
Polimorfismo

• ocorre quando uma classe possui um método com o mesmo


nome e assinatura (número, tipo e ordem de parâmetros) de
um método na sua superclasse;
• toda vez que isto ocorrer, a máquina virtual irá executar o
método da classe mais especializada (a subclasse) e não o
método da superclasse (sobreposição). Note que esta
decisão ocorre em tempo de execução;
• polimorfismo ocorre também quando existem dois métodos
com mesmo nome, na mesma classe com e assinaturas
diferentes. O método será escolhido de acordo com o
número de parâmetros, tipo ou valor de retorno esperado.
Note que esta decisão ocorre em tempo de compilação.

164
Polimorfismo

• Membros com mesmos identificadores substituem


membros herdados.
• Os membros definidos na superclasse podem ser
acessados na subclasse através do qualificador super.
• Métodos declarados como final não podem ser
redefinidos.
• Métodos abstratos devem ser redefinidos ou declarados
como abstratos.

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

public class Super


{
...
public void metodo1()
{
a = b * c;
}
}
public class Sub extends Super
{
...
public void metodo1()
{
x = y + z;
} 167
}
Polimorfismo - Sobreposição
class Fruta {
int gramas;
int calorias_por_grama;
Fruta()
{
gramas=55;
calorias_por_grama=0;
}
Fruta(int g, int c)
{ sobreposição
gramas =g;
calorias_por_grama =c;
}
void descascar ()
{
System.out.println(“Aqui eu descasco frutas”);
}
}
168
Polimorfismo - Sobreposição
class Citros extends Fruta {
private int acidoCitrico;
public Citros()
{
super();
this.acidoCitrico=1000;
}
public Citros(int g, int c, int a)
{
super(g,c);
this.setAcidoCitrico(a);
}

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

public class Fruta


{
int gramas;
int calorias_por_grama;
public Fruta() sobrecarga
{
gramas=55;
calorias_por_grama=0;
}
public Fruta(int g, int c)
{
this.gramas =g;
this.calorias_por_grama =c;
}
}
171
Polimorfismo - Sobrecarga

public class Feira


{
public static void main(String args[])
{
Fruta melancia = new Fruta(4000, 5);
Fruta manga = new Fruta ();
manga.gramas=100;
manga.calorias_por_grama=100;
System.out.println(“manga “+ manga.gramas +
“ gs “ + manga.calorias_por_grama);
}
}

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

setComissao(comissao: float) : void

• Ao final crie um objeto da classe Empregado e um objeto da classe Gerente, atribuindo


valores para seus salários e comissão para o gerente. Ao final execute os métodos
getSalario() de ambos objetos. Lembrar que o salário do gerente é composto do salário +
comissão. 174
Método finalize()

• Antes de um objeto passar pela coleta de lixo, seu


método finalize() é executado
• Interessante para liberar recursos de posse do
objeto

protected void finalize() throws Trowable


{
...
// Código de liberação para esta classe
...
super.finalize();
}

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

Modelagem de um conceito abstrato


Classe abstrata não pode conter instâncias

Conta

PessoaFisica PessoaJuridica Poupança

177
Classes Abstratas

• Quando a palavra-chave “abstract”


aparece no início de uma declaração de
classe, significa que um ou mais métodos
são abstratos.
• Um método abstrato não tem corpo; o
seu propósito é forçar uma subclasse a
sobrepô-lo e fornecer uma
implementação concreta do método.

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

• interface pode ser considerada como a


forma com que um objeto se apresenta para
outros, no que diz respeito aos seus
atributos e métodos (sua funcionalidade);
• é a representação externa de um objeto.

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

• Criadas com a palavra reservada interface.


• são sempre públicas.
• implementadas pelas classes com a palavra
reservada implements.

184
Interface - exemplo

public interface ControleRemoto


{
public void ligaTV();
public void desligaTV();
public void mudaCanalTV(int canalNovo);
}

public class TV implements ControleRemoto


{
public void ligaTV() {...}
public void desligaTV() {...}
public void mudaCanalTV(int canalNovo) {...}
}

185
Modificadores de Classes em Java

public A classe pode ser usada por qualquer outra classe de


qualquer pacote (package).

abstract A classe não pode ser instanciada (contém métodos


abstratos).
final A classe não pode ter subclasse (folha da árvore de
classes).
extends A classe é uma subclasse da superclasse especificada.

implements A classe implementa a(s) interface(s) especificadas.

Padrão: não publica, não abstrata, não final, subclasse de Object


e sem implementar nenhuma interface.
186
Pacotes

• O java provê um mecanismo de pacotes como uma


forma de agrupar classes relacionadas.
• Pode-se indicar que as classes de um programa irão
compor um determinado pacote, através do
comando package.
// Classe empregado do departamento financeiro
// da companhia ABC
package abc.FinanceDept;
public class Empregado {
...
}
187
Utilização de pacotes
• Quando se deseja utilizar as facilidades de um
pacote, deve-se usar o comando import para
informar ao compilador onde encontrar as classes
que serão utilizadas.
import abc.FinanceDept.*;
public class Gerente extends
Empregado {
String departamento;
Empregado[] subordinados;
}
188
A variável CLASSPATH
• Pacotes são armazenados em um diretório formado pelo nome
do pacote. Por exemplo: o arquivo Empregado.class após
compilado será armazenado no seguinte diretório.
path\abc\FinanceDept
• O diretório abc que forma a base da hierarquia deve ser
colocada na variável CLASSPATH.
• O compilador java pode criar pacotes e colocar as classes
compiladas dentro dele através do seguinte comando:
javac -d c:\home\mypackages Empregado.java
• A variável de ambiente CLASSPATH deve incluir o caminho do
pacote.
CLASSPATH=c:\home\mypackages;.

189
6 - Classes em Java

190
Vector

• Array: Comprimento fixo


Elementos de um mesmo tipo
Alteração ⇒ cria novo objeto

• Vector: Tamanho variável


Elementos do tipo Object
Alteração ⇒ no mesmo objeto

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

objeto no vector. Retorna -1, caso não o localize.


void setElementAt(Object o, int i): substitui item pelo
componente especificado, na posição indicada.
194
Vector
Métodos
Object remove(int index) :remove o elemento do vector na
posição indicada.
void removeElementAt(int i) :remove o item indicado pelo
índice. O vector é reorganizado e seu tamanho diminuído de 1.
void removeAllElements() : remove todos componentes do
vector e o muda o seu tamanho para zero.
void setSize(int i) : configura o tamanho do objeto vector. Se o
tamanho é maior que o tamanho atual, novos itens nulos são
adicionados. Se menor, os itens restantes são descartados.
void size() : retorna o número de elementos do Vector.

195
Vector
import java.util.Vector;
public class PilhaVector
{
private Vector pilha;

public PilhaVector()
{
pilha = new Vector();
}

public void push(Object parametro)


{
pilha.addElement(parametro);
}

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

• Java fornece um forte suporte para a construção


de interfaces gráficas através do pacote
java.awt
• GUI inicial do Java:
 incompleta (falta grid, por exemplo)
 com problemas de portabilidade (peers)
• Substituída pela JFC (swing), mas
compartilham partes fundamentais (como
eventos)
201
Elementos Gráficos
• Os elementos chaves de uma interface gráfica em Java
são:
Componentes gráficos (botões etc.)
Gerenciadores de layoutes
Processamento de eventos
• Componentes gráficos, tais como campo texto e
botões, são elementos que o usuário manipula com o
mouse ou com o teclado
• Gerenciadores de layout governam a maneira pela
qual os componentes aparecem na tela
• Eventos assinalam ações do usuário consideradas
importantes, como o click de um mouse em cima de
um botão
202
Programação Dirigida por Eventos
• Programas Java devem responder a eventos
gerados por componentes gráficos indicando que
ações específicas ocorreram sobre tais
componentes
• Uma categoria especial de classes, chamadas
listeners, que ficam a espera de eventos
• Portanto, uma programa cliente Java é, geralmene,
composto por:
• o código representando a interface gráfica com o usuário
• listeners escutando eventos
• código que respondem a eventos
203
Componentes Gráficos

• Awt contém vários tipos de componentes gráficos


permitindo diferentes maneiras de interagir com o
usuário:
labels
text fields
text areas
lists
buttons
scrollbars

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).

Point (int x, int y) Cria uma ponto através das


coordenadas x e y especificadas.
Variáveis:
x - representa a coluna.
y - representa a linha.
206
Point

Método Uso

move(int x,int y) movimenta o ponto para


uma nova localização.

translate(int dx,int dy)


movimenta o ponto,
incrementando suas
coordenadas x e y
com os valores de dx e
dy respectivamente.

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

setSize(int l,int a) redefine valores para a


largura e altura de uma
dimensão.

equals(Object d) verifica se dois objetos


da classe Dimension
têm os mesmos valores para
altura e largura.

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.

Construtor: Color(int red, int green, int blue)


Cria uma cor com a composição dos
componentes vermelho , verde e azul.
Variáveis:
black blue cyan darkGray
gray green lightGray magenta
orange pink red white
yellow
212
Color

Método Uso

brighter( ) Cria uma versão mais clara da cor.

darker( ) Cria uma versão mais escura da cor.


getBlue( ) Retorna um inteiro correspondente
ao componente azul.
getGreen( ) Retorna um inteiro correspondente
ao componente verde.
getRed( ) Retorna um inteiro correspondente
ao componente verde.

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

• A criação de interfaces gráficas AWT consiste


basicamente na criação (instância) de objetos do tipo
Conponent (botões, textos etc.), na criação de recipientes
ou objetos da classe Container (janelas, paineis etc.) para
receber os componentes criados e na adição dos
componentes aos recipientes, com base num sistema de
coordenadas (especificando a localização da inserção)
ou via utilização de gerentes de layouts que se
encarregam de definir a localização e aspecto visual dos
componentes inseridos nos recipientes.
215
Component

• A classe Component representa um objeto que tenha


uma representação gráfica, como botões, campos de
textos, choices etc. Esta classe define o comportamento
básico para a maioria dos componentes visuais do pacote
AWT (todos os métodos definidos nesta classe estarão
disponíveis para todos os componentes visuais do AWT,
bem como todos os recipientes).

• Ex.: método setVisible(boolean visibilidade)


– botao.setVisible(true); // faz um Button aparecer no Container
– janela.setVisible(false); // faz um Frame desaparecer
216
Component
Método Uso
getName( ) Retorna o nome do componente
setName(String n) Atribui um nome ao componente
getParent( ) Retorna o Container onde o componente
foi adicionado
isVisible( ) Determina se o componente é visível.
Componentes são inicialmente visíveis,
exceto Frame, Window e Dialog.
setVisible(boolean b)
Torna o componente visível ou
não, de acordo com o parâmetro.
217
Component
Método Uso
isShowing( ) Retorna true se o componente
for visível e estiver dentro de
um outro componente que está
sendo mostrado.
isEnabled( ) Determina se um componente
está habilitado para receber a
entrada do usuário e gerar
eventos. Componentes são
inicialmente habilitados.
setEnabled(boolean b) Habilita ou desabilita o
componente.
218
Component

Outros métodos (aparência):


public Color getForeground( )
public void setForeground(Color c)
public Color getBackground( )
public void setBackground(Color c)
public Font getFont( )
public synchronized void setFont(Font f)
219
Component
Outros métodos (localização):
public Point getLocation( )
public Point getLocationOnScreen( )
public void setLocation(int x, int y)
public void setLocation(Point p)
public void setBounds(int x,int y,int largura,int altura)
public void setBounds(Rectangle r)
public Dimension getSize( )
public void setSize(int width, int height)
public void setSize(Dimension d)
220
Containers
• Um container é uma categoria especial de componente
gráfico que pode conter outros componentes ou mesmo
outros containers.
• Todos os containers são componentes, mas nem todos os
componentes são containers.
• Uma applet, uma janela e um painel são exemplos de
container.
• Um container (painel) pode ser inserido dentro de outro.
• Cada container possui associado um gerenciador de layout
para controlar a maneira pela qual seus componentes serão
mostrados (tamanho e posição).
221
Containers do pacote AWT

Component

Container

Panel Window

Applet Frame Dialog

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

• Uma Window é uma janela sem barra de título e borda


borda e que necessariamente tem que estar associada
com outro objeto da classe Frame (janela) para que
possa existir.
• A classe Window especializa a classe container, logo
poderá conter outros componentes internamente.
• A classe Window normalmente é utilizada para
implementar janelas pop-up.
• Quando um objeto da classe Window é criado,
automaticamente é associado a ele o gerente de layout
BorderLayout.
228
Window

Construtor

Window(Frame f)

Constrói um objeto (instância) da classe


Window invisível que estará vinculado ao
objeto Frame (janela) previamente
instanciado.

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)

• É um conjunto de aspectos (componentes) que


foram implementados e disponibilizados em
uma biblioteca e serve para criar interfaces
gráficas de usuário.
• Iniciou sua implementação no JDK1.1 e
continua nas versões seguintes.

232
A estrutura hierárquica AWT e Swing

JWindow

Window Dialog JDialog

Frame JFrame
Component Container
JLabel

AbstractButton JButton
Jcomponent
JPanel

JRootPane

 Os retângulos sombreados representam os controles da AWT.


233
Qual a relação entre JFC e AWT ?

• Com a introdução de um novo conjunto de


componentes para construção de interface que usa um
modelo diferente daquele da AWT é natural perguntar-
se o que fazer com a AWT.
• Para conviver Swing e AWT, a versão JDK1.1 foi
alterada e introduzida uma nova facilidade denominada
de “Lightweight components”- (componentes leves).
– Significa: que os desenvolvedores possam diretamente
estender uma classe Component e Container e utilizar as
facilidades disponíveis nestas classes.

234
Qual a relação entre JFC e AWT ?

• Em JFC1.1 e JDK1.2, os componentes AWT e os


componentes Swing são ambos suportados, embora os
componentes AWT continuem usando o “peer model”.
E não se sabe até quando esta situação manter-se-á.
• Alguns dos componentes Swing, atualmente, são
derivados de componentes AWT.
– P.ex: o componente JFrame, que fornece a janela principal da
aplicação, é derivado da classe Frame da AWT.

235
Qual a relação entre JFC e AWT ?

• Todos os componentes AWT possuem um componente


correspondente no Swing, logo é possível implementar
aplicações que não dependam diretamente da AWT.

Nota: Existe uma tendência da Javasoft em não usar


o “peer model”. Logo, os desenvolvedores
devem ficar atentos quanto a migrarem as
aplicações existentes em AWT para o Swing.

236
O que necessito reaprender para
usar os componentes Swing?

• É possível utilizar alguns componentes básicos


do Swing diretamente.
• Com o Swing não há mudanças fundamentais
no modo como as aplicações são construídas.
• Pode-se criar a janela principal da aplicação,
usar frames, componentes e gerenciadores de
layout e é possível estabelecer conexão quase
que da mesma forma.

237
Os pacotes do Swing

• O produto JFC 1.1 é uma coleção de pacotes que


contém os componentes do Swing, e que pode ser
adicionado ao JDK 1.1.
• Para o JDK1.1, o nome dos pacotes iniciam com
java.awt.swing.
• A partir de JDK1.2, os mesmos pacotes continuaram
a existir, porém com o nome javax.swing.
• Segue a relação dos pacotes que são comuns a
JFC1.1 e JDK1.2, agrupados por funcionalidade.

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

Window Dialog JDialog

Frame JFrame
Component Container
JLabel

AbstractButton JButton
Jcomponent
JPanel

JRootPane

 Os retângulos sombreados representam os


controles da AWT. 240
A classe Jcomponent fornece:
• Uma aparência que (”a pluggable look and feel - l&f”) pode
ser especificado pelo programador ou (opcionalmente)
selecionada pelo usuário em tempo de execução.
• Criação de componentes personalizados.
• Uma borda que implicitamente define os limites do
componente.
• A habilidade para definir o tamanho máximo, mínimo e
preferido de um componente.
• ToolTips: descrições curtas quando o cursor passa sobre um
componente.
• Autoscrolling: ocorre a rolagem automática em lista, tabelas
ou árvore quando o mouse é arrastado sobre estes com o
botão pressionado.
241
A classe Jcomponent
Método Uso
setToolTipText(String text)
registra o texto para ser mostrado em tooltip.
createToolTip()
retorna o JToolTip que deve ser usado para mostrar
um texto tooltip.
getBorder()
retorna a borda do componente ou nulo se nenhuma
borda estiver definida.
setBorder()
atribui a borda do componente.
setPreferredSize(Dimension d)
atribui o tamanho preferido.
getPreferredSize()
retorna o tamanho preferido. 242
Definição de cores do componente
• Todos os componentes possuem dois modos de cores
associados: a de fundo (background) e a de frente
(foreground).
• A JFC introduz um conceito de um componente
“lightweight”, que possui um fundo transparente que
permite ver o que está atrás do componente. O
componente transparente não faz uso de cores de
fundo.
• A classe JComponent possue os métodos isOpaque,
que retorna false se o componente é transparente, e
setOpaque(boolean b), que permite alterar esta
propriedade.
243
Frame

• Uma Frame é uma janela com uma barra de título e


uma borda.
• A classe Frame especializa a classe Window, que por
sua vez, especializa a classe container.
• A classe Frame implementa a interface MenuContainer,
logo uma frame pode ter uma barra de menu associada a
ela.
• Frames são geralmente usadas para construir aplicações,
mas também podem ser usadas com applets.
244
Frame

• Se uma aplicação tem uma janela dependente de outra


(que desaparece quando a outra é iconificada, por
exemplo), então deve-se utilizar Dialog ou Window
para esta janela.
• A classe Frame por padrão não fornece ao usuário
mecanismos para ser fechada com o clique do mouse
no botão para fechar a janela (x).

245
Frame

Construtor Operação

Frame() Constrói uma nova instância de Frame


que é inicialmente invisível.

Frame(String t) Constrói uma nova instância de Frame


que é inicialmente invisível, com o
título passado como parâmetro.

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

setResizable(boolean b) Permite, ou não, que o


usuário modifique o
tamanho do Frame.
setLayout (LayoutManager l) especifica um novo
gerente de layout para a janela (ou sem
layout se for passado o valor null.
Ex.:
objJanela.setLayout ( null ).
249
Frame

• Deve-se usar pack( ) ou setSize(int,int) em um


Frame antes que ele seja mostrado pela
primeira vez. Caso contrário, somente a barra
de título da janela aparecerá na tela.
• Em geral, preferível utilizar o pack do que o
setSize:
 pack delega para o gerenciador de layout a
mudança no tamanho da janela.
 com o gerenciador de layout, adquire-se melhor
independência de plataforma.
250
A classe JFrame
o esqueleto de uma aplicação

• Quando um programa java inicia com uma GUI, vê-se


a janela onde a aplicação irá fazer as interações com o
usuário através de teclado e mouse. No Swing, a
interface principal da aplicação é implementada pelo
componente javax.swing.JFrame.
• Assim como outros componentes, o JFrame é derivado
do controle da AWT. Segue a estrutura hierárquica dos
componentes AWT e Swing.

251
A estrutura de JFrame
JFrame

JRootPane

JLayeredPane

MenuBar (opcional)

GlassPane

ContentPane

252
A estrutura de JFrame

• Quando criado, o JFrame possui um único


filho, o container, que é uma instância da
classe JRootPane.
• A classe JRootPane pode gerenciar outros 4
componentes: um JLayeredPane, um
ContentPane, um MenuBar e um GlassPane.
• JRootPane é gerenciado de forma a cobrir a
superfície inteira da JFrame, exceto a barra
de título e o tamanho da barra.

253
A estrutura de JFrame

• JLayeredPane : adiciona profundidade a um


container, permitindo sobreposição de
componentes quando necessário.
• MenuBar: a classe MenuBar class encapsula
os conceitos da plataforma para os limites da
barra de menu para uma janela. O objetivo é
associar a barra de menu com um objeto
Frame, chamando o método setMenuBar.

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.

getGlassPane( ) retorna o objeto glassPane para


a janela.
getJMenuBar( ) retorna a barra de menu da
janela.
getJLayredPane( ) retorna o objeto layeredPane
para a janela.

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");
}

BasicFrame (String title) {


super(title);
setSize(250, 200);
setVisible(true);
}
}

258
JFrame - resultado

259
JFrame – exemplo 1

import javax.swing.*;
Import java.awt.*;
public class MyJFrame {

public static void main (String args[]) {


JFrame tela = new JFrame("Tela Exemplo 1");

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);

MyJFrame tela2 = new MyJFrame();


tela2.setTitle ("Tela2 Exemplo 5");
tela2.setSize(300,300);
tela2.setBackground(Color.white);
tela2.setVisible(true);
}
264
}
JFrame – exemplo 6
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 6");
tela.setSize(300,300);
tela.setBackground(Color.green);
tela.setVisible(true);

MyJFrame tela2 = new MyJFrame();


tela2.setTitle ("Tela2 Exemplo 6");
tela2.setSize(500,500);
tela2.setBackground(Color.white);
tela2.setVisible(true);
tela2.toBack();
}
265
}
JFrame – exemplo 7
import java.awt.*;
import javax.swing.*;
public class MyJFrame extends JFrame {
public static void main (String args[]) {
MyJFrame tela2 = new MyJFrame();
tela2.setTitle ("Tela Exemplo 7");
tela2.setSize(500,500);
tela2.setBackground(Color.white);
tela2.setVisible(true);

JWindow tela = new JWindow(tela2);


tela.setSize(300,300);
tela.setBackground(Color.green);
tela.setVisible(true);
}
} 266
JFrame – exercício
Durante a abordagem dos componentes e
recipientes do pacote swing será utilizado
um exercício único que, na conclusão do
mesmo, deverá ter o aspecto mostrado no
slide a seguir. A cada nova etapa (a cada
novo componente aprendido) será utilizado
o exercício anterior para inserção do
componente adicional. Neste ponto, apenas
criaremos a janela (recipiente) que conterá
os demais componentes.

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.

*Incluir as instruções import java.awt.* .


import javax.swing.* . 268
JFrame – resultado final

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

JPanel() Constrói uma nova instância de um


painel que é inicialmente invisível.

JPanel(LayoutManager l) Constrói uma nova instância de um


painel contendo um gerente de
layout específico.

271
JPanel

• O exemplo a seguir mostra a criação de um panel


que pode ser usado para inserir novos componentes.
• Obs.: lembre-se que um panel é uma subclasse da
classe JComponent, logo poderá utilizar o método
add(Component c) para inserir algum componente
internamente (o mesmo vale para objetos da classe
JFrame !).

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

• Um JDialog é uma janela com uma barra de


título.
• Caixas de diálogos são em geral usadas para
obter/mostrar informações do/para o usuário.
• O swing fornece um rico conjunto de diálogos que
permite interações básicas com o usuário sem a
necessidade de escrever muito código.

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) Constrói uma nova instância de JDialog


inicialmente invisível e vinculada a janela f.

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.

JDialog(Dialog f, String titulo, boolean m)


Semelhante ao construtor anterior mas
com o título da janela JDialog.

278
JDialog

Construtor Operação

JDialog(Frame f) Constrói uma nova instância de JDialog


inicialmente invisível e vinculada a janela f.

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.

JDialog(Frame f, String titulo, boolean m)


Semelhante ao construtor anterior mas
com o título da janela JDialog.

279
JDialog

Método Uso
isModal() Retorna verdadeiro se o objeto
JDialog questionado for modal.

setModal(boolean b) Redefine o comportamento


modal do objeto JDialog.

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:

Frame-pai: janela (da classe CandidatoEmprego)


Título: Documentos Entregues
Modal: true
Cor de Fundo: (73,165,227)
Dimensão : largura = 300 e altura = 470
Localização: x = 200 e y = 200
Layout: nulo

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 ImageIcon(String fileName)


public ImageIcon(URL url)
public ImageIcon(Image img)

• java pode manusear: GIF, JPEG e JPG.


283
JLabel

• Um área onde textos não editáveis e


imagens podem ser mostrados
• Rótulos são usados para informações ou
instruções textuais na interface gráfica
• Um rótulo imagem mostra texto não
editável na posição selecionada
• Uma vez criado um rótulo, programas
raramente modificam seu conteúdo
284
JLabel - construtores

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

• A classe JTextComponent é uma abstração


de um componente que recebe inserções de
textos do usuário.
• Ela é a super-classe abstrata de duas classes
com funcionalidades em comum:
JTextField e JTextArea e seus métodos e
atributos são compartilhados por estas.

289
JTextComponent - métodos

• public String getText()


– Retorna um objeto da classe String contendo o
texto correspondente ao que o usuário digitou
no objeto JTextComponent.
• public void setText(String texto)
– Define o texto do objeto JTextComponent
conforme o valor do objeto String texto passado
como parâmetro.

290
JTextComponent - métodos

• public String getSelectedText()


– Retorna um objeto da classe String contendo o
texto correspondente ao que o usuário marcou
no objeto JTextComponent.
• public void select(int inicio, int final)
– Marca o texto do objeto JTextComponent
conforme no intervalo correspondente ao valor
de início e final passados como parâmetros.

291
JTextComponent - métodos

• public void selectAll()


– Seleciona todo o texto no objeto
TextComponent.
• public void setEditable(boolean estado)
– Define o objeto JTextComponent como
editável ou não.

292
JTextField

• Um objeto da classe JTextField é um


campo texto na forma de uma linha na
qual textos podem ser digitados pelo
usuário através do teclado.
• A classe JTextField é uma sub-classe de
JTextComponent, portanto pode-se
aplicar nesta todos os métodos vistos
anteriormente na classe JTextComponent.

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:

jtfNome: texto “nome do


candidato”, 70 colunas,
posição (65, 20) e dimensão
(305, 20) . Adicionar ao
painelIdentificacao.

295
JTextArea

• Um objeto da classe JTextArea é um campo


texto na forma de várias linhas nas quais textos
podem ser digitados pelo usuário através do
teclado.
• A classe JTextArea é também uma sub-classe
de JTextComponent, portanto pode-se aplicar
nesta todos os métodos vistos anteriormente na
classe JTextComponent.

296
JTextArea - construtores
public JTextArea( )
– constrói um objeto do tipo campo de texto com possibilidade para
várias linhas.

public JTextArea(int linhas, int colunas)


– constrói um objeto JTextArea vazio com o número especificado de
colunas e linhas.

public JTextArea(String texto)


– constrói um objeto JTextArea com o texto fornecido no parâmetro
texto.

public JTextArea(String texto , int linhas, int col)


– constrói um objeto JTextArea com o texto especificado e número
especificado de colunas e linhas.
297
JTextArea - métodos
• public void setColumns(int c)
– define o número de colunas visíveis para o objeto
JTextArea.
• public int getColumns()
– devolve o número de colunas visíveis já definidas
para o objeto JTextArea.
• public void setRows(int r)
– define o número de linhas visíveis para o objeto
JTextArea.
• public int getRows()
– devolve o número de linhas visíveis já definidas
para o objeto JTextArea.
• public void append(String str)
– adiciona o texto no final do JTextArea.
• public void insert(String str, int pos)
– insere o texto na posição especificada.

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:

jtaCurriculum: texto “ ”, 6 linhas,


460 colunas e ToolTipText("Digite
aqui os dados do Curriculum Vitae
resumido"). NÃO adicionar a
nenhum painel.

Adicione à classe CandidatoEmprego dois métodos públicos para


definição e leitura dos valores digitados no objeto TextArea:
public void setCurriculum(String curriculum);
public String getCurriculum().
300
JScrollPane
• As mais sofisticadas interfaces de usuários utilizam
áreas com barras de rolagem.
• O Swing inclui um conjunto de componentes em uma
classe JScrollPane que atende estas demandas.
• Caso as características fornecidas pela classe
JScrollPane não sejam suficientes, será possível criar
novos componentes através da interação direta com
os componentes da classe JScrollBar.
• Implementa as interfaces: ScrollPaneConstants e
Accessible.
301
A estrutura de JScrollPane
A coluna header

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

JScrollPane(Component view, int vsbPolicy, int hsbPolicy)

cria um JScrollPane que exibe um campo de


visão em uma viewport cuja posição do campo
de visão pode ser controlada de acordo com as
constantes da scrollbar.

JScrollPane(int vsbPolicy, int hsbPolicy)


cria um JScrollPane vazio (sem viewport) de
acordo com constantes scrollbar especificadas.

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

• O pacote javax.swing suporta os seguintes tipos


de botões:
• JButton Botão comum
• JCheckBox Botões de seleção independentes
• JRadioButton Botões agrupados para seleção
• JMenuItem Item de menu no formato de botão
JCheckBox ou JRadioButton.

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

• É subclasse de JToggleButton, AbstractButton e


Jcomponent.
• Pode ter dois estados : ligado e desligado.
• Podem ser agrupados pela classe ButtonGroup. Neste
caso, a seleção é mutuamente exclusiva.

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

• É subclasse de JToggleButton, AbstractButton e


Jcomponent.
• Igualmente ao JRadioButton, um JCheckBox pode ter
dois estados: ligado ou desligado.
• Um conjunto de checkboxes podem ser agrupados através
da classe ButtonGroup. Neste caso, a seleção é
mutuamente exclusiva.
317
JCheckBox
Construtores Uso
JCheckBox(String label) Cria um Checkbox desligado, com o label
especificado.
JCheckBox(String label,boolean state)
Cria um Checkbox ligado ou desligado, de
acordo com a variável booleana state e com
o label especificado.
JCheckBox(Icon icon, boolean state)
Cria um Checkbox ligado ou desligado, de
acordo com a variável booleana state, com
o ícone especificado.

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

• É herança direta de Jcomponent.


• Um JComboBox é um componente visual que possibilita a
manipulação de coleções de objetos permitindo ao usuário
selecionar apenas um objeto da coleção. Cada objeto
inserido no JComboBox é representado visualmente pela
String retornada pelo método toString().
321
JComboBox

• Um objeto JComboBox utiliza o MVC (Model Viewer


Controler), possibilitando ao desenvolvedor criar sua própria
massa de dados através de classes de manipulação fornecidas
no pacote Swing.
• Um objeto JComboBox pode também ser manipulado
diretamente, recebendo elementos para montagem de sua
massa de dados um a um através do método addItem.
• objetos da classe JComboBox assumem também
comportamento semelhante ao componente JTextField,
tornando possível editar os componentes selecionáveis e
pesquisar rapidamente um elemento digitando a primeira letra
dele.

322
JComboBox
Construtores
• public JComboBox(ComboBoxModel aModel)
– Cria um objeto JComboBox que recebe seus itens de um ComboBoxModel
previamente definido.
• public JComboBox(Object[] items)

– Cria um objeto JComboBox que recebe seus itens de um array de objetos. O


objeto JComboBox utilizará o método toString de cada objeto do array.

• public JComboBox(Vector items)


– Cria um objeto JComboBox que recebe seus itens de um vetor de objetos. O
objeto JComboBox utilizará o método toString de cada objeto do vetor.

• 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).

• O modelo de dados ComboBoxModel é uma interface e subclasse de


outra interface (ListModel) que contém métodos pré-definidos para
manipulação e consulta de uma massa de dados por um JComboBox.

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*

É subclasse de JComponent. O layout default é o BoxLayout.

JMenuBar( ) Constrói um objeto do tipo barra de


menu.
add(JMenu c) Adiciona o menu especificado ao final
da barra de menu.

Para atribuir a barra de menu ao JFrame desejado, basta utilizar


o método da janela:
void setJMenuBar(JMenuBar menubar)

334
JMenuItem *LFSC*

É subclasse de JAbstractButton, ou seja, os itens de menu são


simplesmente botões.

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*

Alguns métodos importantes :


•void setMnemonic(int mnemônico)
-- Herdado de JAbstractButton, atribui uma tecla de acesso ao item de menu.
ex.: itemDeMenu.setMnemonic(72); // char N.

•void setAccelerator(KeyStroke keyStroke)


-- Atribui uma tecla de atalho para execução direta do item de menu.
ex.: itemDeMenu.setAccelerator( KeyStroke.getKeyStroke(
KeyEvent.VK_B, ActionEvent.ALT_MASK));
*resultará na tecla de atalho ALT_B.

336
JMenu *LFSC*

É subclasse de JMenuItem. Utilizada para criar


os itens principais de menu ou submenus.

JMenu( ) Cria um menu principal ou submenu. Para atribuir


um ícone, utilize setText(String s).

JMenu(String s) Cria um menu principal ou submenu com


o texto especificado. Para atribuir um ícone,
utilize setIcon(Icon i).
add(String s) Cria um item de menu com o texto especificado e o
adiciona ao final do menu.
add(JMenuItem j) Adiciona o item de menu especificado ao final da
barra de menu.
addSeparator( ) Adiciona um separador como próximo (ou último)
item do menu. 337
Como criar um menu *LFSC*

1. Criar primeiramente a JMenuBar( ) e atribuí-la ao JFrame


desejado.

2. Criar os menus principais ou submenus do tipo JMenu( ) e


adicioná-los à barra de menu (JMenuBar) ou a um menu (Jmenu)
como um novo item.

3. Criar os itens de menu do tipo JMenuItem( ) e adicioná-los ao


menu principal ou ao submenu correspondente (JMenu).

4. Se houver subitens de menu, repetir os passos 2 e 3.

338
JMenuBar e JMenu - exercício *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Criar uma barra de menu (jmbBarraMenu) e atribuí-la à janela.


 Criar 3 menus principais e adicioná-los à “barra de menu” :

jmArquivo: texto “Arquivo”,


mnemônico ‘A’ (int 65)’ e ícone “tips.gif”.
jmFormatar: texto “Formatar”,
mnemônico ‘F’ (int 70).
jmSobre: texto “Sobre”, mnemônico
‘o’ (int 111).

339
JMenuItem - exercício 1 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Criar 5 itens de menu e adicioná-los ao menu “Arquivo” :

jmiNovo: texto “Novo” (20 caracteres de


largura), mnemônico ‘N’ (int 78) e tecla
aceleradora “ALT_B”.
jmiAbrir: texto “Abrir”.
jmiFechar: texto “Fechar”.
jmiSalvar: texto “Salvar”.
jmiSair: texto “Sair”.

*Incluir a instrução import java.awt.event.* . 340


JMenuItem - exercício 2 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Criar 2 submenus e adicioná-los ao menu “Formatar” :


jmCor: texto “Cor”.
Adicionar um separador (addSeparator( )).
jmFonte: texto “Fonte”.

 Criar 4 itens de menu do tipo


JRadioButtonMenuItem (agrupados) e
adicioná-los ao submenu jmCor :
jrbmiAzul: texto “Azul” e selecionado = true.
•jrbmiVerde: texto “Verde”.
•jrbmiVermelho: texto “Vermelho”.
•jrbmiPreto: texto “Preto”.
*Adicioná-los também ao ButtonGroup correspondente. 341
JMenuItem - exercício 3 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :


 Criar 4 itens de menu do tipo
JRadioButtonMenuItem (agrupados) e
adicioná-los ao submenu jmFonte :
jrbmiArial: texto “Arial” e selecionado = true.
•jrbmiCourier: texto “Courier”.
•jrbmiHelvetica: texto “Helvetica”.
•jrbmiTimesRoman: texto “TimesRoman”.
•Adicionar um separador (addSeparator( )).
*Adicioná-los também ao ButtonGroup correspondente.

 Criar 2 itens de menu do tipo


JCheckBoxMenuItem e adicioná-los ao
submenu jmFonte :
jcbmiNegrito: texto “Negrito”.
•jcbmiItalico: texto “Itálico” e selecionado = true. 342
JMenuItem - exercício 4 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Criar 1 item de menu e adicioná-lo ao menu “Sobre” :

jmiSobre: texto
“Sobre a Aplicação”
e ícone “tips.gif”.

343
Border

• A interface Border (javax.swing.border.*) permite a


criação de vários modelos de bordas.
• A classe JComponent fornece o método public void
setBorder(Border border), que permite a configuração
da borda em componentes.
• O Swing também fornece uma classe utilitária de nome
BorderFactory, que se encarrega de criar instâncias de
bordas pré-definidas.
*Incluir a instrução import javax.swing.border.*.
344
Border
Tipos pré-definidos de bordas:
BevelBorder, CompoundBorder, EmptyBorder,
EtchedBorder, LineBorder, LoweredBevelBorder,
MatteBorder, RaisedBevelBorder e TitledBorder.

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();

2. Criar o(s) objeto(s) bordas por meio da classe BorderFactory . Segue o


exemplo de uma TitledBorder com uma RaisedBevelBorder:
Border rbbBorda =
BorderFactory.createRaisedBevelBorder();
TitledBorder tbBorda = BorderFactory.createTitledBorder
( rbbBorda, "Painel com TitledBorder" );

3. Caso existam ajustes de personalização na borda, efetuá-los antes de


atribuí-la ao objeto visual. Os parâmetros abaixo se referem a uma
TitledBorder:
tbBorda.setTitlePosition(TitledBorder.TOP);
tbBorda.setTitleJustification(TitledBorder.LEFT);

4. Vincular a borda ao objeto visual:


painelComBorda.setBorder(tbBorda); 347
Border - exercício 1 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Criar 5 objetos do tipo Border :


 bbBorda: borda BevelBorder, tipo BevelBorder.RAISED, destaque
verde e sombra laranja.
 rbbBorda: borda RaisedBevelBorder.
 ebBorda: borda EtchedBorder, destaque cinza escuro e sombra
branca.
 lbBorda: borda LineBorder, cor (3, 255, 3) e espessura 3.
 lbbBorda: borda LoweredBevelBorder.

 Criar 3 objetos do tipo TitledBorder, com os seguintes parâmetros:


 tbIdentificacao: borda bbBorda e título “Identificação”.
 tbCurriculum: borda rbbBorda e título “Curriculum Vitae”.
 tbAreas : borda ebBorda e título “Áreas”.
348
Border - exercício 2 *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

 Atribuir as bordas aos seguintes componentes:


 borda rbbBorda aos jmbBarraMenu, jmiSobre,
jbDocumentosEntregues, jbSalva e jbCancela.
 borda tbIdentificacao ao painelIdentificacao.
 borda tbCurriculum ao painelCurriculum.
 borda tbAreas ao painelAreas.
 borda lbBorda ao painelBotoes
 borda lbbBorda ao jtfNome.
 borda lbbBorda aos jcbInteresse e jcbAtuacao.
349
Border - resultado final *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

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

Mostra um diálogo de erro com título “Mensagem de erro” e


mensagem “Entrada inválida”:
JOptionPane.showMessageDialog(null,
“Entrada inválida”, “Mensagem de erro”,
JOptionPane.ERROR_MESSAGE);

Mostra um diálogo com as opções yes/no e a mensagem


“Escolha uma opção”:
JOptionPane.showConfirmDialog(null,
“Escolha uma opção", “Diálogo de escolha",
JOptionPane.YES_NO_OPTION);

354
JOptionPane - exemplo 2
Mostra um diálogo de aviso com opções OK e CANCELA:

Object[] options = { "OK", "CANCELA" };


JOptionPane.showOptionDialog(null, “Continua?",
"Warning", JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE, null, options,
options[0]);

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

Mostra um diálogo que requer um String de entrada:

String inputValue = JOptionPane.showInputDialog(


“Por favor, entre o valor:");

Object[] possibleValues = { “Um", “Dois", “Três" };


Object selectedValue = JOptionPane.showInputDialog(
null,“Escolha um", "Input",
JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);

356
JFileChooser (tópico extra)

• Diálogos para selecionar arquivos.


• São herança direta de JComponent.
• Os principais tipos são : showDialog, showOpenDialog
e showSaveDialog.
• Simples de serem criados:
– JFileChooser chooser = new JFileChooser();
– int result = chooser.showDialog(parentFrame);
• result :
– JFileChooser.APPROVE_OPTION ( 0 ) se algum arquivo é
escolhido.
– JFileChooser.CANCEL_OPTION (1) se cancel é escolhido
ou a janela de diálogo é fechada.
357
JFileChooser – execute e veja o resultado !!
//File Chooser: Exemplo Simples
import javax.swing.*;
import java.io.*;

public class FileChooserExample1 {


public static void main(String[] args) {
JFrame parentFrame = new JFrame("File Chooser Example 1");
JFileChooser chooser = new JFileChooser();
int result = chooser.showDialog(parentFrame, “Título”);
File selectedFile = chooser.getSelectedFile();
System.out.println("Return value from showDialog is " + result);
if (selectedFile != null)
{
System.out.println("Chosen file is " + selectedFile.getPath());
}
else
{
System.out.println("No file was selected");
}
System.exit(0); } }
358
JOptionPane - exercício 1 *LFSC*

Componentes a serem implementados no método main da classe


CandidatoEmprego.java :
 Chamar o método showMessageDialog
da classe JOptionPane com os
seguintes parâmetros:
 Frame-pai: nulo.
 Mensagem: “Valor incorreto = “ +
valor + “. Tente outra vez !!”.
 Título: “Alerta”.
 Tipo de mensagem:
JOptionPane.WARNING_MESSAGE.

* Passar o parâmetro pela linha de comando e mostrar a caixa de


diálogo se esse valor for menor que 10.
359
JOptionPane - exercício 2 *LFSC*

Componentes a serem implementados no método main da classe


CandidatoEmprego.java :
 Chamar o método showOptionDialog da classe
JOptionPane com os seguintes parâmetros:
 Frame-pai: nulo.
 Mensagem: “O valor digitado é = “ + valor “.
Deseja continuar mesmo assim ?”.
 Título: “Pergunta”.
 Tipo de opção: JOptionPane.YES_NO_OPTION.
 Tipo de mensagem: JOptionPane.QUESTION_MESSAGE.
 Ícone: nulo.
 Array de opções: array de Object com as opções “Sim” e “Não”.
 Opção default: “Sim” (posição zero).

* Passar o parâmetro pela linha de comando e mostrar a caixa de


diálogo se esse valor for maior que 10. 360
JOptionPane - exercício 3 *LFSC*

Componentes a serem implementados no construtor da classe


CandidatoEmprego.java :
 Após mostrar a janela, chamar o método
showInputDialog da classe JOptionPane com os
seguintes parâmetros:
 Frame-pai: janela.
 Mensagem: “Escolha o nome do candidato ao
emprego: ”.
 Título: “JOptionPane com ComboBox”.
 Tipo de mensagem:
JOptionPane.PLAIN_MESSAGE.
 Ícone: tips.gif.
 Array de opções: array de Object com os nomes
“Antônio da Siva, José Afonso e Ana Rita”.
 Opção default: “Ana Rita” (posição 2).

*Capturar o retorno como String e passá-lo ao método setNome(String s) para


que o campo jtfNome seja atualizado com o valor escolhido (setText( ) ).
361
JOptionPane - exercício 4 *LFSC*

Componentes a serem implementados no construtor da classe


CandidatoEmprego.java :

 Após o exercício anterior, invocar novamente


o método showInputDialog da classe
JOptionPane com os seguintes parâmetros:
 Frame-pai: janela.
 Mensagem: “Digite os dados do
Curriculum Vitae resumido: ”.
 Título: “Entrada de dados”.
 Tipo de mensagem:
JOptionPane.INFORMATION_MESSAGE.

*Capturar a String de retorno e passá-la ao método setCurriculum(String s) para


que o campo jtaCurriculum seja atualizado com o valor escolhido (setText( ) ).
362
Gerenciadores de Layout

• Embora seja possível posicionar objetos em


coordenadas fixas (x, y), deve-se evitar essa
prática em Java.
• Isso causa problemas de portabilidade:
outras JVMs, GUIs e Window Managers
terão fontes e outros elementos em tamanhos
e proporções diferentes.
• Baseados em regras, os Layout Managers
calculam as coordenadas automaticamente.
363
Gerenciadores de Layout
• Há 7 gerenciadores de layout pré-definidos:
• FlowLayout (java.awt.*)
• GridLayout (java.awt.*)
• BorderLayout (java.awt.*)
• CardLayout (java.awt.*)
• GridBagLayout (java.awt.*)
• BoxLayout (javax.swing.*)
• SpringLayout (javax.swing.* - v 1.4)
• Implicitamente, cada container possui um gerenciador de
layout default associado. Assim, se não for declarado
nenhum gerenciador de layout para o container, será
usado o layout default.
• Um programador pode também criar novos gerenciadores
de layout.
364
Gerenciadores de Layout

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*

 Pode-se simplificar um layout pelo agrupamento de componentes em


containers do tipo JPanel (visíveis ou invisíveis).
Exemplo : distribuir componentes no ContentPane de um JFrame.

 Pode-se usar painéis dentro de painéis e cada um deles sendo


controlado por um gerenciador de layout diferente, o que também
auxilia a distribuição dos componentes visuais.
Exemplo : botões posicionados com distâncias horizontais diferentes.

 É possível atribuir painéis às áreas dos gerenciadores de layout (os que


assim o permitam) e aplicar a cada uma dessas áreas um novo
gerenciador.
Exemplo : quando não se consegue um boa distribuição direta (sem
JPanel) dos componentes na área disponibilizada por um
BorderLayout.
370
FlowLayout

• FlowLayout é o layout default em painéis e applets.


• À medida que os componentes são acrescentados ao
layout, eles são posicionados em uma linha da esquerda
para a direita.
• O tamanho para cada componente é determinado
automaticamente pelo gerenciador de layout (através da
noção de preferred size).
• Uma nova linha é automaticamente criada quando falta
espaço na linha corrente. 371
FlowLayout
• Dentro de cada linha, os componentes são automaticamente
centralizados (por default) ou alinhados à direita ou
esquerda, quando especificado:
FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
setLayout(layout);
layout.setAlignment(FlowLayout.RIGHT);
validate();
• O programador pode especificar o tamanho do espaço entre
os componentes, tanto vertical quanto horizontalmente:
FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 5, 5));
layout.setHgap(10);
layout.setVgap(10);
validate();
372
FlowLayout - exemplo
import java.awt.*;
import javax.swing.*;
public class Janela extends JFrame
{
public static void main(String args[])
{
Janela j = new Janela();
Container c = j.getContentPane();
c.setLayout (new FlowLayout());
c.add (new Button ("Eu"));
c.add (new Button ("penso,"));
c.add (new Button ("logo"));
c.add (new Button ("eu existo!"));
j.pack();
j.setVisible(true);
}
} 373
FlowLayout - exercício *LFSC*

 Considere a classe CandidatoEmprego.java. Para o seu


painelBotoes:
Coloque entre comentários a linha com o método
painel.setLayout(null).
Determine o novo layout : FlowLayout(...), com
alinhamento centralizado, espaço horizontal 10 e espaço
vertical 5.
Coloque entre comentários as linhas com o método
setBounds(...) dos botões. Não retirar o setBounds( ) do
próprio painel.
Crie 3 novos botões (Anterior, Próximo e Novo) e os
adicione ao painel.
374
FlowLayout – resultado final *LFSC*

375
GridLayout

• Componentes são colocados em um matriz com um


numero específico de linhas e colunas.
• Cada componente ocupa exatamente uma célula da
matriz.
• As células são preenchidas da esquerda para a direita e do
topo para a base.
• Todas as células da matriz são do mesmo tamanho. 376
GridLayout - exemplo
import java.awt.*;
import javax.swing.*;
public class Janela extends JFrame
{
public static void main(String args[])
{
Janela j = new Janela();
Container c = j.getContentPane();
c.setLayout (new GridLayout(2,3));
c.add (new Button ("Eu"));
c.add (new Button ("penso,"));
c.add (new Button ("logo"));
c.add (new Button ("eu"));
c.add (new Button ("existo!"));
j.pack();
j.setVisible(true);
}
377
}
GridLayout - exercício 1 *LFSC*

 Considere a classe DocumentosEntregues.java:

Coloque entre comentários a linha com o método


setLayout(null) do ContentPane da classe atual.
Determine o novo layout : GridLayout(...), com 5
linhas, 1 coluna, espaço horizontal 0 e espaço
vertical 4.
Coloque entre comentários as linhas com o
método setBounds(...) dos cinco JCheckBox´s.

378
GridLayout - exercício 2

 Crie um JFrame com 6 botões distribuídos por um


gerenciador de layoute GridLayout. Os botões são
inicialmente organizados em uma matriz com 2
linhas e 3 colunas. Quando o usuário clica em um
dos botões, o layoute é mudado para um matriz de 3
linhas e 2 colunas. Ao clicar novamente, a matriz é
transformada para 2 linhas e 3 colunas. E, assim,
sucessivamente.

379
BorderLayout

• Cria 5 áreas pré-definidas, onde um componente ou um


grupo de componentes pode ser colocado:
NORTH, SOUTH, EAST, WEST e CENTER.
• O programador especifica a área na qual um componente
deve aparecer.
• As dimensões relativas das áreas são governadas pelo
tamanho dos componentes inseridos no layout.
• Dica: colocar o componente com maior tamanho no centro.
380
BorderLayout - exemplo
import java.awt.*;
import javax.swing.*;
public class Janela extends JFrame
{
public static void main(String args[])
{
Janela j = new Janela();
Container c = j.getContentPane();
c.setLayout (new BorderLayout());
c.add (new Button ("Eu"),BorderLayout.NORTH);
c.add (new Button ("penso,"),BorderLayout. SOUTH);
c.add (new Button ("logo"),BorderLayout.EAST);
c.add (new Button ("eu"),BorderLayout.WEST);
c.add (new Button ("existo"),BorderLayout.CENTER);
j.pack();
j.setVisible(true);
}
381
}
BorderLayout - exercício 1 *LFSC*

 Considere a classe CandidatoEmprego.java. Para o


seu painelCurriculum:
Coloque entre comentários a linha com o método
setLayout(null).
Determine o novo layout : BorderLayout( ).
Coloque entre comentários a linha com o método
setBounds(...) do JScrollPane.
Posicione o JScrollPane no “Centro” da área
disponível do painel.

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*

 Considere a classe CandidatoEmprego.java. Para todos


os componentes, organize-os na tela apenas utilizando os
gerenciadores de layout adequados:

Coloque entre comentários todas as linhas com o


método setLayout(null).
Coloque entre comentários todas as linhas com o
método setBounds(...).
Determine os novos gerenciadores de layout, de
modo que os componentes sejam devidamente dispostos na tela e
apresentem a mesma organização anterior (quando se usava o
setBounds( ) ).
•Dica: use o gerenciador FlowLayout com o método setPreferredSize(Dimension
384 d).
CardLayout

• Componentes governados por um CardLayout são


“empilhados” de tal forma que somente um componente
é mostrado na tela.
• Componentes são ordenados de acordo com a ordem na
qual eles são inseridos no container.
• Métodos controlam qual componente é visível no
container.
385
CardLayout - exemplo
import java.awt.*;
import java.awt.event.*;
public class ExemploCardLayout extends Frame
implements ItemListener {
Panel paineisAlternativos = new Panel();
String botoes = "Panel com botões";
String texto = "Panel com TextField";

public ExemploCardLayout() {
setLayout(new BorderLayout());
Panel choicePanel = new Panel();

Choice decisao = new Choice();


decisao.addItem(botoes);
decisao.addItem(texto);
decisao.addItemListener(this);
choicePanel.add(decisao);
add("North", choicePanel); 386
CardLayout - exemplo - cont.

paineisAlternativos.setLayout(new CardLayout());

Panel alt1 = new Panel();


alt1.add(new Button("Botão 1"));
alt1.add(new Button("Botão 2"));
alt1.add(new Button("Botão 3"));

Panel alt2 = new Panel();


alt2.add(new TextField("TextField", 20));

paineisAlternativos.add(botoes, alt1);
paineisAlternativos.add(texto, alt2);
add("Center", paineisAlternativos);
}
387
CardLayout - exemplo - cont.

public void itemStateChanged(ItemEvent e)


{
CardLayout cl =
(CardLayout)paineisAlternativos.getLayout();
cl.show(paineisAlternativos, (String)e.getItem());
}

public static void main(String args[])


{
ExemploCardLayout window = new ExemploCardLayout();
window.setTitle("ExemploCardLayout");
window.pack();
window.show();
}
}
388
GridBagLayout

• O gerenciador de layout GridBagLayout é o mais versátil e mais complexo


de todos os gerenciadores de layout predefinidos.
• Projetado com uma matriz bi-dimensional de colunas e linhas.
• Contudo, nem todas as células na matriz são do mesmo tamanho.
• Componentes podem se expandir em várias colunas e linhas.
• Cada componente em um GridBagLayout é associado com um conjunto de
restrições definidas pela classe GridBagConstraints.

389
GridBagLayout

• Cada linha pode ter um tamanho próprio


• Cada coluna pode ter um tamanho próprio
• O número de linhas e de colunas é determinado
dinamicamente
• GridBagLayout usa o preferred size dos componentes
para determinar o tamanho de cada célula
• O tamanho e a posição de cada componente são
determinados por um GridBagConstraints, através do
método (da classe GridBagLayout) setConstraints.

390
GridBagLayout - exemplo

Panel p = new Panel();


GridBagLayout g = new GridBagLayout();
p.setLayout(g);
GridBagConstraints c = new GridBagConstraints();

. . . (atribui as restrições)

Label labelRua = new Label("Rua:", Label.LEFT);


g.setConstraints(labelRua,c);
p.add(labelRua);

391
GridBagConstraints

• gridwidth e gridheight: especifica o número de


linhas e colunas na área de display. Default = 1.
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = 2;
c.gridheight = 1;
• anchor: especifica o alinhamento: CENTER,
NORTH, NORTHEAST, EAST, SOUTHEAST,
SOUTH, SOUTHWEST, WEST, NORTHWEST.
c.anchor = GridBagConstraints.WEST;

392
GridBagConstraints
• Usar GridBagConstraints.REMAINDER para
especificar que o componente é o último da linha ou
coluna.
c.gridwidth = GridBagConstraints.REMAINDER;

• fill:Usado para indicar que os componentes devem


utilizar (ou não) todo espaço da área de display.
Valores: NONE (default), HORIZONTAL,
VERTICAL e BOTH.
c.fill = GridBagConstraints.BOTH;

393
GridBagConstraints

• insets: indica a separação entre os componentes,


através de um objeto Insets.

• Insets(int top, int left, int bottom, int right)

c.insets = new Insets(5, 5, 5, 5);

394
8 - Eventos AWT

395
O que são eventos?

 Quando o usuário interage com uma interface de


aplicativo final (teclado, mouse etc), isso causa o
disparo de alguma ação: o evento.
 Mais propriamente, eventos são objetos que
descrevem a ação ocorrida.
 Qualquer objeto pode ser notificado de um evento.
 Existem vários tipos de classes de eventos para
tratar as diversas categorias de ações desencadeadas
pelo usuário final.
*Incluir a instrução import java.awt.event.* . 396
Como os eventos são processados?
• Através de um modelo de delegação de eventos.
Os componentes da AWT implementam rotinas de
manipulação de eventos (listener) com o objetivo de
receber eventos.
O componente que gera o evento é chamado de fonte
do evento (event source).
O componente que trata o evento é chamado de
manipulador de evento (event handler) ou ouvinte de
evento (event listener).
Normalmente a manipulação do evento é delegada para
uma classe separada do componente-fonte desse
evento.
397
Esquema do modelo de delegação
Fonte do evento (event source)

FRAME Manipulador ou ouvinte do evento


(Action Listener)
PAINEL

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*

1. Um objeto chama um único tipo de manipulador de evento.


Objeto Evento
Manipulador de evento

1. Vários objetos chamam o mesmo manipulador de evento.


Objeto 1
Evento
Objeto 2 Manipulador de evento
Objeto 3

1. Um objeto chama vários manipuladores para tratar um único


tipo de evento. Manipulador de evento 1
Evento
Objeto Manipulador de evento 2
Manipulador de evento 3
399
Modelo de delegação - exemplo
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TesteEvento {


public static void main (String args[])
{
JFrame j = new JFrame("Teste de evento");
JButton b = new JButton("Pressione-me!");
b.addActionListener(new ActionDemo());
j.getContentPane().add(b, BorderLayout.CENTER);
j.pack();
j.setVisible(true);
}
}

class ActionDemo implements ActionListener {


public void actionPerformed (ActionEvent e){
System.out.println("Acao executada");
}
}//classe externa de tratamento do evento
400
Eventos gerados pelos componentes da
AWT

• Cada componente da AWT possui um conjunto de


tipos de eventos a ele associado.
• Os componentes que podem gerar eventos possuem
métodos para adicionar ou remover “listeners”.
addActionListener
removeActionListener
 A seguir são relacionados os tipos de eventos que
cada componente da AWT pode gerar.

401
Alguns dos eventos gerados pelos componentes AWT/Swing

Componentes Tipos de eventos que os componentes podem gerar


mouse
Action Adjust. Component Container Focus item key mouse text window
motion

button      

checkbox       

combo box       

Component     

Container      

dialog       

frame       

label     

list       

menu item 

panel      

radio button       

scrollbar      

text area      

text field       

window       

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/events/eventsandcomponents.html.


402
Interface de eventos listener AWT

• Os tipos de eventos gerados pelos componentes da


AWT são implementações da interface “listener”.
• O nome da interface associado ao tipo de evento é
definido como sendo o nome do evento, acrescido da
palavra “Listener”.
Exemplo: tipo de evento: Action
interface: ActionListener

• A seguir são descritas as interfaces dos eventos AWT.

403
Interface de eventos listener AWT (1)

Interface Listener Classe Adapter Métodos


ActionListener ---------- actionPerformed(ActionEvent)
AdjustmentListener --------- adjustmentValueChanged(adjustmentEvent)
ComponentListener ComponentAdapter componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentRezised(ComponentEvent)
componentShown(ComponentEvent)
ContainerListener ContainerAdapter componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener FocusAdapter focusGained(FocusEvent)
focusLost(FocusEvent)
ItemListener -------- itemStateChanged(ItemEvent)
KeyListener KeyAdapter keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener MouseAdapter mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseRealesed(MouseEvent)
404
Interface de eventos listener AWT (2)

Interface Listener Classe Adapter Métodos


MouseMotionListener MouseMotionAdapter mouseDragged (MouseEvent)
mouseMoved(MouseEvent)
TextListener ------ textValueChange(TextEvent)
WindowListener WindowAdapter windowActived(WindowEvent)
windowClosed(WindowEvent)
windowClosing(WindowEvent)
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent)
windowIconified(WindowEvent)
windowOpened(WindowEvent)

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/events/api.html.

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*

 Fazer com que a própria classe (a que contém o objeto que


gera o evento) implemente a interface (EventoListener) ou
estenda a classe abstrata (EventoAdapter) do evento.
Exemplo: public class MinhaClasse implements WindowListener { }
ou
public class MinhaClasse extends WindowAdapter { }.

 Construir uma classe externa que implemente a interface


ou estenda a classe abstrata do evento.
Exemplo: public class MinhaClasse { … }
public class EventoExt implements WindowListener { }
ou
public class EventoExt extends WindowAdapter { }.
408
As 4 maneiras de implementar um
evento (2) *LFSC*

 Construir uma classe-membro interna que implemente a


interface ou estenda a classe abstrata do evento.
Exemplo: public class MinhaClasse { …
class EventoInt implements WindowListener { }
ou
class EventoInt extends WindowAdapter { } }.
 Construir uma classe anônima interna que implemente a
interface ou a classe abstrata do evento.
Exemplo: public class MinhaClasse { …
janela.addWindowListener( new WindowAdapter( )
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
} }); }. 409
O que um evento requer *LFSC*

 Primeiramente, deve-se implementar o evento, escolhendo


uma das 4 opções mostradas nos dois slides anteriores.
 Adicionar uma instância do ouvinte de evento ao(s)
componente(s) desejado(s), conforme a implementação
escolhida (slides anteriores):
1. componente.addWindowListener( this );
2. componente.addWindowListener( new EventoExt( ) );
3. componente.addWindowListener(new EventoInt( ) );
4. Já é adição e também implementação do evento.
 Implementar corretamente o método da interface (ou classe
abstrata) que sabe tratar o evento. Deve-se optar por uma
implementação leve para evitar problemas de performance, pois
o Java usa a mesma event-dispatching thread para eventos e
painting. 410
Como escrever WindowListener

• São gerados por um objeto janela (Window) após a


janela ser: aberta, fechada, iconizada, desiconizada,
ativada e desativada.
• A interface WindowListener e a classe abstrata
WindowAdapter possuem os métodos a seguir:
– void windowOpened(WindowEvent)
• é executado assim que a janela é mostrada pela primeira vez.
– void windowClosing(WindowEvent)
• é executado assim que o usuário solicita o fechamento da janela.
Para fechar a janela, usa-se o método dispose() ou
setVisible(false).
411
Como escrever WindowListener

– 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

• Cada método da WindowListener tem


um único parâmetro: um objeto do tipo
WindowEvent. A classe WindowEvent
possui um método muito útil:
– Window getWindow()
• retorna a janela que gerou o evento.

414
WindowListener - exercício LFSC*
*

Na classe CandidatoEmprego.java, implementar uma classe


anônima interna de WindowAdapter que permita: a)fechar a janela
atual ( System.exit(0) ) e b)emitir um alerta de que a aplicação será
encerrada.

*Consulte o método setDefaultCloseOperation(int i) de JFrame para saber como proceder


se o usuário retroceder na sua decisão de fechar a janela da aplicação. 415
Como escrever um ActionListener
• São os eventos mais fáceis e os mais comumente
implementados.
• Implementa-se um ActionListener para responder a
uma intervenção do usuário.
• Quando o usuário clicar um botão, o duplo clique em
uma lista, a escolha em um menu ou pressionar o
retorno de um campo texto, o gerenciador de eventos
indicará que uma ação ocorreu.
O resultado é o envio de uma mensagem “actionPerformed”
a todos os ActionListeners que estão registrados no
componente-fonte.
416
ActionListener para botões – exemplo (1)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionListenerDemo extends JFrame
implements ActionListener {
JButton b1, b2, b3;
JPanel p1;
static final String DISABLE = "disable";
static final String ENABLE = "enable";
public ActionListenerDemo() {
p1 = new JPanel();
b1 = new JButton("Desativa o botão do meio");
b1.setActionCommand(DISABLE);
b2 = new JButton("Botão do meio");
b3 = new JButton("Ativa botão do meio");
b3.setEnabled(true);
b3.setActionCommand(ENABLE);
b1.addActionListener(this);
b3.addActionListener(this);
417
ActionListener para botões – exemplo (*2)
p1.add(b1);
p1.add(b2);
p1.add(b3);
getContentPane().add(p1);
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command == DISABLE)
b2.setEnabled(false);
else
b2.setEnabled(true);
}
public static void main(String args[]) {
ActionListenerDemo j = new ActionListenerDemo();
j.setTitle("Vários Botões");
j.pack();
j.setVisible(true);
}
} //Fim
418
A classe ActionEvent

• O método actionPerformed tem um parâmetro único:


o objeto ActionEvent. A classe ActionEvent define
dois métodos bastante úteis:
 String getActionCommand( )
• retorna o string associado com a ação. A maioria dos
objetos que podem gerar ações suportam o método
chamado setActionCommand que permite atribuir este
string. Se o comando de ação não for atribuido
explicitamente, então ele será o texto associado ao
componente. Para objetos com múltiplos itens e,
conseqüentemente, múltiplas ações possíveis, o
comando ação é geralmente o nome do item selecionado.

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

• Quando o usuário digita os dados em um


JTextField ou JPasswordField e pressiona
a tecla ENTER, um evento de ação ocorre.

• JTextArea não possui eventos de ação


como JTextField. Algum evento externo é
que costuma determinar quanto o texto
nessa área deve ser processado.

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)

class MeuEvento implements ActionListener {


public void actionPerformed (ActionEvent evt) {
String text = textField.getText();
textArea.append (text + newline);
textField.selectAll();
}
} //classe-membro interna de tratamento do evento

public static void main(String args[])


{
ActionListenerDemo j = new ActionListenerDemo();
j.setTitle("ActionListener com Texto");
j.pack();
j.setVisible(true);
}
} //Fim

423
ActionListener – exercício 1 *LFSC*

Na classe CandidatoEmprego.java, implementar uma classe-membro interna


de ActionListener que permita chamar DocumentosEntregues.java por meio do
botão jbDocumentosEntregues :

424
ActionListener – exercício 2 *LFSC*

Quanto aos demais botões:


Anterior, Próximo, Novo e Salva : implementar uma classe externa de
ActionListener que emita a mensagem “Botão + TextoDoBotão + ainda não
implementado”, título “Informação” e tipo Informação, por meio de
JOptionPane. showMessageDialog( ). Após isso, atribuir uma instância da
classe de evento a cada um dos botões relacionados.
Salva : implementar uma classe externa de ActionListener que emita a
mensagem “Você clicou no ClasseDoBotão + TextoDoBotão”, título
“Informação” e tipo Informação, por meio de showMessageDialog( ). Após
isso, atribuir também uma instância desta classe ao botão acima.
Cancela : implementar uma classe anônima interna de ActionListener que
permita fechar a janela (System.exit(0)). Após isso, atribuir uma instância
desta classe ao botão acima.

*Métodos a serem utilizados: - evento.getActionCommand( ) e


- (evento.getSource( ).getClass( ).getName( )).
425
Como escrever um ItemListener
• Eventos em itens são gerados por componentes que
implementam uma interface que tem a característica de
permitir selecionar itens.
• Estes componentes mantém o estado, geralmente,
ligado (on) ou desligado(off) para um ou mais itens. Os
componentes na AWT que geram este tipo de evento
são: checkboxes, checkbox menu itens, choices e lists.
• A interface ItemListener contém um único método.
 void itemStateChanged(ItemEvent)
• é chamado pela AWT após a ocorrência de uma mudança de estado
no componente.
426
A classe ItemEvent
• O método itemStateChanged possui um único
parâmetro: um objeto ItemEvent . A classe ItemEvent
possui os seguintes métodos:
– Object getItem( )
• retorna o componente associado ao item cujo estado tenha mudado.
Freqüentemente, o retorno é um String contendo um texto sobre o
item selecionado. No caso de uma lista de itens (List), ele é o inteiro
(Integer) que especifica o índice do item selecionado.
– ItemSelectable getItemSelectable( )
• retorna o componente que gerou o evento (item).
– int getStateChange( )
• retorna o novo estado do item, que pode ser SELECTED e
DESELECTED.
427
ItemListener – exemplo 1 (1)

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)

p1.add(new JButton("Botao 1"));


p1.add(new JButton("Botao 2"));
p1.add(new JButton("Botao 3"));
JPanel p2 = new JPanel ();
p2.add (new JTextField("TextField", 20));
cards.add (BUTTONPANEL,p1);
cards.add (TEXTPANEL,p2);
getContentPane().add(cards, BorderLayout.CENTER);
}
public void itemStateChanged(ItemEvent e) {
CardLayout cl = (CardLayout) (cards.getLayout());
cl.show (cards, (String) e.getItem());
}
public static void main(String args[]) {
ItemListenerDemo j = new ItemListenerDemo();

j.setTitle("ItemListener com CardLayout");


j.pack();
j.setVisible(true);
}
}
431
ItemListener – exercício *LFSC*

Na classe CandidatoEmprego.java, implementar uma classe


externa de ItemListener que permita mostrar o índice e o texto do
item selecionado de jcbInteresse, por meio de JOptionPane.
showMessageDialog( ) :

432
9 - Applet

433
Applet - ordem de inicialização

 init: executado quando a applet é carregada ou recarregada


(menos para Netscape).
 start: executado após o método init ou quando a página é
recarregada.
 stop: executado quando o usuário muda de página,
continuando na memória, ou quando a execução do browser é
encerrada.
 destroy: executada quando a applet for ser removida da
memória.

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

public void stop() {


adicionaMsg("entrou no stop() "); }
public void adicionaMsg(String msg) {
System.out.println(msg);
mensagem.append(msg);
repaint(); }
public void paint(Graphics g) {
g.drawString(mensagem.toString(), 5,15);

}
} //Fim.

436
Applet e HTML

< applet codebase = URL (opcional)

code = arquivoExecutável (obrigatório)

width = pixelLargura (obrigatório)

height = pixelAltura > (obrigatório)

< param name = nome value = valor >


. . .
</applet>

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