440
1 Linguagem de Programação Orientação a Objetos Linguagem Java UNICEUB Jorge Farias Mar/2008

o Windows não Consegue Encontrar Null

Embed Size (px)

Citation preview

Page 1: o Windows não Consegue Encontrar Null

1

Linguagem de Programação

Orientação a Objetos Linguagem Java

UNICEUB

Jorge Farias

Mar/2008

Page 2: o Windows não Consegue Encontrar Null

2

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.

Page 3: o Windows não Consegue Encontrar Null

3

• Utilizar o ambiente de desenvolvimento da linguagem Java.

• Identificar e utilizar os principais componentes da linguagem Java.

• Desenvolver aplicações na linguagem Java.

Objetivos Específicos

Page 4: o Windows não Consegue Encontrar Null

4

Principais Tópicos

• Visão geralO ambiente de desenvolvimento JDKCaracterísticas geraisUm programa simplesConvenções

• Estrutura da linguagemComentáriosTipos primitivosOperadoresControle de fluxo

Page 5: o Windows não Consegue Encontrar Null

5

Principais Tópicos

• Introdução a Orientação a ObjetosVisão geral de orientação a objetosClassesObjetosCriação de objetos em JavaReferência a membros de objetos e classes

• Manipulação de Array, Integer e StringManipulação de Array, Integer e StringClasse IntegerArrayStringConversão de tiposStringBuffer

Page 6: o Windows não Consegue Encontrar Null

6

Principais Tópicos

• Classes e objetosConceitos de orientação a objetosDeclaração de classes e métodosInstanciação e referência a objetos e métodosAbstraçãoEncapsulamentoHerançaTroca de MensagemPolimorfismoSobreposição de métodosSobrecarga de métodos

Page 7: o Windows não Consegue Encontrar Null

7

• Classes em Java - tópicos avançadosVectorDados estruturados Classes AbstratasInterfacesClasses Aninhadas ou Internas

• Interfaces gráficas em JavaVisão geral da AWT e SWINGHierarquiaUsando cada um dos seus componentes

Principais Tópicos

Page 8: o Windows não Consegue Encontrar Null

8

• AWTUsando Gerenciadores de Layout Escrevendo Manipuladores de Eventos

• Applets

Principais Tópicos

Page 9: o Windows não Consegue Encontrar Null

9

1 - Visão Geral

Page 10: o Windows não Consegue Encontrar Null

10

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.comwww.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%;.

Page 11: o Windows não Consegue Encontrar Null

11

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

Page 12: o Windows não Consegue Encontrar Null

12

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.

Page 13: o Windows não Consegue Encontrar Null

13

• Eliminar práticas de codificação que afetam a robustez do código:Aritmética de ponteirosAlocação e desalocação de memória

• Prover um maneira do programa executar mais de “thread de atividade” ao mesmo tempo.

As principais metas – cont.

Page 14: o Windows não Consegue Encontrar Null

14

Possui as características:

• SimplicidadeSintaxe 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

Page 15: o Windows não Consegue Encontrar Null

15

Tecnologia de Objetos

Estado

Var1

Var2

Var3

Var4

Comportamento

Met1

Met3 Met4

Met2

Mensagem

Mensagem

Mensagem

• Interfaces bem definidas

• Reusabilidade

Page 16: o Windows não Consegue Encontrar Null

16

Suporte a Redes

TCP/IP

HTTP

FTP

URL

• Bibliotecas padronizadas com suporte para protocolos

• Facilidade de interconexão

• Fácil acesso a recursos remotos

Page 17: o Windows não Consegue Encontrar Null

17

Linguagem Robusta e Segura

• Tipagem estáticaTipagem estáticaVerificação em tempo de compilação

• Avançado modelo de referênciasAvançado modelo de referênciasNão existe manipulação direta de ponteirosElimina invasão indevida de área de memória

• Programação distribuídaProgramação distribuídaTécnicas de autenticação via encriptação

Page 18: o Windows não Consegue Encontrar Null

18

Heterogeneidade

Bytecode

CódigoFonte

Máquina virtual JAVA

Compilação

Interpretação

Page 19: o Windows não Consegue Encontrar Null

19

Programação Concorrente

• Múltiplas linhas de controle

• Máquinas paralelas• paralelismo

• Máquinas convencionais• concorrência

• Primitivas de sincronização

Processo

Linhas de controle

Page 20: o Windows não Consegue Encontrar Null

20

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

A arquitetura Java

Page 21: o Windows não Consegue Encontrar Null

21

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.

Page 22: o Windows não Consegue Encontrar Null

22

A arquitetura Java

• Segurança do códigoOs 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.

Page 23: o Windows não Consegue Encontrar Null

23

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.

Page 24: o Windows não Consegue Encontrar Null

24

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.

Page 25: o Windows não Consegue Encontrar Null

25

javac Hello.java

Hello.class

Compile Carregadorde Classe

Verificador do

Bytecode

JITGerador de

código

Interpretador

Runtime

Hardware

Runtime

O ambiente de programa java,onde podemos ver como javaforça a segurança do código

Page 26: o Windows não Consegue Encontrar Null

26

A Plataforma Java

• javac

• javadoc

• java

• appletviewer

Http://www.javasoft.com

O JDK pode ser copiado de:

Page 27: o Windows não Consegue Encontrar Null

27

A Plataforma Java

Sua classe.java

Byte code gerado.class

Sua aplicaçãoJava

Documentação HTML da classe

Código HTML

Sua applet Java

javac

javadoc

aplletviewer

java

referenciadono

Page 28: o Windows não Consegue Encontrar Null

28

Meu Primeiro Programa

// Comentario de uma linha

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

Page 29: o Windows não Consegue Encontrar Null

29

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!

Page 30: o Windows não Consegue Encontrar Null

30

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

Page 31: o Windows não Consegue Encontrar Null

31

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.

Page 32: o Windows não Consegue Encontrar Null

32

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.

Page 33: o Windows não Consegue Encontrar Null

33

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

O trecho do programa

public:

É um qualificador do método que indica que este é acessível externamente a esta classe (para outras classes que eventualmente seriam criadas), não se preocupe com ele agora, apenas declare todos os métodos como public

Page 34: o Windows não Consegue Encontrar Null

34

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

Page 35: o Windows não Consegue Encontrar Null

35

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.

Page 36: o Windows não Consegue Encontrar Null

36

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.

Page 37: o Windows não Consegue Encontrar Null

37

(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

Page 38: o Windows não Consegue Encontrar Null

38

{ ... }

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

Page 39: o Windows não Consegue Encontrar Null

39

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.

Page 40: o Windows não Consegue Encontrar Null

40

Exibindo a saída em uma janela ou caixa de diálogo

• Utilizando a classe JOptionPane do pacote swing.

Barra de título

O botão OK permite o usuáriofechar a caixa de diálogo

A região reservadaao diálogo de mensagem

Ícone apropriado

Page 41: o Windows não Consegue Encontrar Null

41

Tipos de diálogo de mensagem

JOptionPane.ERROR_MESSAGE

JOptionPane.INFORMATION_ MESSAGE

JOptionPane.WARNING_MESSAGE

JOptionPane.QUESTION_MESSAGE

JOptionPane.PLAIN_MESSAGE

Exibe um diálogo que indica um erro.

Exibe um diálogo informacional.

Exibe um diálogo de advertência.

Exibe um diálogo que impõe uma pergunta ao usuário. Em botões Yes ou NO.

Exibe um diálogo somente com mensagem.

i

!

?

Sem ícone

Tipo Ícone Descrição

Page 42: o Windows não Consegue Encontrar Null

42

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

}

}

Page 43: o Windows não Consegue Encontrar Null

43

Primeiro programa gráfico - cont.

• O resultado:

Page 44: o Windows não Consegue Encontrar Null

44

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

Page 45: o Windows não Consegue Encontrar Null

45

2 - Estrutura da Linguagem

Page 46: o Windows não Consegue Encontrar Null

46

Estrutura da linguagem

Comentários

Tipos primitivos

Operadores

Controle de fluxo

Page 47: o Windows não Consegue Encontrar Null

47

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

Page 48: o Windows não Consegue Encontrar Null

48

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>

Page 49: o Windows não Consegue Encontrar Null

49

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

Page 50: o Windows não Consegue Encontrar Null

50

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;

}

Page 51: o Windows não Consegue Encontrar Null

51

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

Page 52: o Windows não Consegue Encontrar Null

52

Palavras reservadas

abstract do implements private throwboolean double import protected throwsbreak else instanceof public transientbyte extends int return truecase false interface short trycatch final long static voidchar finally native super volatileclass float new switch whilecontinue for null synchronizeddefault if package this

Nota: atualmente as seguintes palavras reservadas não são utilizadas: cast, const, future, generic, goto, inner, operator, outer, rest, var.

Page 53: o Windows não Consegue Encontrar Null

53

Tipos Primitivos

Tipo Tamanho Valor Mín Valor MáxWrapper boolean 1-bit – – Booleanchar 16-bit Unicode 0 Unicode216- 1 Characterbyte 8-bit -128 +127 Byteshort 16-bit -215 +215 – 1Shortint 32-bit -231 +231 – 1Integerlong 64-bit -263 +263 – 1Longfloat 32-bit IEEE754 IEEE754 Floatdouble 64-bit IEEE754 IEEE754Doublevoid – – – Void

Page 54: o Windows não Consegue Encontrar Null

54

Declaração de variáveis e constantes

int x, y; // declarando variáveis inteirasx = 6;y=1000; // atribuindo valores a variável

float z = 3.414f; // ponto flutuantedouble 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; // Constantesfinal int CONSTANTE;CONSTANTE = 1; // somente admite uma atribuição

Page 55: o Windows não Consegue Encontrar Null

55

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.

Page 56: o Windows não Consegue Encontrar Null

56

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.

Page 57: o Windows não Consegue Encontrar Null

57

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.

Page 58: o Windows não Consegue Encontrar Null

58

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.

Page 59: o Windows não Consegue Encontrar Null

59

Controle de Fluxo

Categoria Comandodecisão if-else, switch-caseloop for, while, do-whilediversos break, continue, label: , return

Page 60: o Windows não Consegue Encontrar Null

60

Controle de Fluxo - if

if (expressão booleana)comando ou bloco

elsecomando ou bloco

Page 61: o Windows não Consegue Encontrar Null

61

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

Page 62: o Windows não Consegue Encontrar Null

62

Controle de Fluxo - while

while (expressão booleana)comando ou bloco

docomando ou bloco

while(expressão booleana);

Page 63: o Windows não Consegue Encontrar Null

63

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;

}

}

}

Page 64: o Windows não Consegue Encontrar Null

64

Exemplo de uso - do whilepublic 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);

}

}

Page 65: o Windows não Consegue Encontrar Null

65

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 blocoexpressão de iteração;

}

Page 66: o Windows não Consegue Encontrar Null

66

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

}}

Page 67: o Windows não Consegue Encontrar Null

67

Controle de Fluxo - switch

switch (expressão1){case expressão2:

comando ou blocobreak;

. . .case expressãon:

comando ou blocobreak;

default:comando ou blocobreak;

}

Page 68: o Windows não Consegue Encontrar Null

68

Exemplo de uso - switchpublic 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"); }

} } }

Page 69: o Windows não Consegue Encontrar Null

69

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

Page 70: o Windows não Consegue Encontrar Null

70

3 - Introdução a Orientação a Objetos

Page 71: o Windows não Consegue Encontrar Null

71

Orientação a Objetos

• Componentes:ObjetosClasses

Conceitos a serem abordados:

Page 72: o Windows não Consegue Encontrar Null

72

Orientação a Objetos

• Propósitos da Programação Orientada a ObjetosProver 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.

Page 73: o Windows não Consegue Encontrar Null

73

Classes - conceitos

• definem a estrutura e o comportamento de um tipo de objeto;

• atuam como templates;• permitem a instanciação de um ou

mais objetos de um mesmo tipo.

Nome

Atributos

Métodos

Page 74: o Windows não Consegue Encontrar Null

74

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

Page 75: o Windows não Consegue Encontrar Null

75

Classes

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.

Classes - Visão em POO:

Classe

Objetos

Joaquim José Maria

Empregado

Page 76: o Windows não Consegue Encontrar Null

76

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.

Page 77: o Windows não Consegue Encontrar Null

77

Objetos

Visão do mundo real:• Na nossa vida, estamos cercados por objetos.

Page 78: o Windows não Consegue Encontrar Null

78

Objetos

Um conjunto distinto de atributos e métodos que representam entidades do mundo real, implementados por software e gerados (instanciados) através de classes.

Visão em POO:

AtributosMétodos

Métodos

Métodos

Métodos

Page 79: o Windows não Consegue Encontrar Null

79

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;

Page 80: o Windows não Consegue Encontrar Null

80

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.

Page 81: o Windows não Consegue Encontrar Null

81

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.

Page 82: o Windows não Consegue Encontrar Null

82

Criando objetos - cont

• Alocação e layoutNo corpo do método, a declaração

Automovel gol aloca espaço somente para a referência:

O comando new Automovel() aloca e inicializa o espaço:

String modelo

String cor

int ano

????????

?

?

0

gol

Page 83: o Windows não Consegue Encontrar Null

83

Criando objetos - cont

• Alocação e layoutFinalmente, atribuindo a variável referência o

endereço do objeto alocado.

gol = new Automovel();

gol

String modelo

String cor

int ano

?

?

0

0x01abdfe

Page 84: o Windows não Consegue Encontrar Null

84

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

Page 85: o Windows não Consegue Encontrar Null

85

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

Page 86: o Windows não Consegue Encontrar Null

86

Atributos

• propriedades associadas a uma classe e seus objetos;

• atributos armazenam resultados do processamento feito pelos métodos da classe.

• Nome • Cor do pêlo• Idade

atributos do objeto

• Número de patas

atributos da classe (estáticos)

instância

Page 87: o Windows não Consegue Encontrar Null

87

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

Page 88: o Windows não Consegue Encontrar Null

88

Métodos

• Operações que manipulam o estado do objeto.

• Podem fazer parte da interface do objeto ou realizar uma função interna.

• acender• apagar• indicarVoltagem

MétodosClasse: LâmpadaObjeto: philips60w

Page 89: o Windows não Consegue Encontrar Null

89

Referência a Membros de Objetos e Classes

• 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

< resultado = referência.método( parâmetros )>Método

fusca.ligaMotor();

< referência.variável>Variável

fusca.ano = 69;

Page 90: o Windows não Consegue Encontrar Null

90

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;

}

Page 91: o Windows não Consegue Encontrar Null

91

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

Page 92: o Windows não Consegue Encontrar Null

92

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.

Page 93: o Windows não Consegue Encontrar Null

93

Exemplo: dados estáticosclass 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); }}

Page 94: o Windows não Consegue Encontrar Null

94

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

Page 95: o Windows não Consegue Encontrar Null

95

Exemplo: métodos estáticosclass 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); }}

Page 96: o Windows não Consegue Encontrar Null

96

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;

Page 97: o Windows não Consegue Encontrar Null

97

4 - Manipulação de Array, 4 - Manipulação de Array, Integer e StringInteger e String

Page 98: o Windows não Consegue Encontrar Null

98

O pacote lang e util

Classe Integer

Array

Classe String

Classe StringBuffer

Classe StringTokenizer

Page 99: o Windows não Consegue Encontrar Null

99

Integer

• Um objeto do tipo Integer contém uma variável do tipo int.

Construtor OperaçãoInteger(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.

Page 100: o Windows não Consegue Encontrar Null

100

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.

Page 101: o Windows não Consegue Encontrar Null

101

Alguns métodos da classe Integer - cont.

Métodosint 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.

Page 102: o Windows não Consegue Encontrar Null

102

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.

Page 103: o Windows não Consegue Encontrar Null

103

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 3array5.length 5

Page 104: o Windows não Consegue Encontrar Null

104

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 3array6[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 3array9[0].length 3array9[1].length 2array9[2].length 1

Page 105: o Windows não Consegue Encontrar Null

105

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

Exemplo de uso - array

Page 106: o Windows não Consegue Encontrar Null

106

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.

Page 107: o Windows não Consegue Encontrar Null

107

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.

Page 108: o Windows não Consegue Encontrar Null

108

A classe String representa uma seqüência de literais (tipo char).

String str = "abc";

char data[] = {'a', 'b', 'c'};

String str = new String(data);

String

Page 109: o Windows não Consegue Encontrar Null

109

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.

Page 110: o Windows não Consegue Encontrar Null

110

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.

Page 111: o Windows não Consegue Encontrar Null

111

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.

Page 112: o Windows não Consegue Encontrar Null

112

StringMé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.

Page 113: o Windows não Consegue Encontrar Null

113

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

Page 114: o Windows não Consegue Encontrar Null

114

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.

Page 115: o Windows não Consegue Encontrar Null

115

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

String str1 = "Hello";

str1 = str1 + " World";

str1 aponta para um novo objeto String com valor: "Hello World".

String

Page 116: o Windows não Consegue Encontrar Null

116

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

}

}

String

Page 117: o Windows não Consegue Encontrar Null

117

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.

Page 118: o Windows não Consegue Encontrar Null

118

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.

Page 119: o Windows não Consegue Encontrar Null

119

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 “;”

Page 120: o Windows não Consegue Encontrar Null

120

Conversão de tipos

Conversão: int para String

int i = 10;

Integer intObj = new Integer(i);

String str1 = intObj.toString();

Page 121: o Windows não Consegue Encontrar Null

121

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

Page 122: o Windows não Consegue Encontrar Null

122

Entrada de dados via janela ou caixa de diálogo

• Utilizando a classe JOptionPane do pacote swing.

Barra de título

O botão OK permite o usuárioinformar valor e Cancel retorna null

A região reservadapara entrada de dados

Ícone apropriado

Page 123: o Windows não Consegue Encontrar Null

123

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

Page 124: o Windows não Consegue Encontrar Null

124

• 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

StringBuffer

Page 125: o Windows não Consegue Encontrar Null

125

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.

Page 126: o Windows não Consegue Encontrar Null

126

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.

Page 127: o Windows não Consegue Encontrar Null

127

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.

Page 128: o Windows não Consegue Encontrar Null

128

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

StringBuffer

Page 129: o Windows não Consegue Encontrar Null

129

Exercícios4.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.

Page 130: o Windows não Consegue Encontrar Null

130

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

Page 131: o Windows não Consegue Encontrar Null

131

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.

Page 132: o Windows não Consegue Encontrar Null

132

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.

Page 133: o Windows não Consegue Encontrar Null

133

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

}

}

}

Page 134: o Windows não Consegue Encontrar Null

134

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.

Page 135: o Windows não Consegue Encontrar Null

135

5 - Orientação a Objetos em Java

Page 136: o Windows não Consegue Encontrar Null

136

Orientação a Objetos

• Características:Abstração Encapsulamento Herança PolimorfismoMensagem Interfaces

Conceitos a serem abordados:

Page 137: o Windows não Consegue Encontrar Null

137

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.

Page 138: o Windows não Consegue Encontrar Null

138

Abstração

Visão do mundo real:• Estamos acostumados a sempre abstrair de objetos aquilo que nos interessa.

cor cilindrada velocidadeMax

placa cor númeroChassi

Page 139: o Windows não Consegue Encontrar Null

139

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.

Page 140: o Windows não Consegue Encontrar Null

140

Encapsulamento - modificadores de visibilidade

public

private

protected

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.

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.

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.

Page 141: o Windows não Consegue Encontrar Null

141

Encapsulamento - modificadores de visibilidade

private protected

<default>

Estes atributos e métodos são acessíveis somente nos métodos da própria classe e suas subclasses.

Visível no pacote e na classe.

Page 142: o Windows não Consegue Encontrar Null

142

Encapsulamento

class CorpoCeleste { public long id; public String nome; .....}

class CorpoCeleste { private long id; private String nome; ..... public long getId() {

return id; } public String getNome() {

return nome; } .....}

garante acesso externosomente no modo “read-only”

Page 143: o Windows não Consegue Encontrar Null

143

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.

Page 144: o Windows não Consegue Encontrar Null

144

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!

Page 145: o Windows não Consegue Encontrar Null

145

Herança

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

Filo dos cordados

Classe mamíferos Anfíbios ...

Ordem dos primatas Ordem dos roedores ...

Espécie homo sapiens

Possuem notocorda

Tem pêlosduas dentiçõesamamentam filhotes

Andam sobre dois pés

Page 146: o Windows não Consegue Encontrar Null

146

Herança - terminologia

• estenderestender = criar uma nova classe que herda todo o conteúdo da classe existente.

• superclassesuperclasse = uma classe progenitora ou “base”. • subclassesubclasse = uma classe filha que herda, ou estende,

uma superclasse.

Page 147: o Windows não Consegue Encontrar Null

147

Hierarquia de Classes

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

Object

Sobremesa

Bolo Torta

LuisFilipe

Page 148: o Windows não Consegue Encontrar Null

148

Herança - exemplo 1

public class HelloInternetSubClasse extends HelloInternet{}

class HelloInternet{

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

}

Page 149: o Windows não Consegue Encontrar Null

149

class Veiculo{

float preço;String modelo;

}

class Motocicleta extends Veiculo{ int cilindrada;}

Herança - exemplo 2

Page 150: o Windows não Consegue Encontrar Null

150

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; // OKcbHonda = honda; // Oops!

}}

Herança - exemplo 2 (cont.)

Page 151: o Windows não Consegue Encontrar Null

151

Declaração de Atributos

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

Forma

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

Page 152: o Windows não Consegue Encontrar Null

152

Atributos - controle de acesso

Especificador Classe Subclasse Package Mundo

private protected public <branco>

Visibilidade dos membros de uma classe

Page 153: o Windows não Consegue Encontrar Null

153

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; // Ilegald.campoProtegido = 30; // OK!

}}

Page 154: o Windows não Consegue Encontrar Null

154

Visibilidade de Atributos - exemplo 2package Grego;class Alfa{

void metodoPackage(){System.out.println(“Package”);

}}class Beta{

void acessaMetodo(){Alfa a = new Alfa;a.metodoPackage(); // OK!

}}package Latinimport Grego.*;class Delta extends Alfa {

void acessaMetodo(Alfa a, Delta d){a.metodoPackage(); // Ilegal!d.metodoPackage(); // Ilegal!

}}

Page 155: o Windows não Consegue Encontrar Null

155

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

Page 156: o Windows não Consegue Encontrar Null

156

this

Refere-se ao objeto corrente quandousado no código de um método não estático

Usado com freqüência para passar uma referência do objetocorrente num envio de mensagem para um outro objeto

A Bthis

A = this

Page 157: o Windows não Consegue Encontrar Null

157

//Classe pontopublic 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; }

this - exemplo

Page 158: o Windows não Consegue Encontrar Null

158

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

Exemplo - cont.

Page 159: o Windows não Consegue Encontrar Null

159

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.

Page 160: o Windows não Consegue Encontrar Null

160

Declarações de Métodospublic, protected, private, private protected.

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

O método não tem implementação e deve ser membro de uma classe abstrata. O método não pode ser sobreposto por uma subclasse.

Usado na declaração de threads.

Tipo de retorno do método. Se não tem retorno, especificar: void.

accessLevel

static

abstract

final

synchronized

returnType

Page 161: o Windows não Consegue Encontrar Null

161

Mensagem - chamada de método

• A captura do retorno é opcional.• Parâmetros possuem tipo.• O número de parâmetros é verificado em tempo de

compilação.

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

resultado = terra.nomeOrbita();

Page 162: o Windows não Consegue Encontrar Null

162

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.

Page 163: o Windows não Consegue Encontrar Null

163

Exercício

5.1 - Crie duas classes que definam os seguintes atributos e métodos para objetos do tipo:

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

Aviao

modelo: StringestaVoando: boolean

decolar() : voidpousar(): voidsetModelo(String modelo) : voidgetModelo() : String

Piloto

nome: StringaviaoPilotado: Aviao

pilotarAviao() : voidsetNome (String nome): voidgetNome (): String

Page 164: o Windows não Consegue Encontrar Null

164

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.

Page 165: o Windows não Consegue Encontrar Null

165

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.

Page 166: o Windows não Consegue Encontrar Null

166

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

Page 167: o Windows não Consegue Encontrar Null

167

Polimorfismo -Sobreposição

Substituir a implementação de um método herdadopor 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; }}

Page 168: o Windows não Consegue Encontrar Null

168

Polimorfismo - Sobreposição

class Fruta {int gramas;int calorias_por_grama;Fruta() { gramas=55; calorias_por_grama=0;}Fruta(int g, int c){ gramas =g; calorias_por_grama =c;}

void descascar () {

System.out.println(“Aqui eu descasco frutas”);}

}

sobreposição

Page 169: o Windows não Consegue Encontrar Null

169

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

Page 170: o Windows não Consegue Encontrar Null

170

int getAcidoCitrico() { return acidoCitrico; } void setAcidoCitrico(int acido) { this.acidoCitrico=acido; } void descascar () { System.out.println(

“Aqui eu descasco so citricos”); } }

Polimorfismo - Sobreposição

sobreposição

Page 171: o Windows não Consegue Encontrar Null

171

Polimorfismo - Sobrecarga

public class Fruta {

int gramas;int calorias_por_grama;public Fruta()

{ gramas=55; calorias_por_grama=0; }

public Fruta(int g, int c) {

this.gramas =g; this.calorias_por_grama =c;

}}

sobrecarga

Page 172: o Windows não Consegue Encontrar Null

172

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

}}

Page 173: o Windows não Consegue Encontrar Null

173

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

Page 174: o Windows não Consegue Encontrar Null

174

Polimorfismo - exercício

5.2 - Crie duas classes que definam os seguintes atributos e métodos para objetos do tipo:

Empregado

nome: Stringsalario: float

getSalario() : floatsetSalario(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.

Page 175: o Windows não Consegue Encontrar Null

175

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

}

Page 176: o Windows não Consegue Encontrar Null

176

Exercício5.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().

Page 177: o Windows não Consegue Encontrar Null

177

Classes Abstratas

Modelagem de um conceito abstratoClasse abstrata não pode conter instâncias

Conta

PessoaFisica PessoaJuridica Poupança

Page 178: o Windows não Consegue Encontrar Null

178

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.

Page 179: o Windows não Consegue Encontrar Null

179

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

Page 180: o Windows não Consegue Encontrar Null

180

Exercício5.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.

Page 181: o Windows não Consegue Encontrar Null

181

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.

Page 182: o Windows não Consegue Encontrar Null

182

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.

Page 183: o Windows não Consegue Encontrar Null

183

Interface

Visão do mundo real:• Na nossa vida, estamos acostumados a lidar com objetos através de sua interface, ignorando sua complexidade.

Page 184: o Windows não Consegue Encontrar Null

184

Interfaces em Java

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

reservada implements.

Page 185: o Windows não Consegue Encontrar Null

185

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

}

Page 186: o Windows não Consegue Encontrar Null

186

Modificadores de Classes em Java

A classe pode ser usada por qualquer outra classe de qualquer pacote (package).

A classe não pode ser instanciada (contém métodos abstratos).A classe não pode ter subclasse (folha da árvore de classes).A classe é uma subclasse da superclasse especificada.

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

public

abstract

final

extends

implements

Padrão: não publica, não abstrata, não final, subclasse de Object e sem implementar nenhuma interface.

Page 187: o Windows não Consegue Encontrar Null

187

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 {

...

}

Page 188: o Windows não Consegue Encontrar Null

188

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;

}

Page 189: o Windows não Consegue Encontrar Null

189

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

Page 190: o Windows não Consegue Encontrar Null

190

6 - Classes em Java

Page 191: o Windows não Consegue Encontrar Null

191

• Array: Comprimento fixoElementos de um mesmo tipoAlteração cria novo objeto

• Vector: Tamanho variávelElementos do tipo Object Alteração no mesmo objeto

Vector

Page 192: o Windows não Consegue Encontrar Null

192

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.

Page 193: o Windows não Consegue Encontrar Null

193

VectorMétodosvoid 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.

Page 194: o Windows não Consegue Encontrar Null

194

VectorMétodosObject 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.

Page 195: o Windows não Consegue Encontrar Null

195

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.

Page 196: o Windows não Consegue Encontrar Null

196

Vector

import java.util.Vector;public class PilhaVector{

private Vector pilha;

public PilhaVector(){

pilha = new Vector();}

public void push(Object parametro) {

pilha.addElement(parametro); }

Page 197: o Windows não Consegue Encontrar Null

197

Vector

public Object pop()

{

if (pilha.isEmpty())

{

return null;

}

else

{

Object retorno = pilha.elementAt(pilha.size()-1);

pilha.setSize(pilha.size() - 1);

return retorno;

}

}

}

Page 198: o Windows não Consegue Encontrar Null

198

Exercício6.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();

Page 199: o Windows não Consegue Encontrar Null

199

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.

Page 200: o Windows não Consegue Encontrar Null

200

7- Interfaces Gráficas em Java

Page 201: o Windows não Consegue Encontrar Null

201

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)

Page 202: o Windows não Consegue Encontrar Null

202

Elementos Gráficos• Os elementos chaves de uma interface gráfica em Java

são:Componentes gráficos (botões etc.)Gerenciadores de layoutesProcessamento 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

Page 203: o Windows não Consegue Encontrar Null

203

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

Page 204: o Windows não Consegue Encontrar Null

204

Componentes Gráficos

• Awt contém vários tipos de componentes gráficos permitindo diferentes maneiras de interagir com o usuário:

labelstext fieldstext areaslistsbuttonsscrollbars

Page 205: o Windows não Consegue Encontrar Null

205

Classes de suporteAlé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

Page 206: o Windows não Consegue Encontrar Null

206

PointPropó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.

Page 207: o Windows não Consegue Encontrar Null

207

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.

Page 208: o Windows não Consegue Encontrar Null

208

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.

Page 209: o Windows não Consegue Encontrar Null

209

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.

Page 210: o Windows não Consegue Encontrar Null

210

RectanglePropó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.

Page 211: o Windows não Consegue Encontrar Null

211

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.

Page 212: o Windows não Consegue Encontrar Null

212

ColorPropó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

Page 213: o Windows não Consegue Encontrar Null

213

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.

Page 214: o Windows não Consegue Encontrar Null

214

Font

Construtor: Font(String name, int style, int size)

AtributosPLAIN, BOLD, ITALIC

ExemploFont f = new Font(“arial”, Font.PLAIN,14);

Page 215: o Windows não Consegue Encontrar Null

215

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.

Page 216: o Windows não Consegue Encontrar Null

216

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

Page 217: o Windows não Consegue Encontrar Null

217

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.

Page 218: o Windows não Consegue Encontrar Null

218

Component

Método UsoisShowing( ) 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.

Page 219: o Windows não Consegue Encontrar Null

219

Component

Outros métodos (aparência):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)

Page 220: o Windows não Consegue Encontrar Null

220

Component

Outros métodos (localização):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)

Page 221: o Windows não Consegue Encontrar Null

221

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

Page 222: o Windows não Consegue Encontrar Null

222

Containers do pacote AWT

Component

Container

WindowPanel

DialogFrameApplet

Page 223: o Windows não Consegue Encontrar Null

223

Containers• Alguns containers devem ser associados a uma

outra superfície gráfica:panelapplet

• 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:

windowframedialog

Page 224: o Windows não Consegue Encontrar Null

224

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.

Page 225: o Windows não Consegue Encontrar Null

225

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

Container - métodos

Page 226: o Windows não Consegue Encontrar Null

226

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

Container - métodos

Page 227: o Windows não Consegue Encontrar Null

227

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

Container - métodos

Page 228: o Windows não Consegue Encontrar Null

228

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.

Page 229: o Windows não Consegue Encontrar Null

229

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.

Page 230: o Windows não Consegue Encontrar Null

230

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.

Page 231: o Windows não Consegue Encontrar Null

231

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.

Page 232: o Windows não Consegue Encontrar Null

232

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.

Page 233: o Windows não Consegue Encontrar Null

233

A estrutura hierárquica AWT e Swing

Os retângulos sombreados representam os controles da AWT.

JWindow

Dialog

Frame

JLabel

AbstractButtonJPanel

JRootPane

JDialog

JFrame

JButton

Window

Jcomponent

Container

Component

Page 234: o Windows não Consegue Encontrar Null

234

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.

Page 235: o Windows não Consegue Encontrar Null

235

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

Qual a relação entre JFC e AWT ?

Page 236: o Windows não Consegue Encontrar Null

236

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

Qual a relação entre JFC e AWT ?

Page 237: o Windows não Consegue Encontrar Null

237

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.

Page 238: o Windows não Consegue Encontrar Null

238

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

Os pacotes do Swing

Page 239: o Windows não Consegue Encontrar Null

239

javax.swingjavax.swing.borderjavax.swing.eventjavax.swing.plafjavax.swing.plaf.basicjavax.swing.plaf.metaljavax.swing.plaf.motifjavax.swing.plaf.multijavax.swing.plaf.windowsjavax.swing.previewjavax.swing.tablejavax.swing.textjavax.swing.text.htmljavax.swing.text.rtfjavax.swing.treejavax.swing.undo

Os pacotes do Swing

Page 240: o Windows não Consegue Encontrar Null

240

A estrutura hierárquica AWT e Swing

Os retângulos sombreados representam os controles da AWT.

JWindow

Dialog

Frame

JLabel

AbstractButtonJPanel

JRootPane

JDialog

JFrame

JButton

Window

Jcomponent

Container

Component

Page 241: o Windows não Consegue Encontrar Null

241

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.

Page 242: o Windows não Consegue Encontrar Null

242

A classe JcomponentMétodo UsosetToolTipText(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.

Page 243: o Windows não Consegue Encontrar Null

243

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.

Page 244: o Windows não Consegue Encontrar Null

244

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.

Page 245: o Windows não Consegue Encontrar Null

245

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

Page 246: o Windows não Consegue Encontrar Null

246

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.

Frame

Page 247: o Windows não Consegue Encontrar Null

247

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.

Frame

Page 248: o Windows não Consegue Encontrar Null

248

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

Frame

Page 249: o Windows não Consegue Encontrar Null

249

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

Frame

Page 250: o Windows não Consegue Encontrar Null

250

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

Frame

Page 251: o Windows não Consegue Encontrar Null

251

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

A classe JFrame o esqueleto de uma aplicação

Page 252: o Windows não Consegue Encontrar Null

252

A estrutura de JFrame

JFrame

JRootPane

JLayeredPane

MenuBar (opcional)

GlassPane

ContentPane

Page 253: o Windows não Consegue Encontrar Null

253

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

A estrutura de JFrame

Page 254: o Windows não Consegue Encontrar Null

254

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

A estrutura de JFrame

Page 255: o Windows não Consegue Encontrar Null

255

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

JFrame

Page 256: o Windows não Consegue Encontrar Null

256

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.

JFrame

Page 257: o Windows não Consegue Encontrar Null

257

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.

JFrame

Page 258: o Windows não Consegue Encontrar Null

258

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

}}

JFrame - exemplo

Page 259: o Windows não Consegue Encontrar Null

259

JFrame - resultado

Page 260: o Windows não Consegue Encontrar Null

260

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

}}

JFrame – exemplo 1

Page 261: o Windows não Consegue Encontrar Null

261

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

JFrame – exemplo 2

Page 262: o Windows não Consegue Encontrar Null

262

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

JFrame – exemplo 3

Page 263: o Windows não Consegue Encontrar Null

263

// Arquivo MyJFrame.javaimport 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.javapublic class ChamaMyJFrame{ public static void main(String args[]) { MyJFrame tela = new MyJFrame("Minha Tela"); }}

JFrame – exemplo 4

Page 264: o Windows não Consegue Encontrar Null

264

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

JFrame – exemplo 5

Page 265: o Windows não Consegue Encontrar Null

265

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

JFrame – exemplo 6

Page 266: o Windows não Consegue Encontrar Null

266

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

}

}

JFrame – exemplo 7

Page 267: o Windows não Consegue Encontrar Null

267

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.

JFrame – exercício

Page 268: o Windows não Consegue Encontrar Null

268

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 EmpregoCor de Fundo: (202,202,202)Dimensão : largura = 510 e altura = 490Layout: nuloResizable: 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.* .

JFrame – exercício

Page 269: o Windows não Consegue Encontrar Null

269

JFrame – resultado final

Page 270: o Windows não Consegue Encontrar Null

270

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

JPanel

Page 271: o Windows não Consegue Encontrar Null

271

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.

JPanel

Page 272: o Windows não Consegue Encontrar Null

272

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

JPanel

Page 273: o Windows não Consegue Encontrar Null

273

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

JPanel - exemplo

Page 274: o Windows não Consegue Encontrar Null

274

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

Page 275: o Windows não Consegue Encontrar Null

275

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.

JPanel – exercício (*2)

Page 276: o Windows não Consegue Encontrar Null

276

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.

Page 277: o Windows não Consegue Encontrar Null

277

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

Page 278: o Windows não Consegue Encontrar Null

278

JDialog

Construtor Operação

JDialog(Dialog f) Constrói uma nova instância de JDialoginicialmente 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.

Page 279: o Windows não Consegue Encontrar Null

279

JDialog

Construtor Operação

JDialog(Frame f) Constrói uma nova instância de JDialoginicialmente 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.

Page 280: o Windows não Consegue Encontrar Null

280

JDialog

Método Uso

isModal() Retorna verdadeiro se o objeto JDialog questionado for modal.

setModal(boolean b) Redefine o comportamento modal do objeto JDialog.

Page 281: o Windows não Consegue Encontrar Null

281

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 EntreguesModal: trueCor de Fundo: (73,165,227)Dimensão : largura = 300 e altura = 470Localização: x = 200 e y = 200Layout: nulo

Page 282: o Windows não Consegue Encontrar Null

282

JDialog – exercício (interface final)(complementar ao exercício CandidatoEmprego.java)

Page 283: o Windows não Consegue Encontrar Null

283

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.

Page 284: o Windows não Consegue Encontrar Null

284

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

Page 285: o Windows não Consegue Encontrar Null

285

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

Page 286: o Windows não Consegue Encontrar Null

286

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

Page 287: o Windows não Consegue Encontrar Null

287

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

Page 288: o Windows não Consegue Encontrar Null

288

JLabel - exercícioUtilize 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.

Page 289: o Windows não Consegue Encontrar Null

289

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.

Page 290: o Windows não Consegue Encontrar Null

290

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.

Page 291: o Windows não Consegue Encontrar Null

291

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

JTextComponent - métodos

Page 292: o Windows não Consegue Encontrar Null

292

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

JTextComponent - métodos

Page 293: o Windows não Consegue Encontrar Null

293

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.

Page 294: o Windows não Consegue Encontrar Null

294

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.

Page 295: o Windows não Consegue Encontrar Null

295

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.

JTextField - exercício

Page 296: o Windows não Consegue Encontrar Null

296

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.

Page 297: o Windows não Consegue Encontrar Null

297

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.

Page 298: o Windows não Consegue Encontrar Null

298

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.

Page 299: o Windows não Consegue Encontrar Null

299

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

JTextArea - exemplo

Page 300: o Windows não Consegue Encontrar Null

300

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

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.

JTextArea - exercício

Page 301: o Windows não Consegue Encontrar Null

301

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.

Page 302: o Windows não Consegue Encontrar Null

302

Rolagem horizontal

Rolagem vertical

A coluna header

A linha header

Viewport (onde é feita a rolagem do objeto)

cantos

A estrutura de JScrollPane

Page 303: o Windows não Consegue Encontrar Null

303

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.

Page 304: o Windows não Consegue Encontrar Null

304

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.

Page 305: o Windows não Consegue Encontrar Null

305

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

JScrollPane

Page 306: o Windows não Consegue Encontrar Null

306

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.

JScrollPane

Page 307: o Windows não Consegue Encontrar Null

307

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.

Page 308: o Windows não Consegue Encontrar Null

308

Botões

• O pacote javax.swing suporta os seguintes tipos de botões:

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

JCheckBox ou JRadioButton.

Page 309: o Windows não Consegue Encontrar Null

309

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.

Page 310: o Windows não Consegue Encontrar Null

310

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.

Page 311: o Windows não Consegue Encontrar Null

311

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

JButton - métodos

Page 312: o Windows não Consegue Encontrar Null

312

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

JButton – exemplo

Page 313: o Windows não Consegue Encontrar Null

313

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.

JButton - exercício

Page 314: o Windows não Consegue Encontrar Null

314

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.

Page 315: o Windows não Consegue Encontrar Null

315

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

JRadioButton

Page 316: o Windows não Consegue Encontrar Null

316

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.

JRadioButton - exercício

Page 317: o Windows não Consegue Encontrar Null

317

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.

Page 318: o Windows não Consegue Encontrar Null

318

JCheckBoxConstrutores UsoJCheckBox(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.

Page 319: o Windows não Consegue Encontrar Null

319

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

JCheckBox - exemplo

Page 320: o Windows não Consegue Encontrar Null

320

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

JCheckBox - exercício

Page 321: o Windows não Consegue Encontrar Null

321

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

Page 322: o Windows não Consegue Encontrar Null

322

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.

Page 323: o Windows não Consegue Encontrar Null

323

JComboBox

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

Construtores

Page 324: o Windows não Consegue Encontrar Null

324

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

Métodos

JComboBox

Page 325: o Windows não Consegue Encontrar Null

325

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

Métodos

JComboBox

Page 326: o Windows não Consegue Encontrar Null

326

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

Métodos

JComboBox

Page 327: o Windows não Consegue Encontrar Null

327

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

Métodos

JComboBox

Page 328: o Windows não Consegue Encontrar Null

328

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

JComboBox - exemplo

Page 329: o Windows não Consegue Encontrar Null

329

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

}

}

JComboBox – exemplo com array

Page 330: o Windows não Consegue Encontrar Null

330

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.

Page 331: o Windows não Consegue Encontrar Null

331

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

Métodos

JComboBox - ComboBoxModel

Page 332: o Windows não Consegue Encontrar Null

332

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.

Page 333: o Windows não Consegue Encontrar Null

333

Criando Menus *LFSC*

Fonte : http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html

Page 334: o Windows não Consegue Encontrar Null

334

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)        

Page 335: o Windows não Consegue Encontrar Null

335

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.

Page 336: o Windows não Consegue Encontrar Null

336

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.

Page 337: o Windows não Consegue Encontrar Null

337

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.

Page 338: o Windows não Consegue Encontrar Null

338

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.

Page 339: o Windows não Consegue Encontrar Null

339

JMenuBar e JMenu - exercício *LFSC*

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

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

Componentes a serem implementados na classe CandidatoEmprego.java :

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

Page 340: o Windows não Consegue Encontrar Null

340

JMenuItem - exercício 1 *LFSC*

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

Componentes a serem implementados na classe CandidatoEmprego.java :

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

Page 341: o Windows não Consegue Encontrar Null

341

JMenuItem - exercício 2 *LFSC*

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

Componentes a serem implementados na classe CandidatoEmprego.java :

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.

Page 342: o Windows não Consegue Encontrar Null

342

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.

Page 343: o Windows não Consegue Encontrar Null

343

JMenuItem - exercício 4 *LFSC*

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

Componentes a serem implementados na classe CandidatoEmprego.java :

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

Page 344: o Windows não Consegue Encontrar Null

344

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

Page 345: o Windows não Consegue Encontrar Null

345

BorderTipos pré-definidos de bordas:

BevelBorder, CompoundBorder, EmptyBorder, EtchedBorder, LineBorder, LoweredBevelBorder, MatteBorder, RaisedBevelBorder e TitledBorder.

Page 346: o Windows não Consegue Encontrar Null

346

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)

Page 347: o Windows não Consegue Encontrar Null

347

Etapas na utilização de bordas1. 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);

Page 348: o Windows não Consegue Encontrar Null

348

Border - exercício 1 *LFSC*

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

Componentes a serem implementados na classe CandidatoEmprego.java :

Page 349: o Windows não Consegue Encontrar Null

349

Border - exercício 2 *LFSC*

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.

Componentes a serem implementados na classe CandidatoEmprego.java :

Page 350: o Windows não Consegue Encontrar Null

350

Border - resultado final *LFSC*

Componentes a serem implementados na classe CandidatoEmprego.java :

Page 351: o Windows não Consegue Encontrar Null

351

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.

Page 352: o Windows não Consegue Encontrar Null

352

A classe JOptionPane

• A aparência de uma das caixas de diálogo é similar à figura abaixo:

ícone

mensagem

valor de entrada

botões opcionais

título da janela

Page 353: o Windows não Consegue Encontrar Null

353

A classe JOptionPaneConstantes para tipos de mensagens:

ERROR_MESSAGEINFORMATION_MESSAGEWARNING_MESSAGE QUESTION_MESSAGEPLAIN_MESSAGE

Constantes para opções de botões:YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION

Constantes inteiras de retorno:JOptionPane.YES_OPTIONJOptionPane.NO_OPTIONJOptionPane.CANCEL_OPTIONJOptionPane.OK_OPTION

JOptionPane.CLOSED_OPTION

Page 354: o Windows não Consegue Encontrar Null

354

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

Page 355: o Windows não Consegue Encontrar Null

355

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

Page 356: o Windows não Consegue Encontrar Null

356

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

JOptionPane - exemplos 3

Page 357: o Windows não Consegue Encontrar Null

357

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.

Page 358: o Windows não Consegue Encontrar Null

358

//File Chooser: Exemplo Simplesimport 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); } }

JFileChooser – execute e veja o resultado !!

Page 359: o Windows não Consegue Encontrar Null

359

JOptionPane - exercício 1 *LFSC*

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.

Componentes a serem implementados no método main da classe CandidatoEmprego.java :

* Passar o parâmetro pela linha de comando e mostrar a caixa de diálogo se esse valor for menor que 10.

Page 360: o Windows não Consegue Encontrar Null

360

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.

Page 361: o Windows não Consegue Encontrar Null

361

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

Page 362: o Windows não Consegue Encontrar Null

362

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

Page 363: o Windows não Consegue Encontrar Null

363

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.

Page 364: o Windows não Consegue Encontrar Null

364

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.

Page 365: o Windows não Consegue Encontrar Null

365

Gerenciadores de Layout

Page 366: o Windows não Consegue Encontrar Null

366

Gerenciadores de Layout

Page 367: o Windows não Consegue Encontrar Null

367

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.

Page 368: o Windows não Consegue Encontrar Null

368

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

ouCardLayout meuCardLayout = new CardLayout();aContainer.setLayout(meuCardLayout);

ouaContainer.setLayout(null); //sem gerenciador

Gerenciadores de layout - regras gerais

Page 369: o Windows não Consegue Encontrar Null

369

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

Page 370: o Windows não Consegue Encontrar Null

370

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.

Gerenciadores de layout - curiosidades *LFSC*

Page 371: o Windows não Consegue Encontrar Null

371

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.

Page 372: o Windows não Consegue Encontrar Null

372

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

Page 373: o Windows não Consegue Encontrar Null

373

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

Page 374: o Windows não Consegue Encontrar Null

374

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.

Page 375: o Windows não Consegue Encontrar Null

375

FlowLayout – resultado final *LFSC*

Page 376: o Windows não Consegue Encontrar Null

376

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.

Page 377: o Windows não Consegue Encontrar Null

377

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

Page 378: o Windows não Consegue Encontrar Null

378

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.

Page 379: o Windows não Consegue Encontrar Null

379

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.

Page 380: o Windows não Consegue Encontrar Null

380

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.

Page 381: o Windows não Consegue Encontrar Null

381

BorderLayout - exemploimport 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); }}

Page 382: o Windows não Consegue Encontrar Null

382

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.

Page 383: o Windows não Consegue Encontrar Null

383

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.

Page 384: o Windows não Consegue Encontrar Null

384

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

Page 385: o Windows não Consegue Encontrar Null

385

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.

Page 386: o Windows não Consegue Encontrar Null

386

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

Page 387: o Windows não Consegue Encontrar Null

387

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

Page 388: o Windows não Consegue Encontrar Null

388

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

CardLayout - exemplo - cont.

Page 389: o Windows não Consegue Encontrar Null

389

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.

Page 390: o Windows não Consegue Encontrar Null

390

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.

Page 391: o Windows não Consegue Encontrar Null

391

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

Page 392: o Windows não Consegue Encontrar Null

392

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;

Page 393: o Windows não Consegue Encontrar Null

393

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;

Page 394: o Windows não Consegue Encontrar Null

394

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

Page 395: o Windows não Consegue Encontrar Null

395

1

8 - Eventos AWT

Page 396: o Windows não Consegue Encontrar Null

396

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

Page 397: o Windows não Consegue Encontrar Null

397

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.

Page 398: o Windows não Consegue Encontrar Null

398

Esquema do modelo de delegação

actionPerformed (ActionEvent e){ …… }

Manipulador ou ouvinte do evento (Action Listener)

Tipo do Evento (ex. Action event)

Lista de eventos registrados (EventListenerList)

botao.addActionListener(action listener)

PAINEL

FRAME

Fonte do evento (event source)

BOTÃO

Page 399: o Windows não Consegue Encontrar Null

399

Modelo de delegação – possibilidades *LFSC*

Objeto 1Objeto 1Evento Manipulador de

evento

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

Objeto 2Objeto 2

Objeto 3Objeto 3

3. Um objeto chama vários manipuladores para tratar um único tipo de evento.

ObjetoObjetoEvento

Manipulador de evento 2

Manipulador de evento 1

Manipulador de evento 3

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

ObjetoObjeto Evento Manipulador de

evento

Page 400: o Windows não Consegue Encontrar Null

400

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

Modelo de delegação - exemplo

Page 401: o Windows não Consegue Encontrar Null

401

• 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”.addActionListenerremoveActionListener

A seguir são relacionados os tipos de eventos que cada componente da AWT pode gerar.

Eventos gerados pelos componentes da AWT

Page 402: o Windows não Consegue Encontrar Null

402

Alguns dos eventos gerados pelos componentes AWT/Swing

Tipos de eventos que os componentes podem gerar Componentes A ct ion A dj ust . Component Container Focus item key mouse

mouse mot ion

text window

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.

Page 403: o Windows não Consegue Encontrar Null

403

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

Interface de eventos listener AWT

Page 404: o Windows não Consegue Encontrar Null

404

Interface de eventos listener AWT (1)

Interface Listener Classe Adapter MétodosActionListener ---------- 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)

Page 405: o Windows não Consegue Encontrar Null

405

Interface Listener Classe Adapter MétodosMouseMotionListener MouseMotionAdapter mouseDragged (MouseEvent)

mouseMoved(MouseEvent)TextListener ------ textValueChange(TextEvent)WindowListener WindowAdapter windowActived(WindowEvent)

windowClosed(WindowEvent)windowClosing(WindowEvent)windowDeactivated(WindowEvent)windowDeiconified(WindowEvent)windowIconified(WindowEvent)windowOpened(WindowEvent)

Interface de eventos listener AWT (2)

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

Page 406: o Windows não Consegue Encontrar Null

406

• A classe AWTEventCada 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.

A hierarquia de classes de eventos AWT

Page 407: o Windows não Consegue Encontrar Null

407

A hierarquia de classes de eventos AWT

A c tion E ve nt A d jus tm en tE ve nt

C o nta ine rE ve nt F o cusE ve nt

K e yE ve nt M o use E ve nt

In pu tE ve nt W in do w E ve nt

C o m p on e ntE ve nt Ite m E ve nt T e x tE ve n t

A W T E ve nt

ja va .u til.E ven tO b je ct

ja va .la ng .O b je t

Page 408: o Windows não Consegue Encontrar Null

408

As 4 maneiras de implementar um evento (1) *LFSC*

1. 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 { }.

2. 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 { }.

Page 409: o Windows não Consegue Encontrar Null

409

3. 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 { } }.

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

} }); }.

As 4 maneiras de implementar um evento (2) *LFSC*

Page 410: o Windows não Consegue Encontrar Null

410

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.

Page 411: o Windows não Consegue Encontrar Null

411

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

Page 412: o Windows não Consegue Encontrar Null

412

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

Como escrever WindowListener

Page 413: o Windows não Consegue Encontrar Null

413

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

Page 414: o Windows não Consegue Encontrar Null

414

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.

Page 415: o Windows não Consegue Encontrar Null

415

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.

Page 416: o Windows não Consegue Encontrar Null

416

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.

Page 417: o Windows não Consegue Encontrar Null

417

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

ActionListener para botões – exemplo (1)

Page 418: o Windows não Consegue Encontrar Null

418

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

ActionListener para botões – exemplo (*2)

Page 419: o Windows não Consegue Encontrar Null

419

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.

Page 420: o Windows não Consegue Encontrar Null

420

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.

A classe ActionEvent

Page 421: o Windows não Consegue Encontrar Null

421

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.

Page 422: o Windows não Consegue Encontrar Null

422

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

ActionListener para texto – exemplo (1)

Page 423: o Windows não Consegue Encontrar Null

423

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

ActionListener para texto – exemplo (2)

Page 424: o Windows não Consegue Encontrar Null

424

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 :

Page 425: o Windows não Consegue Encontrar Null

425

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

ActionListener – exercício 2 *LFSC*

Page 426: o Windows não Consegue Encontrar Null

426

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

Como escrever um ItemListener

Page 427: o Windows não Consegue Encontrar Null

427

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.

Page 428: o Windows não Consegue Encontrar Null

428

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

ItemListener – exemplo 1 (1)

Page 429: o Windows não Consegue Encontrar Null

429

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

}

Page 430: o Windows não Consegue Encontrar Null

430

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

ItemListener – exemplo 2 (1)

Page 431: o Windows não Consegue Encontrar Null

431

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

ItemListener – exemplo 2 (2)

Page 432: o Windows não Consegue Encontrar Null

432

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

Page 433: o Windows não Consegue Encontrar Null

433

1

9 - Applet9 - Applet

Page 434: o Windows não Consegue Encontrar Null

434

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.

Page 435: o Windows não Consegue Encontrar Null

435

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 …

Applet - exemplo

Page 436: o Windows não Consegue Encontrar Null

436

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.

Applet - exemplo

Page 437: o Windows não Consegue Encontrar Null

437

< applet codebase = URL (opcional)

code = arquivoExecutável (obrigatório)

width = pixelLargura (obrigatório)

height = pixelAltura > (obrigatório)

< param name = nome value = valor >

. . .

</applet>

Applet e HTML

Page 438: o Windows não Consegue Encontrar Null

438

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

Applet e HTML

Page 439: o Windows não Consegue Encontrar Null

439

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

Page 440: o Windows não Consegue Encontrar Null

440

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.