o windows não consegue encontrar null
TRANSCRIPT
![Page 1: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/8.jpg)
8
• AWTUsando Gerenciadores de Layout Escrevendo Manipuladores de Eventos
• Applets
Principais Tópicos
![Page 9: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/9.jpg)
9
1 - Visão Geral
![Page 10: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/18.jpg)
18
Heterogeneidade
Bytecode
CódigoFonte
Máquina virtual JAVA
Compilação
Interpretação
![Page 19: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/35.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/36.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/37.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/38.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/41.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/42.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/43.jpg)
43
Primeiro programa gráfico - cont.
• O resultado:
![Page 44: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/44.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/45.jpg)
45
2 - Estrutura da Linguagem
![Page 46: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/46.jpg)
46
Estrutura da linguagem
Comentários
Tipos primitivos
Operadores
Controle de fluxo
![Page 47: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/47.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/48.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/49.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/50.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/51.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/52.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/53.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/54.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/55.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/56.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/57.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/58.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/59.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/60.jpg)
60
Controle de Fluxo - if
if (expressão booleana)comando ou bloco
elsecomando ou bloco
![Page 61: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/61.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/62.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/63.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/64.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/65.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/66.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/67.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/68.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/69.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/70.jpg)
70
3 - Introdução a Orientação a Objetos
![Page 71: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/71.jpg)
71
Orientação a Objetos
• Componentes:ObjetosClasses
Conceitos a serem abordados:
![Page 72: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/72.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/73.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/74.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/75.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/76.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/77.jpg)
77
Objetos
Visão do mundo real:• Na nossa vida, estamos cercados por objetos.
![Page 78: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/78.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/79.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/80.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/81.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/82.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/83.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/84.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/85.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/86.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/87.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/88.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/89.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/90.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/91.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/92.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/93.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/94.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/95.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/96.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/97.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/98.jpg)
98
O pacote lang e util
Classe Integer
Array
Classe String
Classe StringBuffer
Classe StringTokenizer
![Page 99: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/99.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/100.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/101.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/102.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/103.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/104.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/105.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/106.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/107.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/108.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/109.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/110.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/111.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/112.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/113.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/114.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/115.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/116.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/117.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/118.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/119.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/120.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/121.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/122.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/123.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/124.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/125.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/126.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/127.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/128.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/129.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/130.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/131.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/132.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/133.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/134.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/135.jpg)
135
5 - Orientação a Objetos em Java
![Page 136: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/136.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/137.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/138.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/139.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/140.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/141.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/142.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/143.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/144.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/145.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/146.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/147.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/148.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/149.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/150.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/151.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/152.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/153.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/154.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/155.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/156.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/157.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/158.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/159.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/160.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/161.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/162.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/163.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/164.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/165.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/166.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/167.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/168.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/169.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/170.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/171.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/172.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/173.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/174.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/175.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/176.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/177.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/178.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/179.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/180.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/181.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/182.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/183.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/184.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/185.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/186.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/187.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/188.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/189.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/190.jpg)
190
6 - Classes em Java
![Page 191: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/191.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/192.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/193.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/194.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/195.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/196.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/197.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/198.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/199.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/200.jpg)
200
7- Interfaces Gráficas em Java
![Page 201: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/201.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/202.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/203.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/204.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/205.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/206.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/207.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/208.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/209.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/210.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/211.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/212.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/213.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/214.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/215.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/216.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/217.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/218.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/219.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/220.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/221.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/222.jpg)
222
Containers do pacote AWT
Component
Container
WindowPanel
DialogFrameApplet
![Page 223: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/223.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/224.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/225.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/226.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/227.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/228.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/229.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/230.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/231.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/232.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/233.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/234.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/235.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/236.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/237.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/238.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/239.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/240.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/241.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/242.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/243.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/244.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/245.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/246.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/247.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/248.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/249.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/250.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/251.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/252.jpg)
252
A estrutura de JFrame
JFrame
JRootPane
JLayeredPane
MenuBar (opcional)
GlassPane
ContentPane
![Page 253: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/253.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/254.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/255.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/256.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/257.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/258.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/259.jpg)
259
JFrame - resultado
![Page 260: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/260.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/261.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/262.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/263.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/264.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/265.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/266.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/267.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/268.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/269.jpg)
269
JFrame – resultado final
![Page 270: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/270.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/271.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/272.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/273.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/274.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/275.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/276.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/277.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/278.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/279.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/280.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/281.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/282.jpg)
282
JDialog – exercício (interface final)(complementar ao exercício CandidatoEmprego.java)
![Page 283: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/283.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/284.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/285.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/286.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/287.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/288.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/289.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/290.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/291.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/292.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/293.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/294.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/295.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/296.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/297.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/298.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/299.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/300.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/301.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/302.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/303.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/304.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/305.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/306.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/307.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/308.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/309.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/310.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/311.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/312.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/313.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/314.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/315.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/316.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/317.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/318.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/319.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/320.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/321.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/322.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/323.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/324.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/325.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/326.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/327.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/328.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/329.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/330.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/331.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/332.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/333.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/334.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/335.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/336.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/337.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/338.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/339.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/340.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/341.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/342.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/343.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/344.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/345.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/346.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/347.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/348.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/349.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/350.jpg)
350
Border - resultado final *LFSC*
Componentes a serem implementados na classe CandidatoEmprego.java :
![Page 351: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/351.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/352.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/353.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/354.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/355.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/356.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/357.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/358.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/359.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/360.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/361.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/362.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/363.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/364.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/365.jpg)
365
Gerenciadores de Layout
![Page 366: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/366.jpg)
366
Gerenciadores de Layout
![Page 367: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/367.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/368.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/369.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/370.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/371.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/372.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/373.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/374.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/375.jpg)
375
FlowLayout – resultado final *LFSC*
![Page 376: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/376.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/377.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/378.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/379.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/380.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/381.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/382.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/383.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/384.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/385.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/386.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/387.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/388.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/389.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/390.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/391.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/392.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/393.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/394.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/395.jpg)
395
1
8 - Eventos AWT
![Page 396: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/396.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/397.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/398.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/399.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/400.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/401.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/402.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/403.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/404.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/405.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/406.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/407.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/408.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/409.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/410.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/411.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/412.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/413.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/414.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/415.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/416.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/417.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/418.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/419.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/420.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/421.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/422.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/423.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/424.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/425.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/426.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/427.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/428.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/429.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/430.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/431.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/432.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/433.jpg)
433
1
9 - Applet9 - Applet
![Page 434: o Windows não Consegue Encontrar Null](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/434.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/435.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/436.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/437.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/438.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/439.jpg)
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](https://reader030.vdocuments.mx/reader030/viewer/2022012910/5571f1cf49795947648bb3bc/html5/thumbnails/440.jpg)
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.