Java Original

159
 Linguagem de Programação IV

Transcript of Java Original

Page 1: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 1/193

 

Linguagem de Programação IV

Page 2: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 2/193

 

Ementa da Disciplina

Fundamentos do paradigma orientado a objetos em Java.

Bibliotecas de suporte, componentes gráficos,interfaces e estruturas de dados, classes coletivas.

Tratamento de exceção.Gerência de memória.

Multithreading (concorrência).

Applets Java.

Page 3: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 3/193

 

BibliografiaLIVRO TEXTO:DEITEL, H.M., DEITEL, P.J. Java, Como Programar. 4ª Edição. Porto Alegre: Bookman, 2003.LEMAY, L. e CADENHEAD, R. Aprenda em 21 Dias Java 2: Professional Reference. 3a. Ed. São Paulo:Campus, 2003.

OBRAS DE REFERÊNCIA:HORSTMANN, Cay. Big Java. Porto Alegre: Bookman, 2004.HORSTMANN, Cay, et al. Core Java 2, Volume 1: Fundamentos. S. Paulo: Makron Books, 2001.HORSTMANN, Cay, et al. Core Java 2, Volume 2: Recursos Avançados. S. Paulo: Makron Books, 2001.FURGERI, Sérgio. Java 2 Ensino Didático. São Paulo: Editora Érica, 2002.CAMARÃO, C. e FIGUEIREDO, L. Programação de Computadores em Java. Rio de Janeiro: LTC, 2003

SANTOS, R. Introdução à Programação Orientada a Objetos usando Java. Rio de Janeiro: Campus, 2003.MECENAS, I. Java 2 Fundamentos, Swing e JDBC. Rio de Janeiro: Alta Books, 2003.OLIVEIRA, Alcione P. Notas de Aula DPI-UFV. Viçosa, 2001.CHAN, Mark C. et al. Java: 1001 Dicas de Programação. São Paulo: Makron Books, 1999.ECKEL, Bruce. Thinking in Java, 3rd Edition. (e-book).DAVIS, Stephen R. Aprenda Java Agora. Rio de Janeiro: Campus, 1997.LALANI, Suleiman S. e JAMSA, Kris. Java: Biblioteca do Programador. São Paulo: Makron Books, 1997.

NEWMAN, A. et al. Usando Java: O Guia de Referência Mais Completo. Rio de Janeiro: Campus, 1997.WUTKA, Mark. Java: Técnicas Profissionais. São Paulo: Berkeley, 1997.DAMASCENO JR., Américo. Aprendendo Java: Programação na Internet. São Paulo: Érica, 1996.JEPSON, Brian. Programando Banco de Dados em Java. São Paulo: Makron Books, 1997.RITCHEY, Tim. Java! Indianápolis, EUA: New Riders, 1995.FLANAGAN, David. Java in a Nutshell. O’Reilley & Associates, 1997. 

Page 4: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 4/193

 

A história de JavaOrigem: projeto de pesquisa da Sun Microsystems, iniciado em 1991,

destinado a desenvolver uma linguagem para a programação de dispositivoseletrônicos em geral (pagers, celulares, PDAs, TV a cabo, etc).

Baseada em C e C++.

Seu criador, James Gosling, inicialmente a chamou de Oak, mas descobriu-seque, na época, já havia uma outra linguagem com este mesmo nome. Conta alenda, que o nome Java foi escolhido em uma cafeteria, e refere-se a umavariedade de café, originário da ilha homônima, do Pacífico.

Impulso ao uso de Java: a World Wide Web explode em popularidade a partirde 1993 e a Sun percebe o seu grande potencial para a construção de páginas

com conteúdo dinâmico.Em 1995, Java é anunciada formalmente à comunidade mundial.

Atualmente, a tecnologia Java divide-se em J2SE, J2EE e J2ME e está naversão 1.5.0 (o chamado Core Java Software, ou, J2SE 5.0)

Page 5: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 5/193

Page 6: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 6/193

Page 7: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 7/193

Page 8: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 8/193

Page 9: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 9/193

Page 10: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 10/193

Page 11: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 11/193

 

Page 12: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 12/193

"Alo, Mundo" é uma string de caracteres, e deve ser definida entre aspasduplas.

Nem toda classe necessariamente deve possuir um método main e, portanto, serum aplicativo Java. O exemplo a seguir ilustra isto:

 public class Teste { public static void main(String a[]){

AloMundo.Alo();}

}

class AloMundo {

 public static void Alo(){System.out.println("Alo, mundo");

}

}

 

Page 13: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 13/193

GUI em Java: pacote SwingJava possui dois pacotes de interfaces gráficas com o usuário. O mais antigo é aAWT  (Abstract Windowing Toolkit), que utiliza os componentes gráficosnativos do sistema operacional. O exemplo abaixo emprega o pacote Swing (javax.swing), que emprega componentes gráficos Java.

//AloMundo com interface graficaimport javax.swing.JOptionPane;

public class AloMundo2{

public static void main(String args[]){

JOptionPane.showMessageDialog(null,"Alô, Mundo!");

System.exit(0);}

}

Após digitá-lo, salve com o nome da classe, ou seja: AloMundo2.java

 

Page 14: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 14/193

Java possui uma extensa biblioteca de classes pré-definidas disponíveis para oprogramador.

Estas classes são agrupadas em categorias de classes relacionadas, chamadas depacotes.

O conjunto de pacotes Java é denominado biblioteca de classes Java ou Java Application Programming Interface  – API.

O pacote javax.swing ajuda o programador a definir interfaces gráficas

com o usuário (Graphical User Interfaces – 

GUIs)

import javax.swing.JOptionPane;

O comando import indica a localização da classe JoptionPane, presente no

pacote de classes javax.swing

Saída do programa AloMundo2.java:

Page 15: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 15/193

 

Page 16: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 16/193

VariáveisEm Java, é necessário definir formalmente uma variável antes de utilizá-la.Isto implica em declarar o seu nome e tipo de informação que irá armazenar.

int numero;String nome;double preco;boolean flag;

É uma boa prática de programação definir uma variável por linha.

Existem três tipos de variáveis em Java: locais, de instância e de classe.

As variáveis locais podem ser declaradas em qualquer lugar dentro de um

método. Uma boa prática de programação consiste em defini-las imediata-mente após a chave de abertura do método.

Atenção: todas as variáveis locais precisam ser inicializadas antes de seremutilizadas, caso contrário, o compilador acusará erro!

 

Page 17: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 17/193

As variáveis de instância podem ser declaradas em qualquer lugar dentro deuma classe. Uma boa prática de programação consiste em defini-las imediata-mente após a chave de abertura da classe.

As definições de variáveis de instância, ao contrário das variáveis locais, rece-bem automaticamente um valor inicial padrão, especificado pelo compilador.

Variáveis numéricas recebem 0, de caracteres, '\0', lógicas, false,objetos, null.

class Teste {int numero;

 public static void main(String args[]) {Teste teste = new Teste();

System.out.println(teste.numero);

}}

Uma variável de instância só pode ser referenciada em uma instância daclasse.

 

Page 18: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 18/193

As variáveis de classe, definidas pelo modificador  static, podem serdeclaradas em qualquer lugar dentro de uma classe.

As definições de  variáveis de classe, da mesma forma que as variáveis de

instância, recebem automaticamente um valor inicial padrão, especificado pelocompilador. Variáveis numéricas recebem 0, de caracteres, '\0', lógicas,false, objetos, null.

class Teste {static int numero;

 public static void main(String args[]) {System.out.println(numero);

}

}

Uma variável de classe pertence à classe, independe de qualquer instanciaçãode objetos da classe.

 

Page 19: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 19/193

Tipos de dadosExistem oito tipos de dados primitivos em Java para o armazenamento deinteiros, números de ponto flutuante, caracteres e valores lógicos.

Ao contrário do que acontece em outras linguagens de programação, em Javaestes tipos primitivos têm o mesmo tamanho e características em qualquerplataforma de hardware e sistema operacional.

boolean 08 bits true ou falsechar 16 bits '\u0000' a '\uFFFF'byte 08 bits -128 a 127short 16 bits -32.768 a 32.767int 32 bits -2.147.483.648 a 2.147.483.647long 64 bits até 9.223.372.036.854.775.807

float 32 bits até 3.40292347E+38double 64 bits até 1.7976931348623157E+308

Obs.: Os caracteres Unicode são usualmente expressos em termos de um esquemade codificação hexadecimal. O prefixo \u indica um valor Unicode.

 

Page 20: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 20/193

import javax.swing.JOptionPane; public class Teste {

 public static void main(String[] args) {JOptionPane.showMessageDialog(null,""+Double.MAX_VALUE);

System.exit(0);}

}

O exemplo acima ilustra a utilização de uma variável de classe, MAX_VALUE,da classe Double. Esta classe é chamada empacotadora ou wrapper. Cada umdos tipos primitivos Java possui a sua correspondente classe empacotadora.

A variável de classe MAX_VALUE retorna o valor máximo do tipo primitivoutilizado, no caso, double.

Page 21: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 21/193 

Page 22: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 22/193

 public class Teste { public static void main(String a[]){

float total;total = 5.5F;

System.out.println(total);}}

O erro acontece porque Java trata todas as operações de ponto flutuante emdouble e a conversão de double para float não é automática.

Também é possível declarar literais de ponto flutuante com expoentes:

 public class Teste { public static void main(String a[]){

double total;

total = 1.0e5;System.out.println(total);

}

}

 

Page 23: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 23/193

Literais de caracteres são expressos por meio de um único caracter delimitadopor apóstrofos. Alguns literais de caracteres úteis são apresentados abaixo:

\n nova linha

\t tabulação\b retrocesso\\ barra\' apóstrofo\" aspas

 public class Teste { public static void main(String a[]){

System.out.println("Clube Atletico Mineiro:\n\"Galo forte e vingador!\"");

}}

 

Page 24: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 24/193

Saída de dados com printfUm novo recurso, introduzido em J2SE 5.0, é o método System.out. printf, capaz de formatar mais adequadamente uma saída em Java, em uma

forma semelhante à função printf da linguagem C.

 public class Teste { public static void main(String[] a) {

String s = "Atlético";

System.out.printf(" Grandioso %s\n",s);}

}

Grandioso Atlético

O primeiro argumento de printf é a string de formatação, composta deconstantes string e caracteres de formatação. No exemplo acima, odelimitador  % seguido de s indica que o método deve ter um outroargumento do tipo String.

 

Page 25: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 25/193

Os caracteres de formatação podem também ser usados para compor umaString, usando o método String.format, conforme no exemplo a seguir:

 public class Main {

 public static void main(String[] args) {int a = 65;String s = String.format("char: %c integer: %d hexa: %h octal: %o",a,a,a,a);

System.out.println(s);}

}

Para o exemplo acima, onde é usado o mesmo argumento para a formatação,existem alternativas para a codificação:

String s = String.format("char: %c integer: %<d hexa: %<h octal: %<o",a);

String s = String.format("char: %1$c integer: %1$d hexa: %1$h octal: %1$o",a);

 

Page 26: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 26/193

Entrada de dados com ScannerA leitura de dados de entrada em aplicativos através da janela decomando do sistema operacional era surpreendentemente complexa até a

versão 1.4.2 do J2SE. Isto não era problema para aplicativos com recursosGUI, mas tornava-se desconfortável para estudantes interessados em escreverprogramas simples com o propósito de aprender Java.

J2SE 5.0 introduz a classe java.util.Scanner para a entrada de dados,

inclusive através da entrada padrão, System.in.O exemplo a seguir apresenta uma aplicação Java para a entrada de doisnúmeros pelo teclado e a saída da soma na janela de comando do sistemaoperacional.

É necessário criar uma instância da classe  Scanner, passando comoargumento o objeto padrão de entrada, System.in, que irá capturar asentradas de dados via o teclado. O método nextInt(), da instância da classeScanner, lê o valor digitado e o armazena em uma variável do tipo int.

 

Page 27: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 27/193

import java.util.Scanner; public class Teste { public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);int num1;int num2;int soma;System.out.print("Entre com o primeiro número: ");num1 = entrada.nextInt();System.out.print("Entre com o segundo número: ");

num2 = entrada.nextInt();soma = num1 + num2;System.out.printf("A soma é: %d", soma);

}}

Um exemplo de saída do aplicativo acima:Entre com o primeiro número: 34Entre com o segundo número: 23 A soma é: 57

 

Page 28: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 28/193

O exemplo seguinte calcula o seno de um valor fornecido em tempo de execução:

import java.util.Scanner; public class Teste { public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);double angulo;double seno;System.out.print("Entre com o ângulo em graus: ");angulo = entrada.nextDouble();

seno = Math.sin(Math.toRadians(ângulo));System.out.println("Seno: " + seno);}

}

O método nextDouble(), da classe Scanner, captura um double da

entrada padrão System.in e o armazerna em uma variável do tipo double.

A classe Math do pacote java.lang define a constante PI através de umavariável de classe. O método estático  Math.sin(double)retorna o seno de um ângulo em radianos passado como argumento.

 

Page 29: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 29/193

Import StaticA versão J2SE 5.0 incorporou o recurso import static, que permiteimportar os métodos e atributos estáticos, permitindo utilizá-los sem o

prefixo de classe.O código anterior pode ser reescrito, a partir da versão 5.0, conforme abaixo:

import java.util.Scanner;import static java.lang.Math.*;

 public class Teste { public static void main(String[] args) {Scanner entrada = new Scanner(System.in);double angulo;double seno;System.out.print("Entre com o ângulo em graus: ");angulo = entrada.nextDouble();seno = sin(toRadians(ângulo));System.out.println("Seno: " + seno);

}}

 

Page 30: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 30/193

Entrada de dados com Swing

import javax.swing.JOptionPane;import static javax.swing.JOptionPane.*; public class Adição { public static void main(String[] args){

String s1, s2;int num1, num2, soma;s1 = JOptionPane.showInputDialog("Entre com o 1º número");

s2 = JOptionPane.showInputDialog("Entre com o 2º número");

num1 = Integer.parseInt(s1);num2 = Integer.parseInt(s2);

soma = num1 + num2;JOptionPane.showMessageDialog(null,"A soma é " + soma,"Resultado", PLAIN_MESSAGE);

System.exit(0);}

}

O próximo exemplo apresenta uma solução para a soma de dois númerosinteiros usando o pacote javax.swing de interface gráfica de Java.

Page 31: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 31/193 

Page 32: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 32/193

O método parseInt(String) da classe Integer recebe como argumentoum valor String e retorna o valor convertido em inteiros. Se o argumentonão puder ser convertido, a máquina virtual Java lançará uma exceção do tipo NumberFormatException.

 public class ParseInt {static int i;

 public static void main(String[] args) {i = Integer.parseInt("um");System.out.println(i);

}

}

As classes empacotadoras Double e Float, dentre outras, possuem tambémseus métodos parse, para a conversão do valor de um objeto String em tiposprimitivos float e double, respectivamente.

 public class ParseDouble { public static void main(String[] args) {double d = Double.parseDouble("25.4");System.out.println(d);

}}

 

A b i

Page 33: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 33/193

AutoboxingA versão J2SE 5.0 incorporou o recurso denominado  autoboxing, queconsiste na conversão automática entre tipos primitivos e seus wrappers 

(classes empacotadoras). public class AutoBoxing {

 public static void main(String[] args) {int meuInt = 25;Integer meuInteger = meuInt;

System.out.printf("Integer: %d\tint: %d ", meuInteger, meuInt);}

}

 public class Unboxing {

 public static void main(String[] args) {Integer meuInteger = new Integer("12");int meuInt = meuInteger;System.out.println(meuInt);

}}

 

C d if / l

Page 34: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 34/193

Comando if / elseimport javax.swing.JOptionPane; public class ParImpar{

 public static void main(String args[]) {String s;String resp = "O número ";int i;s = JOptionPane.showInputDialog(

"Entre com o\nnúmero inteiro");

i = Integer.parseInt(s);if((i % 2) == 0)

resp = resp + s + " é par!";else

resp = resp + s + " é ímpar!";JOptionPane.showMessageDialog(null, resp,

"Par ou Ímpar",JOptionPane.INFORMATION_MESSAGE);

System.exit(0);}

}

Page 35: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 35/193 

Page 36: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 36/193

O exemplo anterior faz uma comparação entre uma variável e um literal dotipo primitivo  int. Cuidado com expressões relacionais para compararobjetos, ao invés de tipos primitivos.

import java.util.Scanner; public class Teste { public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);String string;

System.out.print("Digite Sim: ");string = entrada.nextLine();if(string == "Sim")

System.out.println("Iguais");else

System.out.println("Diferentes");}}

O resultado impresso será Diferentes, uma vez que o objeto sim referenciauma posição de memória diferente do literal Sim .

 

P t úd d d i bj St i ã idê i

Page 37: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 37/193

Para comparar se o conteúdo  de dois objetos String são idênticos, umasugestão é empregar o método equals() da classe String.

import java.util.Scanner; public class Teste { public static void main(String[] args) {

Scanner entrada = new Scanner(System.in);String string;System.out.print("Digite Sim: ");string = entrada.nextLine();

if(string == "Sim")System.out.println("Iguais");

elseSystem.out.println("Diferentes");

}

}

Outros dois métodos da classe String são equalsIgnoreCase(), seme-lhante a equals() e charAt(), que obtém o tipo primitivo char corres-pondente a posição informada como argumento para o método.

 

Page 38: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 38/193

Um applet Java simples

import javax.swing.JApplet;import java.awt.Graphics; public class AloMundoApplet extends JApplet {

 public void paint(Graphics g){

g.drawString("Alô, Mundo!",25,25);}}

<html><applet code="AloMundoApplet.class" width=300 height=30></applet></html>

Para executar o programa acima em um browser, é necessário um arquivo htmldo tipo AloMundoApplet.html, que carrega a classe AloMundoApplet:

Um applet Java é um tipo especial de programa que é executado em umnavegador de páginas da World Wide Web.

 

A l h t d i di

Page 39: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 39/193

A palavra-chave extends indica que aclasse AloMundoApplet é uma subclasse (ou classe derivada) de JApplet (chamadasuperclasse ou classe básica).

A classe JApplet faz parte do pacotejavax.swing.

Herança:  AloMundoApplet herda to-dos os atributos (dados) e comportamen-

tos (métodos) da classe JApplet.

 AloMundoApplet sobrescreve o método paint da classe JApplet. Estemétodo requer como parâmetro um objeto da classe Graphics, por convençãonomeado por g, usado por paint para desenhar imagens no applet . A classe

Graphics pertence ao pacote java.awt.O método drawString da classe Graphics  desenha o string de caracteres Alô, Mundo! no applet, a partir da posição 25 pixels na horizontal e 25 pixels,

na vertical. A origem das coordenadas é o canto superior esquerdo do applet.

Page 40: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 40/193 

i t j i *

Page 41: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 41/193

import javax.swing.*;import java.awt.*; public class AloMundo2Applet extends JApplet {

 public void paint(Graphics g) {g.setColor(Color.red);

g.drawLine(15,10,210,10);g.drawLine(15,30,210,30);

g.drawString("Alô, Mundo!",25,25);}

}

O método setColor(Color.red) de-fine a cor vermelha para a instância g daclasse Graphics. red é uma constante da classe Color do pacote java.awt.

O método drawLine da classe Graphics desenha linhas no applet. Os 4 argumentos referem-se as coordenadas x e y do pixelinicial e do pixel final da linha a ser desenhada.

 

E d i ã hil

Page 42: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 42/193

 public class Soma { public static void main(String[] args) {

int i = 1;int soma = 0;

 while (i <= 100) {soma = soma + i;i = i + 1;

}System.out.println(soma);}

}

Estrutura de repetição while

É necessário uma chave de abertura { e uma chave de fechamento } de bloco,

delimitando o conjunto de instruções associadas a estrutura de repetição.

 

import java.text.DecimalFormat;

Page 43: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 43/193

import java.text.DecimalFormat;import java.util.Scanner; public class Teste { public static void main(String args[]) {

Scanner entrada = new Scanner(System.in); byte n = 0; //contador de notasint nota, soma = 0;double media;System.out.print("Nota do aluno, -1 termina: ");nota = entrada.nextInt(); while (nota != -1) {

soma = soma + nota;

n = ( byte) (n + 1);System.out.print("Nota do aluno, -1 termina: ");nota = entrada.nextInt();

}DecimalFormat df = new DecimalFormat("0.00");if (n != 0) { media = soma / n;System.out.println("Media igual a " + df.format(media));

}elseSystem.out.println("Nenhuma nota foi digitada");

}}

 

O t j t t di ibili l f t ã d l

Page 44: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 44/193

O pacote java.text disponibiliza classes para formatação de valores eexpressões. A classe DecimalFormat é usada neste exemplo. O formato0.00 especifica que a saída terá pelo menos um dígito à esquerda do pontodecimal e exatamente dois dígitos à direita do ponto decimal. O método

format desta classe é usado para formatar uma variável do tipo primitivodouble.

Este exemplo apresenta um operador de coerção explícita (casting) paraconverter o resultado da expressão (n + 1) em um valor do tipo byte. Estaconversão é necessária porque o literal 1 é do tipo int o que implica que a

expressão retornará um valor também do tipo int.

 public class CoercaoExplicita { public static void main(String[] args) {

float f;

f = (float) 5.5;System.out.print(Float.toString(f));}

}

 

A ti d J2SE 5 0 l F tt t é d ét d i tf

Page 45: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 45/193

A partir de J2SE 5.0, a classe Formatter, através do método printf,também pode ser usada para a formatação da saída em System.out.

import java.util.Scanner;import static java.lang.Math.*; public class Teste {

 public static void main(String args[]){double raio;double area;Scanner entrada = new Scanner(System.in);System.out.print("Informe o raio do círculo: ");raio = entrada.nextDouble();area = PI * pow(raio, 2);System.out.printf("A area do circulo equivale a %6.2f", area);

}}

O método estático  Math.pow(base,exp) implementa a exponenciação.Este método recebe dois argumentos double e retorna um valor double.

 

A tabela a seguir apresenta alguns códigos de formatação da classe Formatter

Page 46: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 46/193

A tabela a seguir apresenta alguns códigos de formatação da classe Formatter e usados em System.out.printf.

f número de ponto flutuante em formato fixo

e,E número de ponto flutuante em notação exponencial (formato científico)

g,G número em ponto flutuante em formato genérico (fixo para númerospequenos e exponencial para grandes)

d  inteiros em decimal.

o número inteiro em octal

x,X Número inteiro em hexadecimal

s,S converte qualquer valor e apresenta em string

t,T formato para data e hora (com códigos adicionais para dia, mês, ano, etc.)

 

Page 47: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 47/193

import java.util.Date; public class Teste { public static void main(String args[]){

System.out.printf("Hoje: %1$td de %1$tB de%1$tY", new Date());

}}

A classe Date instancia um objeto contendo a data e hora do sistema

operacional. Os caracteres de formatação d , B e Y exibem, respectivamente, odia, com 2 caracteres, o mês, por estenso, e o ano, com 4 dígitos. A tabela decaracteres de formatação para data e hora contempla diversas outraspossibilidades de apresentação.

Hoje: 05 de Janeiro de 2005

Page 48: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 48/193

 

bli l I t {

Page 49: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 49/193

 public class Incremento { public static void main(String args[]) {

int i;i = 1;System.out.println(i);System.out.println(i++);System.out.println(i);i = 1;System.out.println(i);System.out.println(++i);

System.out.println(i);}}

1

12122

Os operadores de incremento e decremento (++ e --)incrementam e decrementam variáveis de tipo inteiro deuma unidade. Na forma pré-fixada o operador modifica ovalor da variável antes que o valor seja usado na expressão.Na forma pós-fixada o operador modifica o valor da variáveldepois que o valor é usado na expressão onde está a variável.

 

E t t d ti ã f

Page 50: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 50/193

Estrutura de repetição for

Exemplo de Applet Java utilizando a estrutura de

repetição for. Observe que não foi necessáriodefinir chaves de abertura e fechamento paradelimitar um bloco de comandos associados aofor, uma vez que só há uma linha de instrução.

import java.awt.Graphics;import javax.swing.JApplet; public class TesteFor extends JApplet {

 public void paint(Graphics g) {

for (int i = 1; i <= 10; i++)g.drawLine(10, 10, 250, i * 10);}

}

A estrutura for em Java é constituída de um valor inicial, um teste e umpasso, delimitados por ponto-e-vírgula.

 

Exemplo: programa para somar os números pares entre 0 e 100, usando laço for.

Page 51: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 51/193

import javax.swing.JOptionPane;import static javax.swing.JOptionPane.*; public class SomaPar {

 public static void main(String args[]) {int soma = 0;for (int i = 2; i <= 100; i += 2)

soma += i;JOptionPane.showMessageDialog(null,

"Valor da soma: " + soma,"Soma dos pares até 100",INFORMATION_MESSAGE);

System.exit(0);}

}

Exemplo: programa para somar os números pares entre 0 e 100, usando laço for.

Page 52: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 52/193

 

E t l tili l JT tA d

Page 53: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 53/193

Este exemplo utiliza a classe JTextArea dopacote javax.swing. Esta classe define umcomponente GUI capaz de armazenar e exibirmúltiplas linhas de texto.

Os métodos setText(String) e append (String) permitem, respectivamente, atribuir e acrescentar  Strings na instância da classe JTextArea.

 public class TestaFor {static int i; public static void main(String[] args) {

for( ; i < 10; )

System.out.print(i++ + " ");}}

Uma estrutura for pode ser construída sem um ou mais de seus componentes.

 

Estrutura de seleção múltipla switch

Page 54: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 54/193

Estrutura de seleção múltipla switchimport javax.swing.*;

 public class Calculadora { public static void main(String args[]) {

String s1, s2, s3;float f1, f2, f3=0;char c;s1 = JOptionPane.showInputDialog("Primeiro operando: ");s2 = JOptionPane.showInputDialog("Segundo operando: ");s3 = JOptionPane.showInputDialog("Operador aritmético: ");f1 = Float.parseFloat(s1);f2 = Float.parseFloat(s2);

c = s3.charAt(0);switch (c) {case '+' : f3 = f1 + f2; break;case '-' : f3 = f1 - f2; break;case '*' :case 'x' : f3 = f1 * f2; break;case '/' : f3 = f2 / f1; break;default:

}JOptionPane.showMessageDialog(null, "Resultado: " + f3,

"calculadora", JOptionPane.INFORMATION_MESSAGE);System.exit(0);

}}

 

A variável ou expressão de controle da estrutura de seleção switch deve

Page 55: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 55/193

A variável ou expressão de controle da estrutura de seleção switch deveassumir um valor inteiro, ou seja, do tipo byte, short, int ou char.

O comando break é necessário para impedir que a execução do programacontinue nas cláusulas case seguintes.

A cláusula default não é obrigatória.

O método charAt() da classe String permite selecionar o caracter cujaposição é especificada como parâmetro. A posição inicial corresponde a 0.

 

Estrutura de repetição do/while

Page 56: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 56/193

Estrutura de repetição do/whileA estrutura do/while testa a condição de continuação do laço depois docorpo do laço ser executado. Portanto, o corpo do laço sempre é executado pelo

menos uma vez.

 public class TestaDoWhile { public static void main(String args[]) {

 byte i;do {

i = ( byte) (Math.random() * 10);System.out.print(i + " ");

} while (i != 0);}

}

O método random() da classe Math gera um número aleatório do tipodouble compreendido entre 0, inclusive, e 1, exclusive. Não é necessário ocomando import para a classe Math, que pertence ao pacote java.lang.

 

Operadores Lógicos

Page 57: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 57/193

Operadores LógicosJava possui vários operadores lógicos que podem ser utilizados para obtercombinações lógicas do tipo AND, OR, XOR e NOT.

Para combinações AND, os operadores lógicos & e && são utilizados. Se & forempregado, as expressões em ambos os lados são avaliadas.

Para combinações OR, os operadores lógicos | e || são utilizados. A combina-ção XOR possui o operador lógico ^. Isto resulta em um valor true se a

expressão contiver um valor true e um false. A combinação NOT utiliza ooperador lógico !.

 public class TestaOR1 { public static void main(String args[]) {

int i = 2;

int j = 3;if((j == i++) | (i < ++j))

System.out.println("i = " + i + " j = " + j);}

public class TestaOR2 {

Page 58: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 58/193

 public class TestaOR2 { public static void main(String args[]) {

int i = 2;int j = 3;if((j == i++) || (i < ++j))

System.out.println("i = " + i + " j = " + j);}

}

Os dois exemplos retornam o mesmo resultado. Na prática, para avaliação deexpressões lógicas, recomenda-se empregar os operadores && e ||.

 public class TestaXOR { public static void main(String args[]) {

int i = 2;int j = 3;if((j == i++) ^ (i < ++j))

System.out.println("XOR OK");else

System.out.println("XOR not OK");}

}

Page 59: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 59/193

 

Neste exemplo a classe NomeUsuario definida pelo programador invoca o

Page 60: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 60/193

Neste exemplo, a classe NomeUsuario, definida pelo programador, invoca ométodo readLine da classe Console. A definição desta classe encontra-se nopacote corejava. Esta classe não faz parte da Java API. Foi escrita poroutros programadores Java e disponibilizada para uso em [Horstmann, 2001].

A classe do usuário  Saudação abaixo, utiliza um método definido pelousuário chamado imprime. Este método possui um argumento do tipo String e não retorna nenhum valor. É um método do tipo void .

import java.util.Scanner;

 public class Saudação { public static void main(String args[]) {

Scanner entrada = new Scanner(System.in);String nome = entrada.nextLine();imprime(nome);

}static void imprime(String s){System.out.printf("Olá, %s", s);

}}

 

public class QuadInt {

Page 61: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 61/193

 public class QuadInt { public static void main(String args[]) {

int i;for(int x = 1; x <= 10; x++) {

i = quadrado(x);System.out.printf

("Quadrado de %02d: %03d\n", x, i);}}

//Método quadrado public static int quadrado(int y){return (int) Math.pow(y, 2);

}}

A classe do usuário QuadInt utiliza um método definido pelo usuáriochamado quadrado. Este método possui um argumento do tipo int e retornaum valor também do tipo int.

 

import javax.swing.*;

Page 62: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 62/193

import java.awt.*; public class Celsius extends JApplet {

double c;double f;

 public void init() {String sc;sc = JOptionPane.showInputDialog

("Entre com a temperatura\nem graus Celsius");c = Double.parseDouble(sc);f = ( 9 * c ) / 5 + 32;

} public void paint(Graphics g) {

g.drawString("A temperatura " + c +"°C equivale a " + f + "°F", 25, 25);

}

}A classe do usuário Celsius sobrescreve os métodos init() e paint() de JApplet. Em um applet, o método paint() deve ser usado unicamentepara formatar uma saída utilizando métodos da classe Graphics.

 

Regras de Escopo

Page 63: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 63/193

Regras de EscopoTodos os exemplos vistos até aqui utilizam identificadores para nomes devariáveis e de objetos. Identificadores também são usados para nomear classese métodos definidos pelo usuário.

Cada identificador tem como atributos a duração e o escopo. A duração ou tempode vida é o período durante o qual o identificador existe na memória. O escopo dizrespeito ao local onde o identificador pode ser referenciado no programa.

 public class Escopo {

int x = 1; public static void main(String args[]) {Escopo escopo = new Escopo();int x = 5;System.out.println("x vale " + x);escopo.metodoA();escopo.metodoB();escopo.metodoA();escopo.metodoB();System.out.println("x vale " + x);

public void metodoA() {int x = 25;

Page 64: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 64/193

int x = 25;System.out.println("x em A vale " + x);x++;System.out.println("x em A vale " + x);

} public void metodoB() {System.out.println("x em B vale " + x);x *= 10;System.out.println("x em B vale " + x);

}

}x vale 5x em A vale 25x em A vale 26x em B vale 1x em B vale 10x em A vale 25x em A vale 26x em B vale 10x em B vale 100x vale 5

Uma variável local só é visível no método onde foicriada, este é o seu escopo. Uma variável de instância évisível em todo o contexto da instância da classe, este é oseu escopo. Uma variável de classe é visível por todas asinstâncias da classe.

Duração: uma variável local existe apenas durante aexecução do método. Uma variável de instância existedurante a existência da instância da classe.

 

Sobrecarga de Métodos

Page 65: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 65/193

Sobrecarga de MétodosJava permite que vários métodos com o mesmo nome sejam definidos, contantoque tais métodos tenham diferentes conjuntos de parâmetros. Esta característica é

chamada sobrecarga de métodos.

 public class Sobreposicao { public static void main(String args[]) {

Sobreposicao sobre = new Sobreposicao();System.out.println("Quadrado de 3: " +

sobre.quadrado(3));System.out.println("Quadrado de 3.5: " +sobre.quadrado(3.5));

} public int quadrado(int i) {

return i*i;

} public double quadrado(double f) {return f*f;

}}

Page 66: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 66/193

 

Arrays

Page 67: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 67/193

ArraysUm array é um grupo de posições contíguas na memória que possuem omesmo nome e o mesmo tipo. Em java, os arrays são tratados como objetos 

e, portanto, devem ser instanciados com o comando new.int[] array; //declara o arrayint array[]; //declara o arrayarray = new int[12]; //instancia o array

Quando um array é instanciado, seus elementos são automaticamente inicializa-dos com zero para tipos de dados numéricos e null para referências a objetos.

Em Java, o primeiro elemento de um array é sempre referenciado pelo índice 0.O array array acima, poderá ser referenciado pelos índices de 0 a 11.

int[] array = new int[12]; // ou...int array[] = new int[12];

Que também pode ser escrito na forma:

 

import javax.swing.*;bli l A {

Page 68: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 68/193

 public class Array { public static void main(String args[]) {

String saida = "";int[] i;

i = new int[10];saida += "Índice - Valor\n";for (int j = 0; j < i.length; j++) {

i[j] = (int) (Math.random() * 10);saida += j + " - " + i[j] + "\n";

}JOptionPane.showMessageDialog(null, saida,

"Inicializando um array",JOptionPane.INFORMATION_MESSAGE);

System.exit(0);}

}A variável de instância  length é a forma adequada de "percorrer" oselementos de um array em Java.

Page 69: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 69/193

 

Passando arrays para métodos

Page 70: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 70/193

Passando arrays para métodosExistem duas maneiras de se passar argumentos para métodos: por valor e porreferência. Em java, variáveis de tipo primitivo são sempre passadas por valor e objetos, incluindo arrays, são sempre passados por referência.

 public class Parametro { public static void main(String[] args) {

int[] array = {1, 2, 3, 4, 5};System.out.println("Valores originais do array:");for(int i = 0; i < array.length; i++)

System.out.print(array[i] + " ");Parametro p = new Parametro(); p.modificaArray(array);System.out.println("\nValores modificados no metodo:");for(int i = 0; i< array.length; i++)

System.out.print(array[i] + " ");

System.out.println("\nValor de a[3] antes da passagem: " + array[3]); p.modificaElemento(array[3]);System.out.println

("Valor de a[3] depois da passagem: " + array[3]);}

Page 71: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 71/193

 

Arrays multidimensionais

Page 72: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 72/193

Arrays multidimensionaisArrays com dois índices são utilizados normalmente para representar tabelas devalores consistindo de informações organizadas em linhas e colunas.

Em java, um array bidimensional, do tipo m[2][2], pode ser declarado einicializado com:

int[][] m = {{1, 2}, {3, 4}};

O exemplo abaixo apresenta algumas das potencialidades de arrays em Java:

 public class Arrays { public static void main(String[] args) {

String[][] s1 = new String[2][2];s1[0][0] = "Rita";String[] s2 = {"Julia", "Augusto"};

s1[1] = s2;for(int i = 0; i < s1.length; i++)for(int j = 0; j < s1[i].length; j++)

System.out.println(s1[i][j]);}

}

RitanullJuliaAugusto

 

Estrutura for each

Page 73: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 73/193

Estrutura for eachJ2SE 5.0 apresenta a estrutura for each, capaz de fazer a iteração dearrays (e também outras estruturas de dados avançadas de Java).

 public class TestaForEach { public static void main(String args[]) {

int[] array = new int[10];for(int i : array) {

array[i] = (int) (Math.random() * 10);System.out.printf("%02d\n",array[i]);}

}}

A nova estrutura for each torna a iteração de arrays mais simples eelegante, e deve ser empregada sempre que possível pelo programador Java.

 

Parâmetros na linha de comando

Page 74: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 74/193

Parâmetros na linha de comandoOs argumentos digitados na linha de comando são passados para o método main() da classe invocada por meio de um vetor de Strings. Por exemplo, se

for executada a linha de comando java Teste um dois três o método main() da classe Teste receberá o seguinte vetor de Strings:

args[0] = "um"args[1] = "dois"args[2] = "três"

O espaço serve como separador de argumentos. Se for necessário tratar umacadeia de caracteres com espaço como um único argumento será preciso delimitá-la com aspas duplas. Assim, o comando java teste um "dois três" resulta no seguinte vetor:

args[0] = "um"args[1] = "dois três"

O exemplo a seguir imprime a soma dos argumentos passados na linha decomando.

 

 public class Argumentos {

Page 75: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 75/193

 public static void main(String[] args) {int soma = 0;for(int i = 0; i < args.length; i++)

soma += Integer.parseInt(args[i]);System.out.print("Soma dos argumentos: ");System.out.println(soma);

}}

Para uma entrada do tipo java Argumentos 1 2 3 4 a saída será:

Soma dos argumentos: 10

Page 76: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 76/193

 

No exemplo anterior, a referência para a instância s2 é apontada para o mesmo

Page 77: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 77/193

endereço de memória da instância s1, logo a saída da aplicação será:

s1 igual a s2

 public class Strings2 { public static void main(String[] args) {String s1 = new String("abcdef");

String s2 = "abcdef";

if(s1 == s2)

System.out.print("s1 igual a s2");elseSystem.out.print("s1 diferente de s2");

}

}

s1 diferente de s2

Neste caso, a nova instância  s2 criada referencia um endereço de memóriadiferente daquele apontado pela instância s1. Trata-se de objetos distintos!

 

Uma instância da classe String é um objeto imutável.

Page 78: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 78/193

 public class Strings3 { public static void main(String[] args) {

String s1 = "abc";

String s2 = s1;s1 = s1.concat("def");

if(s1 == s2)System.out.print("s1 igual a s2");

elseSystem.out.print("s1 diferente de s2");

}

}

s1 diferente de s2

Sendo um objeto String imutável, a linha s1 = s1.concat("def"); irápassar a referência ao objeto s1 para um outro endereço de memória. Assim, asinstâncias s1 e s2 não mais referenciam à mesma posição de memória.

Page 79: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 79/193

 

Classe StringBuffer

Page 80: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 80/193

gA classe StringBuffer é uma alternativa mais adequada para a manipulaçãode cadeias de caracteres quando for necessário fazer muitas alterações nosvalores armazenados.

Ao contrário da classe String, objetos da classe StringBuffer podem seralterados sem que a MVJ modifique a referência na memória.

 public class TestaStringBuffer {

 public static void main(String[] args) {StringBuffer sb1 = new StringBuffer("abc");

StringBuffer sb2 = sb1;

sb1 = sb1.append("def");

if(sb1 == sb2)System.out.print("sb1 igual a sb2");

elseSystem.out.print("sb1 diferente de sb2");

}

}

 

sb1 igual a sb2

Page 81: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 81/193

O método append() da classe StringBuffer altera o valor da instância sb1,mantendo a referência a mesma posição de memória. Assim, sb2 e sb1 continuam apontando para o mesmo endereço.

StringBuffer sb = new StringBuffer();

String s = "abcdef";

sb = s;

Não é possível fazer uma conversão direta de String para StringBuffer,conforme visto abaixo:

O método append() da classe StringBuffer pode ser usado para este fim:

StringBuffer sb = new StringBuffer();

String s = "abcdef";

sb.append(s);Para converter um objeto StringBuffer em String, deve empregar ométodo toString():

s = sb.toString();

 

Enumerated Types

Page 82: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 82/193

ypJ2SE 5.0 incorpora (finalmente!) o recurso de tipos enumerados, comum emC/C++. Um enum é um tipo especial de classe, definida em java.lang.Enum .

 public class TestaEnums {enum Times {ATLÉTICO, VASCO, GRÊMIO, CORITIBA, BAHIA}; public static void main(String[] args) {

for(Times time : Times.values())System.out.printf("%s\n", time);

}}

 ATLÉTICO VASCO

GRÊMIOCORITIBA BAHIA 

Cada identificador (ex.: Times.ATLÉTICO) é um objeto da classe Enum .

 

É possível percorrer  parte de um enum usando o método java.util.EnumSet range conforme no exemplo que se segue

Page 83: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 83/193

import java.util.EnumSet; public class Teste {

enum Semana {DOMINGO, SEGUNDA, TERÇA, QUARTA,QUINTA, SEXTA, SÁBADO}; public static void main(String[] args){

for(Semana dia : EnumSet.range(Semana.SEGUNDA, Semana.SEXTA))

System.out.println(dia);}}

EnumSet.range, conforme no exemplo que se segue.

Uma outra situação recomendada para o uso de enums é em comandos deseleção múltipla switch, conforme exemplo que se segue.

 

import java.util.Scanner;

Page 84: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 84/193

 public class Teste {enum Operador {MAIS, MENOS, VEZES, DIVIDIDO_POR}; public static void main(String[] args) {

double x = Double.parseDouble(args[0]);double y = Double.parseDouble(args[1]);double res = 0;for (Operador op : Operador.values()) {

switch(op) {

case MAIS: res = x + y; break;case MENOS: res = x - y; break;case VEZES: res = x * y; break;case DIVIDIDO_POR: res = x / y;

}

System.out.printf("%2.2f %s %.2f =%2.2f\n", x, op, y, res);}

}}

 

Programação baseada em objetos

Page 85: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 85/193

g ç jEm linguagens como Pascal e C, a programação é orientada à ação. Em Java, aprogramação é orientada a objetos.

Os programadores Java concentram-se em escrever seus próprios tipos definidospelo usuário, chamados classes. Cada classe contém dados (atributos) bem comoo conjunto de métodos que manipulam os dados.

class Produto extends Object { public int codigo;

 public String nome; public int quantidade; public double preco; public Produto(int c, String n, int q, double p){

codigo = c;

nome = n;quantidade = q;preco = p;

}}

Page 86: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 86/193

 

Utilize agora o BlueJ para instanciar alguns objetos da classe Produto.

Page 87: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 87/193

Você pode acessar osatributos de cada um dosobjetos dando um duploclique sobre o ícone das

instâncias.

Você pode criar uma novainstância da classeProduto clicando com obotão direito do mousesobre o ícone da classe.

 

l T t P d {

Inclua uma nova classe do usuário TestaProd em seu projeto no BlueJ.

Page 88: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 88/193

class TestaProd {public static void main(String a[]){

String s = " ";Produto produto;produto = new Produto(10, "Sabonete", 12, 1.20);System.out.println(produto.codigo + s +

produto.nome);System.out.println(produto.quantidade + s +

produto.preco);

produto.quantidade = 100;System.out.println(produto.quantidade + s +produto.preco);

produto.preco *= 1.10;System.out.println(produto.quantidade + s +

produto.preco);

}}

A classe TestaProd declara uma variável produto do tipo Produto e ainstancia, através do comando new, que invoca o método construtor.

 

Page 89: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 89/193

A linha tracejada indicaque a classeTestaProd usa

métodos e/ou atributosda classe Produto.

Atente para o importante fato de que a classe TestaProd só conseguiu acessardiretamente os atributos da classe Produto porque estes foram declaradoscomo public. O que aconteceria se eles fossem declarados como private?

 

class Empregado {

i t St i

Page 90: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 90/193

private String nome;

private double salario;

//Método Construtor

public Empregado(String n, double s) {nome = n;

salario = s;

}

public void print() {

System.out.println(nome + " " + salario);}

public void aumentaSalario(double percentual) {

salario *= 1 + percentual / 100;

}

}

Os modificadores de acesso tem por objetivo definir a visibilidade de ummembro de uma classe (atributo ou método) em relação à outras classes. Omodificador private permite ao acesso apenas aos membros da própria classe.

Page 91: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 91/193

Page 92: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 92/193

 

Sobrecarga de construtores

Page 93: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 93/193

Os métodos de uma classe podem ser sobrecarregados. Para sobrecarregar ummétodo construtor, simplesmente forneça uma definição separada de cada um

dos métodos sobrecarregados. Tais métodos devem possuir listas de parâme-tros diferentes.

class Empregado {

private String nome;

private double salario;public Empregado(String n, double s) {

nome = n;

salario = s;

}

public Empregado(String n) {nome = n;

salario = 500;

}

 

Métodos set e getA iá i d i â i d fi id i d ó d i l d

Page 94: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 94/193

As variáveis de instância definidas como privadas só podem ser manipuladasatravés de métodos da própria classe. Todavia, as classes podem fornecermétodos public para permitir a clientes da classe atribuir valores (set) ou

obter (get) variáveis de instância declarados como private.public class Cliente {

private String nome;private String endereco;private String telefone;public Cliente(String n, String e, String t) {

nome = n;endereco = e;telefone = t;

}public void setNome(String n) {nome = n;}public void setEndereco(String e) {endereco = e;}public void setTelefone(String t) {telefone = t;}public String getNome() {return nome;}public String getEndereco() {return endereco;}public String getTelefone() {return telefone;}

public class TestaCliente {public static void main(String args[]) {

Page 95: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 95/193

Cliente fulano = new Cliente("Fulano", "Rua Halfeld", "3213-5000");

Cliente beltrano = new Cliente("Beltrano", "Rua Marechal", "3224-1000");

System.out.println("Cliente 1: " + fulano.getNome()+", " + fulano.getEndereco() + ", " +fulano.getTelefone() + "\n");

System.out.println("Cliente 2: " + beltrano.getNome() +", "+ beltrano.getEndereco() + ", " +beltrano.getTelefone() + "\n");

fulano.setNome("Ciclano");beltrano.setEndereco("Rua Sao Joao");fulano.setTelefone(beltrano.getTelefone());System.out.println("Cliente 1: " + fulano.getNome()+

", " + fulano.getEndereco() + ", " +fulano.getTelefone() + "\n");

System.out.println("Cliente 2: " + beltrano.getNome() +", "+ beltrano.getEndereco() + ", " +beltrano.getTelefone() + "\n");

}}

Page 96: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 96/193

 

Varargs

Page 97: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 97/193

J2SE 5.0 apresenta um novo recurso denominado varargs, que permite passarum número variável de argumentos a um método, sem a necessidade deencapsulá-lo em um array, por exemplo.

class VarOla {

 public static void printSaudação(String... nomes) {for(String n : nomes) {

System.out.println("Olá " + n + ". ");

}}

 public static void main(String[] args) {printSaudação("Wander", "Rita", "Julia","Augusto");

}

}

A declaração de um argumento como varargs é denotada pelo seu tipo seguidode reticências (...) e o nome.

 

Em tempo de compilação, um varargs é convertido para um array. Isto explicaporque o código abaixo executa sem problemas alterando a clássica assinatura

Page 98: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 98/193

porque o código abaixo executa sem problemas, alterando a clássica assinaturado método main.

class VarOla { public static void printSaudação(String... nomes) {

for(String n : nomes) {

System.out.println("Olá " + n + ". ");

}

} public static void main(String... args) {printSaudação(args);

}

}

A Sun, inclusive, aconselha o uso de varargs em lugar de arrays na assinaturado método main.

 

Sobrecarga com Varargs

Page 99: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 99/193

O exemplo a seguir ilustra o comportamento do compilador Java no caso dehaver métodos sobrecarregados com e sem varargs disputando a execução.

 public class QualMétodo {QualMétodo(Integer... size) {

System.out.println("Versão com varargs");}QualMétodo(int i, int j) {

System.out.println("Versão com tipo int");

}QualMétodo(Integer i, Integer j) {

System.out.println("Versão com Integer");}

 public static void main(String[] args) {System.out.println("Chamada com tipo int");new QualMétodo(2, 3);System.out.println("Chamada com Integer");new QualMétodo(new Integer(2), new Integer(3));

}}

 

Chamada com tipo intV ã ti i t

Page 100: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 100/193

 Versão com tipo intChamada com Integer Versão com Integer

Observa-se que a chamada com varargs  não tem precedência, quando daexistência de métodos com assinatura igual à chamada. Ainda usando o exemploanterior, somente será chamado o método com varargs em situações como aapresentada abaixo, onde não há correspondência com um método específico.

 public static void main(String[] args) {System.out.println("Chamada com tipo int");new QualMétodo(2, 3, 4);

}

Chamada com tipo int Versão com varargs

 

Referência this

Page 101: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 101/193

Em algumas situações é necessário referenciar o próprio objeto corrente. Poressa razão todo objeto possui um atributo especial identificado por this que éuma referência para o próprio objeto. O exemplo abaixo mostra um uso típico do

atributo this. Ele mostra um método cujo parâmetro formal possui o mesmonome de um atributo de instância. Para distingui-los é necessário qualificar oatributo da instância com o atributo this.

import java.awt.Color;public class ObjGeo {

private Color cor;private int larg;private int alt;public ObjGeo (Color cor, int larg, int alt) {

this.cor = cor; this.larg = larg; this.alt = alt;

}public Color getCor() {return cor;}public int getLarg() {return larg;}public int getAlt() {return alt;}

}

 

import java.awt.Color;

public class TestaObjGeo {

Page 102: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 102/193

public static void main(String args[]) {

ObjGeo obj = new ObjGeo(Color.red,4,8);

System.out.println("Cor: " + obj.getCor());

System.out.println("Largura: " + obj.getLarg());System.out.println("Altura: " + obj.getAlt());

}

}

A classe Color, do pacote java.awt, é responsável pela manipulação das

cores em Java. A Color.red define a cor vermelha para a instância obj doobjeto ObjGeo.

Cor: java.awt.Color[r=255,g=0,b=0]Largura: 4Altura: 8

 

Modificador static

Page 103: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 103/193

Cada instância de um objeto tem sua própria cópia de todas as variáveis deinstância. Porém, em certas situações, pode ser útil usar uma variável de classe,estática, cujo valor é compartilhado por todas as instâncias da classe.

public class Socio {

private String nome;

private String endereco;

private static int numSocios;

public Socio (String n, String e) {nome = n;

endereco = e;

numSocios++;

}

public String getNome() {return nome;}public String getEndereco() {return endereco;}

public static int getNumSocios() {return numSocios;}

}

 

public class TestaSocio {

public static void main(String args[]) {

Page 104: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 104/193

Socio s1 = new Socio("Pedro","Rua Santa Rita");

Socio s2 = new Socio("Paulo","Av. dos Andradas");

Socio s3 = new Socio("Jose","Av. Rio Branco");

System.out.println("Socios do clube:\n"+s1.getNome() + ", " + s1.getEndereco() +

"\n" + s2.getNome() + ", " + s2.getEndereco() +

"\n" + s3.getNome() + ", " + s3.getEndereco());

System.out.println("Numero de socios: "+

Socio.getNumSocios());}

}

Socios do clube:

Pedro, Rua Santa RitaPaulo, Av. dos Andradas

Jose, Av. Rio Branco

Numero de socios: 3

 

Pacotes

Page 105: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 105/193

Pacotes é a solução proposta pela Sun para reunir interfaces e classesrelacionadas formando uma biblioteca. Esta organização evita a colisão denomes de classes. Veja a extensão do problema: sendo Java uma linguagem para

atuar na internet, como evitar que classes obtidas por download não tenham osmesmos nomes de classes já existentes na máquina?!

Toda classe pertence a um pacote. Apenas o pacote default, que refere-se asclasses do diretório corrente e o pacote java.lang, que agrupa as classes do

núcleo básico de Java, não precisam ser importados com o comando import.As classes de um pacote devem colocadas em um diretório obedecendo a estru-tura do nome do pacote, a partir de algum diretório presente na variável deambiente classpath.

Suponha que eu tenha criado um conjunto de classes de objetos geométricos.Poderia criar um pacote chamado wander para colocar as classes.

 

 package wander;public class ObjGeo {

Color cor;

Page 106: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 106/193

Color cor;int x;int y;public ObjGeo (Color cor, int x, int y) {

this.cor = cor;this.x = x;this.y = y;

}}

A variável de ambiente classpath poderia ser definida como:set classpath = .;c:\...\jdk1.4.1\lib;c:\java;

O arquivo ObjGeo.class deve ser colocado no diretório:

c:\java\wander

Os atributos da classe ObjGeo foram definidos com o modificador de acessodefault. Isto significa que somente classes do pacote wander poderãoacessar estes atributos.

Page 107: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 107/193

 

package d

Redefinição da classe TestaObjGeo dentro do pacote wander:

Page 108: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 108/193

 package wander;import java.awt.Color;

 public class TestaObjGeo {

 public static void main(String[] args) {ObjGeo obj = new ObjGeo(Color.CYAN, 10, 10);

System.out.println(obj.cor);

System.out.println(obj.x);

System.out.println(obj.y);

}}

O programa compila normalmente. Qual seria o comportamento do compiladorse os atributos da classe ObjGeo fossem definidos com o modificador de acesso

 protected ? E com private?

Page 109: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 109/193

 

import java.awt.Color; public class FormaGeo {

Page 110: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 110/193

p {

 protected Color cor; protected  int x, y;

 public FormaGeo(Color c, int x, int y) {cor = C;

this.x = x;this.y = y;

}

 public Color getCor() {

return cor;

}

 public int getX() {

return x;

}

 public int getY() {

return y;

}

}

Page 111: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 111/193

 

Page 112: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 112/193

A linha contínua indicaque a classe Circulo herda métodos e/ouatributos da classeForma.

Observe que você pode criar objetos (instâncias) da classe Forma e também daclasse Circulo, utilizando o BlueJ.

 

import java.awt.Color; public class TestaHeranca {

Page 113: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 113/193

 public static void main(String[] args) {FormaGeo fg = new FormaGeo(Color.red, 4, 8);

Circulo circ = new Circul

(Color.blue, 2, 5, 10);System.out.println

("Cor da Forma Geometrica: " + fg.getCor());

System.out.println

("Cor do Circulo: " + circ.getCor());

System.out.println("Area do Circulo: " + circ.area());

System.out.println

("Coordenada X da Forma Geometrica: " +

fg.getX());

System.out.println("Coordenada Y do Circulo: " +circ.getX());

}

}

Page 114: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 114/193

 

 public class Circulo extends Ponto { protected  double raio;public Circulo(double r, int a, int b) {

Page 115: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 115/193

 public Circulo(double r, int a, int b) {super(a, b);raio = r;

System.out.println("Circulo - " + this);} public String toString() {

return super.toString() + ", Raio: " + raio;}

}

 public class TestaHeranca { public static void main(String[] args) {

Ponto pt;Circulo circ1;Circulo circ2;

pt = new Ponto(10, 5);circ1 = new Circulo(4.5, 72, 29);circ2 = new Circulo(10, 5, 5);

}}

Page 116: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 116/193

 

Classes abstratasUma classe abstrata não pode ser instanciada ou seja não há objetos que

Page 117: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 117/193

Uma classe abstrata  não pode ser instanciada, ou seja, não há objetos quepossam ser construídos diretamente de sua definição. Por exemplo, a compilaçãodo seguinte trecho de código dará erro:

abstract class ClasseAbstrata { public static void main(String[] args) {

ClasseAbstrata ca = new ClasseAbstrata();}

}

Somente classes concretas, ou seja, que não foram definidas como abstratas, éque podem ser instanciadas.

As classes abstratas definem um conjunto de funcionalidades das quais pelomenos uma está especificada mas não está definida  —  ou seja, contém pelo

menos um método abstrato.abstract class ClasseAbstrata {

 public abstract int metodo();

Um método abstrato não cria uma definição, mas apenas uma declaração de ummétodo que deverá ser implementado em uma classe derivada. Assim, para que

l d i d d l b i i bj é d

Page 118: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 118/193

uma classe derivada de uma classe abstrata possa instanciar objetos, os métodosabstratos devem ser definidos nestas classes derivadas.

class ClasseConcreta extends ClasseAbstrata { public int metodo() {

return 0;

}

}

 public abstract class Time {

abstract void meuTime(); public static void futebol() {System.out.println("Eu gosto de futebol");

}}

O exemplo a seguir ilustra um caso simples de uso de classe abstrata. A classeTime define o método abstrato  meuTime(), que é sobrescrito em seguida por3 classes concretas.

 

 public class America extends Time {void meuTime() {

System out println("Eu sou americano ");

Page 119: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 119/193

System.out.println( Eu sou americano... );}

}

 public class Atletico extends Time {void meuTime() {

System.out.println("Eu sou ATLETICANO!");}

}

 public class Cruzeiro extends Time {void meuTime() {

System.out.println("Eu sou cruzeirense...");}

}As classes America, Atletico e Cruzeiro redefinem o método abstrato meuTime(), de acordo com as particularidades de cada torcedor.

Page 120: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 120/193

Page 121: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 121/193

 

 public class Ponto extends Forma { protected  int x, y; public Ponto() {

Page 122: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 122/193

x = 0;y = 0;

}

 public Ponto(int a, int b) {x = a;y = b;

} public int getX() {

return x;

} public int getY() {

return y;} public String getNome() {

return "Ponto";} public String toString() {

return "[" + x + ", " + y + "]";} 

 public class Circulo extends Ponto { protected  double raio;public Circulo() {

Page 123: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 123/193

 public Circulo() {raio = 0;

}

 public Circulo(double r, int a, int b) {super(a, b);raio = r;

} public double area() {

return Math.PI * Math.pow(raio,2);

} public String toString() {

return "Centro: " + super.toString() +", Raio: " + raio;

} public String getNome() {

return "Circulo";}

}

 

 public class Retangulo extends Ponto { protected  int base; protected  int altura;

Page 124: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 124/193

 public Retangulo() {base = 0;altura = 0;

} public Retangulo(int x, int y, int b, int h) {

super(x, y);base = b;altura = h;

}

 public double area() {return base * altura;

} public String toString() {

return "Centro: " + super.toString() + ", Base:"+ base + ", Altura: " + altura;

} public String getNome() {

return "Retangulo";}

As classes Circulo e Retângulo estendem Ponto e sobrescrevem osmétodos area() e getNome() de Forma e também o método toString() de Ponto

Page 125: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 125/193

de Ponto.

 public class Desenha { public static void main(String args[]) {

Ponto pt = new Ponto(7, 11);Circulo circ = new Circulo(3.5, 22, 8);Retangulo ret = new Retangulo(10, 10, 5, 8);Forma[] forma = new Forma[3];forma[0] = pt;

forma[1] = circ;forma[2] = ret;for(int i = 0; i < forma.length; i++)

System.out.println(forma[i].getNome() + ": "+ forma[i].toString() + "\nArea = "+ forma[i].area());

}}

 

Page 126: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 126/193

A figura apresenta todasas classes e osrelacionamentosexistentes entre elas emum projeto construído

no BlueJ.

Ponto: [7, 11]Area = 0.0Circulo: Centro: [22, 8], Raio: 3.5Area = 38.48451000647496Retangulo: Centro: [10, 10], Base:5, Altura: 8Area = 40.0

 

InterfacesInterfaces são classes abstratas completamente não implementadas ou seja

Page 127: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 127/193

Interfaces são classes abstratas completamente não implementadas, ou seja,todos os métodos são abstratos e devem ser sobrescritos por métodos das classesconcretas que as implementam.

A forma geral de uso de uma interface em Java é:

class Identificador  implements Interface1,Interface2... 

O conceito de interface permite a implementação de uma espécie de herançamúltipla em Java, sobrepondo a regra de que uma subclasse somente pode serherdada de uma única superclasse.

Considerando que todos os métodos de uma interface são abstratos, quando uma

classe implementa esta interface, deve escrever o código de todos esses métodosabstratos. Este é o chamado contrato entre a interface e a classe que aimplementa.

O exemplo a seguir define uma interface Radio e uma interface Relogio. Aclasse concreta RadioRelogio que herda os métodos destas interfaces.

Page 128: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 128/193

 

import java.util.Date; public class RadioRelogio implements Radio, Relogio { private Date horario;private double estacao;

Page 129: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 129/193

 private double estacao; public void setEstacao(double d) {

estacao = d;

} public double getEstacao() {return estacao;

} public void setHorario(Date d) {

horario = d;} public Date getHorario() {

return horario;} public static void main(String[] args) {

RadioRelogio rr = new RadioRelogio();rr.setEstacao(1.5);

rr.setHorario(new Date());System.out.println(rr.getEstacao());System.out.println(rr.getHorario());

}}

 

Classes InternasEm Java é possível declarar uma classe dentro da declaração de outra classe

Page 130: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 130/193

Em Java é possível declarar uma classe dentro da declaração de outra classe.Tais classes são denominadas classes internas.

 public class Externa { private int x = 7;

class Interna {

 public void imprimeExterna() {System.out.println("x vale " + x);

}}

}

Neste exemplo, a classe interna está acessando um membro privado da classeexterna. Isto está correto, afinal, a classe interna é também um membro da

classe externa.

 

 public class Externa { private int x = 7; public void instanciaInterna(){

Page 131: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 131/193

p (){

Interna in = new Interna(); //instancia interna

in.imprimeExterna(); //invoca método da interna

}class Interna {

 public void imprimeExterna() {System.out.println("x vale " + x);

}

} //fim da classe interna public static void main(String[] args){

Externa ex = new Externa(); //instancia externa

ex.instanciaInterna(); //invoca método da externa

}

}

Para instanciar uma classe interna, é necessário uma instância da classeexterna. Acima, a instância ex é que instancia um objeto in da classe interna.

 

 public class Externa { private int x = 7;

class Interna {

Page 132: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 132/193

class Interna {

 public void imprimeExterna() {System.out.println("x vale " + x);

}}

 public static void main(String[] args){Externa ex = new Externa();

Externa.Interna in = ex.new Interna();

in.imprimeExterna();}

}

Voltando a classe Externa da página anterior, este exemplo ilustra como criar

um objeto da classe interna fora do código da instância da classe externa.A instanciação de uma classe interna é o único cenário em Java em que se faznecessário chamar new a partir de uma instância.

 

Classes Internas AnônimasJava permite que se crie um objeto de uma classe interna sem nome, chamada

Page 133: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 133/193

p q jclasse interna anônima.

class Externa {

 public void imprime(){System.out.println("Eu sou a classe externa");

}} public class TestaAnonima {

Externa ex = new Externa() { public void imprime() {System.out.println

("Eu sou a classe interna anônima");}

};

 public static void main(String[] args){TestaAnonima ta = new TestaAnonima();ta.ex.imprime();

}}

 

Tratamento de exceçõesUm erro para o qual pode existir um tratamento é chamado, em computação, de

Page 134: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 134/193

p q p , p ç ,exceção. Exemplos de exceções incluem divisão por zero, parâmetros demétodos inválidos, overflow e subscrito de arrays fora dos limites.

Utilizar tratamento de exceções permite ao programador remover o código detratamento de erros da linha principal de execução do programa. Isso melhora aclareza e a modificabilidade do código fonte.

 public class Excecao {

 public static void main(String[] args) {System.out.println("Antes do erro");try {

System.out.print(10 / 0);}catch(RuntimeException e){

System.out.println("Erro");}System.out.println("Depois do erro");

}}

Page 135: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 135/193

 

class Matematica { public static void main(String[] args) {

try {int op1 = Integer parseInt(args[0]);

Page 136: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 136/193

int op1 = Integer.parseInt(args[0]);int op2 = Integer.parseInt(args[1]);System.out.println("Soma = " + (op1 + op2));

System.out.println("Subtracao = " + (op1 - op2));System.out.println("Produto = " + (op1 * op2));System.out.println("Divisao = " + (op1 / op2));

} catch(ArithmeticException ae) {System.out.println("Erro de divisao por zero");

} catch(ArrayIndexOutOfBoundsException aie) {

System.out.println("Numero de argumentos invalido");} catch(NumberFormatException nfe) {System.out.println("Digite apenas numeros inteiros");

}}

}

Soma = 15Subtracao = 5Produto = 50Divisao = 2

 ArithmeticException,  ArrayIndexOutOfBoundsException e NumberFormatException são subclassesde RuntimeException e, portanto, o programador nãoé obrigado a capturar estas exceções.

 

import java.io.*; public class Adicao {

 public static void main(String[] args) {St i

Page 137: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 137/193

String s;int num1, num2, soma;try {

System.out.println("Entre com o 1o. numero: ");InputStreamReader isr = new 

InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);s = br.readLine();

num1 = Integer.parseInt(s);System.out.println("Entre com o 2o. numero: ");s = br.readLine();num2 = Integer.parseInt(s);soma = num1 + num2;System.out.println("Soma = " + soma);

} catch(IOException e) {System.out.println("Erro na entrada de dados");

}}

}

Page 138: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 138/193

 

import java.io.*; public class Adicao {

 public static void main(String[] args) throws 

Page 139: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 139/193

p ( g[] g )

IOException {

String s;

int num1, num2, soma;System.out.println("Entre com o 1o. numero: ");

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

s = br.readLine();num1 = Integer.parseInt(s);

System.out.println("Entre com o 2o. numero: ");

s = br.readLine();

num2 = Integer.parseInt(s);

soma = num1 + num2;System.out.println("Soma = " + soma);

}

}

 

Para lançar explicitamente uma exceção, utiliza-se o operador throw. Oexemplo a seguir cria uma classe do usuário chamada NumeroPositivo, quelança uma exceção Exception se for passado um argumento inválido.

Page 140: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 140/193

class NumeroPositivo {

 private int num; public NumeroPositivo(int n) throws Exception {if (n < 1)

throw new Exception("Número não positivo");

num = n;

}

}

A cláusula throws, na assinatura do método, especifica que pode ser lançadauma exceção da classe Exception. O comando throw cria um novo objeto daclasse Exception e ainda acrescenta um argumento referente a esta exceção.

A classe TestaExcecao, definida a seguir, instancia um novo objeto da classe  NumeroPositivo, passando um valor como argumento. A exceção lançada por NumeroPositivo será capturada pelo bloco try-catch deTestaExcecao.

Page 141: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 141/193

 

Exceções do programadorSe o programador considerar que nenhuma exceção se encaixa no tipo de erro

Page 142: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 142/193

Se o programador considerar que nenhuma exceção se encaixa no tipo de erroque pretende lançar, pode criar uma nova subclasse de Exception para

representar essa exceção.class PosiviteNumberException extends Exception {

 public PosiviteNumberException(String s) {

super(s);}

}

A classe PosiviteNumberException estende a classe Exception. Oargumento String s é passado para a superclasse.

A classe do usuário NumeroPositivo foi reescrita para lançar Posivite NumberException ao invés de Exception. A execução de TestaExcecao obterá o mesmo resultado visto anteriormente.

 

class NumeroPositivo { private int num; public NumeroPositivo(int n) throws 

PosiviteNumberException {

Page 143: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 143/193

PosiviteNumberException {if (n < 1)

throw new PosiviteNumberException("Número não positivo");

num = n;}

}

Existe ainda uma cláusula opcional do bloco try-catch chamada finally.Seu propósito é conter um trecho de código que deve ser executadoindependentemente de ocorrer ou não uma exceção.

O exemplo seguinte é uma adaptação da classe Matematica (pág. 117),incluindo uma cláusula finally após o último catch. Para uma execução dotipo java Matematica 3 0 a saída é:

Soma = 3Subtracao = 3Produto = 0Erro de divisao por zeroObrigado por usar a calculadora

 

class Matematica { public static void main(String[] args) {

try {int op1 = Integer.parseInt(args[0]);

Page 144: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 144/193

int op1 Integer.parseInt(args[0]);int op2 = Integer.parseInt(args[1]);System.out.println("Soma = " + (op1 + op2));

System.out.println("Subtracao = " + (op1 - op2));System.out.println("Produto = " + (op1 * op2));System.out.println("Divisao = " + (op1 / op2));

} catch (ArithmeticException e) {System.out.println("Erro de divisao por zero");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("Numero de argumentos invalido");

} catch (NumberFormatException e) {System.out.println("Digite apenas numeros inteiros");

} finally {

System.out.println("Obrigado por usar a calculadora");

}}

GUIs AWT e Swingi d i i l d G

Page 145: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 145/193

Java possui dois pacotes para manipulação de componentes GUI. O pacotejava.awt ( Abstract Windowing Toolkit ) está diretamente associado com

as capacidades de GUI da plataforma local. O pacote javax.swing surgiuna versão 1.2 (Java 2) e seus componentes GUI são chamados Java puros,por apresentarem o mesmo look&feel em qualquer plataforma.

Frame é o componente do pacote AWT responsável pela criação de janelas 

no ambiente gráfico utilizado. Este componente gera uma janela com barra detítulo, bordas e pode ter outros componentes em seu interior, como caixas detexto, botões, caixas de rolamento, etc.

Ao se utilizar o pacote swing, usamos o componente JFrame, que herda os

atributos e comportamentos de Frame. O exemplo a seguir demonstra acriação de uma janela por intermédio da classe JFrame do pacotejavax.swing.

 

import java.awt.*;import javax.swing.*;

public class Janela extends JFrame {

Page 146: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 146/193

public Janela() { //método construtor da classesetTitle(“Uma janela qualquer”); 

setSize(400,50);setLocation(150,150);

setResizable(false);

getContentPane().setBackground(Color.red);

}

public static void main(String args[]) {Janela j = new Janela();

j.show(); //Exibe a Janela

j.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

}}

 

Uma janela da classe JFrame ou qualquer subclasse só é exibida na telaquando o método show é invocado. Além disso, o tamanho de uma janela deve ser definido através do método setSize herdado da classe

Page 147: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 147/193

deve ser definido através do método setSize, herdado da classejava.awt.Component.

A posição da janela é especificada com o método setLocation, tambémdo pacote Component.A cor de fundo é atribuída através do método setBackground .O método setResizable determina se a janela pode ou não serredimensionada.

O método main do exemplo define uma ou mais instruções responsáveis pelofechamento da janela. Isto é necessário para encerrar a janela DOS ao términoda execução do aplicativo. O método setDefaultCloseOperation daclasse JFrame é responsável por esta tarefa.

Page 148: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 148/193

 

import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TestaRotulo extends JFrame {private JLabel Rot1 Rot2;

Page 149: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 149/193

private JLabel Rot1,Rot2;public TestaRotulo() {super("Teste de JLabel");//para setTitle()Container C = getContentPane();C.setLayout(new FlowLayout());Rot1 = new JLabel(" CES/JF sem logo");Rot1.setToolTipText("Rótulo 1");C.add(Rot1);Icon Ces = new ImageIcon("c:\\ceslogo.gif");Rot2 = new JLabel(" CES/JF com logo");Rot2.setIcon(Ces);Rot2.setHorizontalTextPosition

(SwingConstants.CENTER);Rot2.setVerticalTextPosition

(SwingConstants.BOTTOM);Rot2.setToolTipText("Rótulo 2");C.add(Rot2);setSize(200,200);show();

public static void main(String args[]) {

TestaRotulo T = new TestaRotulo();

T.setDefaultCloseOperation(JFrame.

Page 150: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 150/193

T.setDefaultCloseOperation(JFrame.

EXIT_ON_CLOSE);

}}

O método setLayout da classe Container define o tipo do gerenciadorde leiaute para a interface com o usuário do aplicativo Java. Se você vai usarmais de um componente gráfico em um Container, deverá usar tambémum gerenciador de leiaute para conter todos os componentes.

FlowLayout é o gerenciador mais simples e que coloca os componentesGUI anexados da esquerda para a direita até o limite do Container.

A classe TestaRotulo instancia dois componentes JLabel. O comandosuper, por herança, invoca o método setTitle de JTable. Lembre-seque TestaRotulo é uma subclasse de JTable.

Page 151: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 151/193

Page 152: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 152/193

 

import java.awt.*;i j *

Um evento com botões (Jbutton)Cria dois

Page 153: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 153/193

import java.awt.event.*;import javax.swing.*;

public class Classico extends JFrame{private JButton Cruzeiro, Atletico;public Classico() {super("Classico mineiro");Container C = getContentPane();C.setLayout(new FlowLayout());

Cruzeiro = new JButton("Cruzeiro");C.add(Cruzeiro);Atletico = new JButton("Atletico");C.add(Atletico);TrataBotao B = new TrataBotao();Cruzeiro.addActionListener(B);Atletico.addActionListener(B);setSize(250,100);show();

}

botões,Cruzeiro eAtlético

Instanciaos botões,

definindoos rótulos

Instancia a

classe internapara tratamentode eventos dosbotões

 

public static void main(String args[]) {

Classico clas = new Classico();

clas.setDefaultCloseOperation

Page 154: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 154/193

(JFrame.EXIT_ON_CLOSE);

}

//classe interna para tratamento de evento de botão:

private class TrataBotao implements ActionListener {

//método para tratamento de evento de botão:

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null,

"O melhor de Minas: "+e.getActionCommand());} //Fim do método actionPerformed

} //Fim da classe interna TrataBotao

} //Fim da classe Classico

Este exemplo apresenta o objeto botão, um componente gráfico em que ousuário clica sobre o objeto para acionar uma ação específica. Um Jbuttongera um ActionEvent que deve ser tratado pelo método actionPerfomed a partir da classe interna que implementa ActionListener.

Page 155: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 155/193

 

O exemplo a seguir, uma calculadora com as quatro operações aritméticas,il i l ã d i d t t JT tFi ld b tõ JB tt

Eventos com caixas de texto

Page 156: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 156/193

ilustra a inclusão de caixas de texto JTextField e botões JButton emuma janela Jframe, com os respectivos tratamento de eventos.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class Calcula extends JFrame implements ActionListener {JLabel L1,L2,L3; //Cria 3 rótulos

JButton B1,B2,B3,B4,B5; //Cria 5 botões

JTextField T1,T2,T3; //Cria 3 caixas de texto

Caixas de texto(JTextField )

Botões(JButton)

 

  public static void main(String args[]){Calcula calc = new Calcula();calc.show();calc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Page 157: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 157/193

} public Calcula()

{ setTitle("Calculadora");setSize(350,150);setLocation(50,50);getContentPane().setLayout(new GridLayout(3,4));L1 = new JLabel("Operando1");L2 = new JLabel("Operando2");

L3 = new JLabel("Resultado");B1 = new JButton("+");B1.addActionListener(this);B2 = new JButton("-");B2.addActionListener(this);B3 = new JButton("x");

B3.addActionListener(this);B4 = new JButton("/");B4.addActionListener(this);B5 = new JButton("Limpar");B5.addActionListener(this);

Associa ouvintesde eventos paracada um dosbotões criados

 

T1 = new JTextField();T2 = new JTextField();T3 = new JTextField();T3 setEditable(false);

Torna a caixa de texto T3não-editável pelo usuário

Page 158: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 158/193

T3.setEditable(false);getContentPane().add(L1);getContentPane().add(T1);

getContentPane().add(B1);getContentPane().add(B2);getContentPane().add(L2);getContentPane().add(T2);getContentPane().add(B3);getContentPane().add(B4);

getContentPane().add(L3);getContentPane().add(T3);getContentPane().add(B5);

}

Este aplicativo utiliza um novo tipo de gerenciador de leiaute, chamado

GridLayout. Este gerenciador especifica, como argumentos, o número delinhas e o de colunas para o leiaute. As suas posições vão sendo alocadas sempre de cima para baixo e da esquerda para a direita.

Aloca os objetos derótulos, botões e caixasde texto ao gerenciadorde leiaute.

 

public void actionPerformed(ActionEvent e){if(e.getSource()==B5) {T1 setText("");

Page 159: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 159/193

T1.setText( );T2.setText("");

T3.setText("");return;}float op1=0,op2=0,res=0;try {op1 = Float.parseFloat(T1.getText());

op2 = Float.parseFloat(T2.getText());}catch(NumberFormatException erro) {T3.setText("Erro!!");return;}

if(e.getSource() == B1) res = op1 + op2;if(e.getSource() == B2) res = op1 - op2;

if(e.getSource() == B3) res = op1 * op2;if(e.getSource() == B4) res = op1 / op2;T3.setText(""+res);

}}

Limpa as caixas de texto

Page 160: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 160/193

 

Listas de Seleção JListAs listas de seleção são objetos swing que

ibili lh d á i l

Page 161: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 161/193

possibilitam a escolha de um ou vários valoresarmazenados em uma lista de opções. Esta lista é

manipulada a partir da classe JList. O exemploseguinte ilustra a utilização desta classe.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;import javax.swing.event.*;

public class Quitanda extends JFrame implements 

ListSelectionListener

{

JTextField tf;JList lista;

DefaultListModel dlm;

double[] preco = {0.8, 4.0, 3.5, 5.0, 0.7};

 

public static void main(String args[]){Quitanda q = new Quitanda();q.show();q.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

Page 162: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 162/193

}Quitanda() {setLocation(300,100);setTitle("Quitanda do Prof. Wander");setSize(250,70);tf = new JTextField();tf.setEditable(false);dlm = new DefaultListModel();dlm.addElement("Banana");

dlm.addElement("Pera");dlm.addElement("Maçã");dlm.addElement("Uva");dlm.addElement("Laranja");lista = new JList(dlm);lista.addListSelectionListener(this);

JScrollPane painel = new JScrollPane(lista);getContentPane().setLayout(new GridLayout(2,1));getContentPane().add(painel);getContentPane().add(tf);

}

Os itens devem ser inseridosem um objeto da classeDefaultListModel 

 

public void valueChanged(ListSelectionEvent e){tf.setText("Fruta: " + lista.getSelectedValue() +

" - Preço: R$ " + preco[lista.getSelectedIndex()]);}

Page 163: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 163/193

}

}

O pacote javax.swing.event é necessário para a manipulação de eventosde JList. Cada vez que o usuário escolhe um item da lista é gerado um eventoa ser tratado pelo método valueChanged . É também necessário implementara interface ListSelectionListener para que as opções de JList possam ser reconhecidas à medida que o usuário seleciona um item da lista.

Os itens a serem colocados em um JList devem antes ser inseridos emobjeto DefaultListModel para depois serem associados a uma listaJList. O método addListSelectionListener deve ser invocadopara que a opção escolhida seja reconhecida no momento da ação do usuário.

O método getSelectedValue() retorna o texto do elemento selecionado nalista. O método getSelectedIndex() retorna um número inteiro corres-pondente ao índice do elemento selecionado.

 

Caixas de seleção JComboBoxAs caixas de seleção JComboBox permitem que ousuário selecione apenas um único item de sua lista

Page 164: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 164/193

usuário selecione apenas um único item de sua lista,e é uma opção ao componente gráfico JList.

import java.awt.*;

import java.awt.event.*;import javax.swing.*;

import javax.swing.event.*;public class Quitanda extends JFrame implements ItemListener

{JTextField tf;JComboBox cb;

double[] preco = {0.8, 4.0, 3.5, 5.0, 0.7};

public static void main(String args[])

{Quitanda q = new Quitanda();

q.show();q.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

 

Quitanda() {

setLocation(300,100);setTitle("Quitanda do Prof. Wander");

setSize(250,100);

Page 165: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 165/193

tf = new JTextField();tf.setEditable(false);

String frutas[] = {"Banana","Pera","Maçã","Uva","Laranja"};cb = new JComboBox(frutas);

cb.addItemListener(this);getContentPane().setLayout(new GridLayout(2,1));

getContentPane().add(cb);

getContentPane().add(tf);

} //fim do método Quitandapublic void itemStateChanged(ItemEvent e) {

tf.setText("Fruta: " + cb.getSelectedItem() +

" - Preço: R$ " + preco[cb.getSelectedIndex()]);

} //fim do método itemStateChanged}

A interface ItemListener é responsável por reconhecer eventos relacionadosao componente JComboBox.

 

Na inicialização do objeto cb, sua lista passa a conter as Strings armazenadas em um array de itens: cb = new JComboBox(frutas);

O ét d ddIt Li t i t bj t b d

Page 166: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 166/193

O método addItemListener registra o objeto cb para que as mudançasde seleção sejam reconhecidas e tratadas pelo método

itemStateChanged .

O método getSelectedItem retorna o conteúdo do texto selecionado.

O método getSelectedIndex retorna um valor inteiro contendo o índiceda opção selecionada.

 

Caixas de Opção JCheckBoxAs caixas de opção JCheckBox são objetos swing que permitem representar

Page 167: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 167/193

opções que podem ser ativadas e desativadas com um simples clique do mouse.

import java.awt.*;import java.awt.event.*;

import javax.swing.*;public class Estilo extends JFrame implements ItemListener {

JLabel jl;JCheckBox cb1,cb2; // cria dois objetos JCheckBoxstatic int negrito=0,italico=0;

public static void main(String args[]) {Estilo est = new Estilo();est.show();est.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

} //fim do método main 

Estilo(){getContentPane().setBackground(newColor(180,180,180));

Cria uma cor com osvalores RGB180, 180, 180

Page 168: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 168/193

setTitle("Estilo de letras");setSize(300,70);getContentPane().setLayout(newFlowLayout(FlowLayout.CENTER));

jl = new JLabel("Tupi ");jl.setFont(new Font("Arial",Font.PLAIN,20));jl.setForeground(Color.black);

cb1 = new JCheckBox("Negrito");cb1.setBackground(new Color(180,180,180));cb1.addItemListener(this);cb2 = new JCheckBox("Italico");cb2.setBackground(new Color(180,180,180));cb2.addItemListener(this);

getContentPane().add(jl);getContentPane().add(cb1);getContentPane().add(cb2);

}

Cria um rótulousando a fonteArial, corpo 20

 

public void itemStateChanged(ItemEvent e) {if(e.getSource()==cb1) {if(e.getStateChange()==ItemEvent.SELECTED)negrito=Font.BOLD;l

Page 169: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 169/193

elsenegrito=Font.PLAIN;

}if(e.getSource()==cb2) {if(e.getStateChange()==ItemEvent.SELECTED)italico=Font.ITALIC;

elseitalico=Font.PLAIN;

}jl.setFont(new Font("Arial",negrito+italico,20));

} //fim do método itemStateChanged}

Ao se utilizar o padrão RGB (red-green-blue) para definir uma nova cor paraum objeto swing, os valores numéricos para estas três tonalidades devem variarentre 0 e 255.

 

Para que a seleção seja reconhecida pelo método itemStateChanged , énecessário invocar o método addItemListener para cada um dos objetosJCheckBox instanciados. O método addItemListener será executadosempre que o usuário clicar em um dos botões JCheckBox

Page 170: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 170/193

sempre que o usuário clicar em um dos botões JCheckBox.

A comparação e.getStateChange()==ItemEvent.SELECTED éutilizada para verificar se o componente JCheckBox está marcado ou não.As propriedades SELECTED e DESELECTED indicam que o objeto está,respectivamente, marcado e desmarcado.

As constantes Font.PLAIN, Font.BOLD e Font.ITALIC são previamentedefinidas em Java e possuem como valor 0, 1 e 2, respectivamente e devem sertratados como int. A combinação de seus valores gera estilos diferentes deletras para a instância jl de Jlabel em jl.setFont(new Font("Arial",negrito + italico,20));. O argumento 20 significa que

a fonte será exibida com 20 pontos de altura (ponto é uma unidade de medidacomum em artes gráficas. Uma polegada possui 72 pontos).

 

Painéis e botões de rádioOs painéis JPanel são utilizados quandomais de um tipo de leiaute precisa ser

Page 171: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 171/193

mais de um tipo de leiaute precisa serinserido em uma janela. Desta forma, por

exemplo, um painel pode serFlowLayout e o outro GridLayout.

Os botões de rádio JRadioButton permitem que uma entre várias opções seja escolhida pelo usuário. Os botões de rádio devem sempre ser agrupados emum ButtonGroup para cada conjunto de botões a serem inseridos no JFrame.

import java.awt.*;

import java.awt.event.*;import javax.swing.*;

class Desconto extends JFrame implements ItemListener {

JLabel l1,l2;

float n=0,res=0;JTextField tf1,tf2;JPanel p1,p2; //cria dois painéis

JRadioButton rb1,rb2,rb3; //cria três botões de rádio

ButtonGroup rg; //cria um conjunto de botões

 

public static void main(String args[]) {JFrame d = new Desconto();d.show();d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

Page 172: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 172/193

Desconto() {setTitle("Cálculo do Desconto");

setSize(350,120);getContentPane().setLayout(newFlowLayout(FlowLayout.CENTER));

l1 = new JLabel("Digite o preço do produto");l1.setForeground(Color.red);l2 = new JLabel("Valor do desconto: ");l2.setForeground(Color.red);

tf1 = new JTextField(5); //campo de texto p/preço do produto tf2 = new JTextField(5); //campo de texto p/valor do descontotf2.setEditable(false);p1 = new JPanel();p2 = new JPanel();rb1 = new JRadioButton("10%");rb2 = new JRadioButton("20%");rb3 = new JRadioButton("30%");rg = new ButtonGroup();rg.add(rb1); //adiciona rb1 ao grupo de botões de rádiorg.add(rb2); //adiciona rb2 ao grupo de botões de rádiorg.add(rb3); //adiciona rb3 ao grupo de botões de rádio

 

rb1.addItemListener(this); //registra o evento do botão rb1rb2.addItemListener(this); //registra o evento do botão rb2rb3.addItemListener(this); //registra o evento do botão rb3p1.setLayout(new FlowLayout(FlowLayout.CENTER));p2.setLayout(new GridLayout(2,3));p1.add(l1); //adiciona o rótulo l1 ao painel p1

Page 173: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 173/193

p .add( ); //ad c o a o ótu o ao pa e pp1.add(tf1); //adiciona o campo de texto tf1 ao painel p1p2.add(rb1); //adiciona o botão de rádio rb1 ao painel p2

p2.add(rb2); //adiciona o botão de rádio rb2 ao painel p2p2.add(rb3); //adiciona o botão de rádio rb3 ao painel p2p2.add(l2); //adiciona o rótulo l2 ao painel p2p2.add(tf2); //adiciona o campo de texto tf2 ao painel p2getContentPane().add(p1); //adiciona o painel p1 ao framegetContentPane().add(p2); //adiciona o painel p2 ao frame

}public void itemStateChanged(ItemEvent e) {if (tf1.getText().length()==0) return;try {n = Float.parseFloat(tf1.getText());if (e.getSource()==rb1) res = (n * 10)/100;if (e.getSource()==rb2) res = (n * 20)/100;if (e.getSource()==rb3) res = (n * 30)/100;

}

catch(NumberFormatException erro) {tf2.setText("Erro");return; }

tf2.setText(""+res);} //fim do método itemStateChanged

}

 

O exemplo declara dois painéis JPanel  p1 e p2 que podem ser encarados damesma forma que as janelas JFrame, pois possuem as mesmas propriedades:cor de fundo, leiaute, objetos que contêm, etc. Depois de definidas aspropriedades de um painel ele é inserido em uma janela Assim uma janela

Page 174: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 174/193

propriedades de um painel, ele é inserido em uma janela. Assim, uma janelapode conter vários painéis, cada qual com a sua própria formatação e leiaute.

O painel p1 é definido como FlowLayout e contém um rótulo e um campode texto. O painel p2 é definido como GridLayout contendo 2 linhas e 3colunas e contém, além de um campo de texto e um rótulo, o agrupamento debotões de rádio.

 

Barras de rolagem JScrollBarAs barras de rolagem JScrollBar permitemvariar um valor numérico dentro de uma faixa

Page 175: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 175/193

variar um valor numérico dentro de uma faixaestabelecida por um mínimo e um máximo.

A sintaxe para criar uma barra de rolagem utilizando JScrollBar é:JScrollBar(orientação,valor inicial,intervalo do meio,valor mínimo,valor máximo)A orientação é um valor inteiro que define se a barra de rolagem é horizontal (0)

ou vertical (1). A orientação também pode ser definida pelas constantesJScrollBar.HORIZONTAL e JScrollBar.VERTICAL.

O intervalo do meio é um valor do tipo inteiro que define o incremento oudecremento do valor da barra de rolagem quando o usuário clicar nessa área.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;import java.text.DecimalFormat;

 

public class Conversao extends Jframeimplements AdjustmentListener {

JScrollBar sb1;JLabel l1,l2;

DecimalFormat df;

Page 176: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 176/193

DecimalFormat df;public static void main(String args[]) {

JFrame c = new Conversao();c.show();

c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}Conversao()

{

setSize(250,100);setTitle("Conversão de Medidas");

getContentPane().setLayout(new GridLayout(3,1));sb1 = new JScrollBar(JScrollBar.HORIZONTAL,0,5,0,105);

sb1.addAdjustmentListener(this);

l1 = new JLabel(”Centímetros",JLabel.CENTER); 

l2 = new JLabel(”Polegadas",JLabel.CENTER); getContentPane().add(sb1);

getContentPane().add(l1);

getContentPane().add(l2);}

 

public void adjustmentValueChanged(AdjustmentEvent e) {l1.setText(sb1.getValue() + " Centímetros");

DecimalFormat nf;

df = new DecimalFormat(“0.000”); d bl l b1 tV l () / 2 54

Page 177: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 177/193

double pol = sb1.getValue() / 2.54;

l2.setText(df.format(pol) +" Polegadas");

}}

A interface AdjustmentListener é utilizada para reconhecer a interação dousuário com um objeto JScrollBar.

Os argumentos JScrollBar.HORIZONTAL,0,5,0,105 definem umabarra de rolagem horizontal, com valor inicial 0, com valor de incremento edecremento para o intervalo do meio 5, com valor mínimo 0 e valor máximo 105. Na realidade, o valor máximo exibido será 100, porém este argumento devereceber o valor máximo acrescido do intervalo do meio.

O método addAdjustmentListener registra a barra de rolagem para queo evento seja gerado por ela.

 

Áreas de texto JTextAreaAs áreas de texto JTextArea já foram apresentadas anteriormente. Aqui sãovistas algumas características deste componente Swing cuja sintaxe é

Page 178: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 178/193

vistas algumas características deste componente Swing, cuja sintaxe éJTextArea(texto inicial, número de linhas iniciais,

dimensão).

texto inicial deve ser um objeto String e este argumento é opcional.

número de linhasiniciais define o nº de

linhas que a área de textoterá, sem o uso de umabarra de rolagem, que podeser definida através do com-ponente JScrollPane.

 

dimensão deve ser um valor inteiro que especifica o número de caracteres W (o caracter mais largo do alfabeto) que cabem em uma linha na área detexto. Em razão desta definição, em geral cabem bem mais caracteres do que onúmero que for introduzido como argumento.

Page 179: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 179/193

import java.awt.*;

import java.awt.event.*;import javax.swing.*;public class CopiaTexto extends JFrame implements ActionListener {

JTextArea ta1,ta2;JButton b1,b2;

public static void main(String args[]) {

JFrame cp = new CopiaTexto();cp.show();

cp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}

CopiaTexto() {

setSize(480,280);

setTitle("Copia Texto");getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));b1 = new JButton("Copia Tudo");

b1.addActionListener(this);

b2 = new JButton("Copia Seleção");

 

b2.addActionListener(this);ta1 = new JTextArea(5,40);

ta2 = new JTextArea(5,40);JScrollPane p1 = new JScrollPane(ta1);

JScrollPane p2 new JScrollPane(ta2);

Page 180: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 180/193

JScrollPane p2 = new JScrollPane(ta2);getContentPane().add(p1);

getContentPane().add(b1);getContentPane().add(b2);getContentPane().add(p2);

}public void actionPerformed(ActionEvent e) {

if (e.getSource()==b1) //copia o conteúdo de ta1 em ta2

ta2.setText(ta1.getText());if (e.getSource()==b2) //copia a seleção de ta1 em ta2

ta2.setText(ta1.getSelectedText());}

}

Os métodos getText e getSelectedText da classe JTextArea obtêm,respectivamente, o texto do componente e o texto selecionado docomponente.

 

Swing: menusO primeiro passo para se criar um menu em Java é definir uma barra de menus JMenuBar, que deverá conter o conjunto de menus que aparece na parte

Page 181: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 181/193

, q j q p psuperior da janela gráfica. Além disso, é necessário definir a barra de menus

padrão da janela, utilizando o método setJMenuBar.

Em seguida, deve-se criar os menus JMenu a serem inseridos na barra de menusatravés do método <nome da barra de menus>.add(<nome do menu>).

O passo seguinte é criar um novo item de menu JMenuItem e incluí-lo no seumenu através do método <nome do menu>.add(<nome do item>).

Barra deMenus

Menu

Itens doMenu

 

import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Menus extends JFrame implements ActionListener {JMenuBar mb;JT tFi ld tf

Page 182: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 182/193

JTextField tf;JMenu Cadastro, Relatorio;

JMenuItem Ccliente, Cfornec, Csair, Rcliente, Rfornec;public static void main(String args[]) {JFrame m = new Menus();m.show();m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}Menus() {

setTitle("Exemplo com Menus");setSize(270,130);setLocation(50,50);tf = new JTextField();mb = new JMenuBar(); //cria a barra de menusCadastro = new JMenu("Cadastro"); //cria um novo menuRelatorio = new JMenu("Relatórios"); //cria um novo menuCcliente = new JMenuItem ("Cliente"); //cria um novo itemCcliente.addActionListener(this); //registra o eventoCfornec = new JMenuItem ("Fornecedor"); //cria um novo itemCfornec.addActionListener(this); //registra o eventoCsair = new JMenuItem ("Sair do sistema"); //cria um novo itemCsair.addActionListener(this); //registra o evento

 

  Cadastro.add(Ccliente); //adiciona o item ao menuCadastro.add(Cfornec); //adiciona o item ao menuCadastro.add(Csair);Rcliente = new JMenuItem ("Relação de Clientes");Rcliente.addActionListener(this);Rfornec new JMenuItem ("Relação de Fornecedores");

Page 183: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 183/193

Rfornec = new JMenuItem ("Relação de Fornecedores");Rfornec.addActionListener(this);

Relatorio.add(Rcliente); //adiciona o item ao menuRelatorio.add(Rfornec); //adiciona o item ao menumb.add(Cadastro);  //adiciona o menu à barramb.add(Relatorio); //adiciona o menu à barrasetJMenuBar(mb);  //define a barra de menus como padrãogetContentPane().add(tf);

}

public void actionPerformed(ActionEvent e) {if (e.getSource() == Ccliente)tf.setText("Escolhido o item Cliente");

if (e.getSource() == Cfornec)tf.setText("Escolhido o item Fornecedor");

if (e.getSource() == Rcliente)tf.setText("Escolhido o item Relação de Clientes");

if (e.getSource() == Rfornec)tf.setText("Escolhido o item Relação de Fornecedores");

if (e.getSource() == Csair)System.exit(0);

}}

 

O exemplo a seguir apresenta um menucom um aspecto mais sofisticado,utilizando subitens ícones barra

Page 184: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 184/193

utilizando subitens, ícones, barradivisória e teclas de atalho para acessaros itens do menu.

import java.awt.*;import java.awt.event.*;

import javax.swing.*;public class Profissa extends JFrame implements ActionListener{JMenuBar mb;JMenu Arquivo, Save;JMenuItem Novo, Abrir, Sair, Salvar, SalvarComo, SalvarTudo;public static void main(String args[])

{ JFrame p = new Profissa();p.show();p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

 

public Profissa() {setTitle("Menu Profissional");setSize(250,150);mb = new JMenuBar(); //cria a barra de menusArquivo = new JMenu("Arquivo"); //cria um novo menuArquivo setMnemonic(KeyEvent VK A);

Page 185: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 185/193

Arquivo.setMnemonic(KeyEvent.VK_A);Arquivo.addActionListener(this);

Save = new JMenu("Save"); //cria um novo menuNovo = new JMenuItem ("Novo",new ImageIcon("icon2.gif"));Novo.addActionListener(this);Novo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK));

Novo.setMnemonic(KeyEvent.VK_N);Abrir = new JMenuItem ("Abrir",new ImageIcon("PASTA2.gif"));

Abrir.addActionListener(this);Abrir.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));

Abrir.setMnemonic(KeyEvent.VK_B);Salvar = new JMenuItem ("Salvar",new ImageIcon("disk_cat.gif"));Salvar.addActionListener(this);Salvar.setAccelerator(KeyStroke.getKeyStroke

(KeyEvent.VK_S, ActionEvent.CTRL_MASK));Salvar.setMnemonic(KeyEvent.VK_S);SalvarComo = new JMenuItem ("Salvar Como");SalvarComo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));

 

SalvarComo.addActionListener(this);SalvarComo.setMnemonic(KeyEvent.VK_C);

SalvarTudo = new JMenuItem ("Salvar Tudo");SalvarTudo.addActionListener(this);

SalvarTudo.setAccelerator(KeyStroke.getKeyStroke

Page 186: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 186/193

( y g y(KeyEvent.VK_T, ActionEvent.CTRL_MASK));

SalvarTudo.setMnemonic(KeyEvent.VK_T);Sair = new JMenuItem ("Sair",new ImageIcon("DOOR_EXI.gif"));

Sair.addActionListener(this);

Sair.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK));

Sair.setMnemonic(KeyEvent.VK_A);

Save.add(Salvar); //adiciona o item ao menuSave.add(SalvarComo); //adiciona o item ao menu

Save.add(SalvarTudo); //adiciona o item ao menuArquivo.add(Novo); //adiciona o item ao menu

Arquivo.add(Abrir); //adiciona o item ao menuArquivo.add(Save); //adiciona o item ao menu

Arquivo.addSeparator(); //adiciona uma barra divisória

Arquivo.add(Sair); //adiciona o item ao menumb.add(Arquivo); //adiciona o menu à barra

setJMenuBar(mb); //define a barra de menus como padrão}

 

public void actionPerformed(ActionEvent e) {if (e.getSource() == Novo)JOptionPane.showMessageDialog(null,"menu Novo.","Usando menus",JOptionPane.INFORMATION_MESSAGE);

if (e.getSource() == Abrir)JOptionPane showMessageDialog(null "menu Abrir "

Page 187: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 187/193

JOptionPane.showMessageDialog(null,"menu Abrir.","Usando menus",JOptionPane.INFORMATION_MESSAGE);

if (e.getSource() == Salvar)JOptionPane.showMessageDialog(null,"Sub-menu Salvar.","Usando menus",JOptionPane.INFORMATION_MESSAGE);

if (e.getSource() == SalvarComo)JOptionPane.showMessageDialog(null,"Sub-menu Salvar Como.","Usando menus",JOptionPane.INFORMATION_MESSAGE);

if (e.getSource() == SalvarTudo)

JOptionPane.showMessageDialog(null,"Sub-menu Salvar Tudo.","Usando menus",JOptionPane.INFORMATION_MESSAGE);

if (e.getSource() == Sair)System.exit(0);

}}

 Arquivo.setMnemonic(KeyEvent.VK_  A ) cria um sublinhado embaixoda letra especificada, neste caso, a letra A . Assim, os itens do menu Arquivo podem ser acessados via teclado, usando a combinação ALT + A .

 

O método setAccelerator é utilizado para criar um atalho para um item demenu. Duas constantes devem ser passadas para este método. Por exemplo, asconstantes KeyEvent.VK_  N e ActionEvent. ALT _MASK definem o atalhocomo ALT + N.

Page 188: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 188/193

O método addSeparator() cria uma barra divisória no menu.Outros objetos gráficos também podem ser inseridos em nenus, tais comobotões de rádio JRadioButton ou caixas de marcação JCheckBox. Parainseri-los em um menu, basta utilizar o método add .

 

Eventos do mouseAs classes receptoras de eventos relacionados ao uso do mouse em Java são MouseListener e MouseMotionListener.

Page 189: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 189/193

 MouseListener refere-se aos eventos gerados pelo mouse quando é clicado,

entra na área de um componente, sai da área de um componente, etc. MouseMotionListener refere-se a eventos do mouse gerados pela sua

movimentação sobre um componente.

Os métodos para registrar os objetos usados em uma aplicação swing, no que

se refere ao uso dos eventos do mouse são addMouseListener() eaddMouseMotionListener().

Ao ser gerado um evento do mouse, é necessário declarar os respectivos métodospara tratamento do evento. Os métodos a serem declarados para um evento dotipo MouseEvent gerado pela classe MouseListener são mousePressed , mouseClicked , mouseEntered , mouseExited e mouseReleased .

Observe que é obrigatório declarar todos estes métodos, mesmo que apenas umvenha a ser realmente utilizado.

 

Existem ainda métodos que permitem verificar as características do evento domouse. Por exemplo, é possível detectar se foi dado um clique ou um duploclique no mouse. Veja alguns métodos associados aos eventos do mouse:

int getClickCout() retorna o número de vezes que o mouse foi clicado;

Page 190: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 190/193

int getClickCout()  – retorna o número de vezes que o mouse foi clicado;

int getX()  – retorna a posição X do ponteiro do mouse sobre o componenteswing;

int getY()  – retorna a posição Y do ponteiro do mouse;

 boolean isAltDown()  –  retorna true se a tecla ALT foi pressionada em

conjunto com o mouse; boolean isControlDown()  – retorna true se a tecla CRTL foi pressiona-

da em conjunto com o mouse;

 boolean isShiftDown()  – retorna true se a tecla SHIFT foi pressionada

em conjunto com o mouse;O exemplo seguinte, EventoMouse, ilustra uma aplicação básica de tratamentode eventos do mouse.

 

import java.awt.*;import java.awt.event.*;

import javax.swing.*;

public class EventoMouse extends JFrame implements MouseListener {

Container C1;

JButton B1;

Page 191: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 191/193

;

JTextField T1;

public static void main(String args[]) {JFrame Janela = new EventoMouse();

Janela.show();

Janela.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public EventoMouse() {

setTitle("Trata evento do mouse");

setSize(250,100);C1 = getContentPane();

C1.setLayout(new FlowLayout());

B1 = new JButton("Galor forte e vingador");

B1.addMouseListener(this);

T1 = new JTextField(20);

C1.add(B1);

C1.add(T1);}

public void mousePressed(MouseEvent e) {

T1.setText("O botão do mouse foi pressionado");

}

 

public void mouseClicked(MouseEvent e) {T1.setText("O botão do mouse foi solto");

}

public void mouseReleased(MouseEvent e) {

T1.setText("O ponteiro do mouse foi arrastado");

}

Page 192: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 192/193

public void mouseEntered(MouseEvent e) {

T1.setBackground(Color.black);T1.setForeground(Color.white);

T1.setText("O ponteiro do mouse entrou na área");

}

public void mouseExited(MouseEvent e) {

T1.setBackground(Color.gray);

T1.setForeground(Color.black);

T1.setText("O ponteiro do mouse saiu da área");}

}

A figura ao lado ilustra uma saídapara a aplicação EventoMouse.

Como já foi dito, é necessário declarar todos os métodos para tratamento deeventos do mouse, mesmo que apenas um venha a ser efetivamente usado.

 

Classes adaptadorasAlgumas das interfaces ouvintes de eventos de Java, a exemplo de MouseListener, exigem do usuário a implementação de vários métodos, o

é d já l

Page 193: Java Original

5/15/2018 Java Original - slidepdf.com

http://slidepdf.com/reader/full/java-original 193/193

que nem sempre é desejável.

Para solucionar este inconveniente, os pacotes java.awt.event e java.swing.event fornecem classes adaptadoras de ouvintes de eventos. Umaclasse adaptadora implementa uma interface e fornece uma implementação-padrão, com o corpo do método vazio, para cada um dos métodos.

Por exemplo, a classe adaptadora MouseAdapter implementa a interface MouseListener e a classe adaptadora MouseMotionAdapter implementaa interface MouseMotionListener.