instruções de controle

45
© Prof. Cícero Quarto – [email protected] Capítulo 4 Instruções de Controle: Parte I PROGRAMAÇÃO ORIENTADA A OBJETOS

Upload: cicero-quarto

Post on 04-Jul-2015

43 views

Category:

Education


6 download

DESCRIPTION

Instruções e controle em Java

TRANSCRIPT

Page 1: Instruções de controle

© Prof. Cícero Quarto – [email protected]

Capítulo 4Instruções

de Controle: Parte I

PROGRAMAÇÃO ORIENTADA A OBJETOS

Page 2: Instruções de controle

© Prof. Cícero Quarto – [email protected]

2

2

Objetivos

• Utilizar técnicas básicas de solução de problemas;

• Desenvolver algoritmos por meio do processo de refinamento;

• Utilizar instruções de seleção if e if ... else;

• Utilizar a instrução while;

• Utilizar repetição controlada por contador e por sentinela;

• Utilizar operadores compostos de atribuição, incremento e decremento;

• A portabilidade dos tipos de dados primitivos

Page 3: Instruções de controle

© Prof. Cícero Quarto – [email protected]

3

Introdução

� Antes de escrever um programa (algoritmo)

para resolver um problema:� Devemos ter um entendimento

completo do problema;� Devemos ter uma abordagem

cuidadosamente planejada para resolvê-lo;� Entender os tipos de blocos de

construção e Deve-se empregar técnicas de construção do programa comprovadas.� Os conceitos apresentados neste capítulo são cruciais na construção de classes e manipulação de objetos.

� Neste capítulo, são introduzidas as instruções if, if ... else e while do Java, três dos blocos de construção que permitem especificar a lógica requerida para que os métodos realizem suas tarefas;� Serão descritos os operadores de incremento e decremento do Java.

Page 4: Instruções de controle

© Prof. Cícero Quarto – [email protected]

4

4

Algoritmos

- Qualquer problema de computação pode ser resolvido executando uma série de ações em uma ordem específica. Um procedimento para resolver um problema em termos de:

� das ações (instruções) a executar e� da ordem em que essas ações executam

chama-se algoritmo.

Especificar a ordem das ações a serem

executadas

Instruções de controle

Page 5: Instruções de controle

© Prof. Cícero Quarto – [email protected]

5

Pseudocódigo

� Pseudocódigo é uma linguagem informal que ajuda a desenvolver algoritmos sem a preocupação com os estritos detalhes da sintaxe da linguagem Java.

PseudocódigoCONVERTIDO

(escrito, desenvolvido)

Partes estruturadas de programas Java

Não leva em consideração detalhes da sintaxe da linguagem. É entendido e amigável ao usuário.

Estritamente um algoritmo na linguagem padrão a ser executado em um computador. Compilado em linguagem de máquina.

Page 6: Instruções de controle

© Prof. Cícero Quarto – [email protected]

6

Estruturas de controle

� Normalmente, instruções em um programa são executadas uma após a outra na ordem em que são escritas;� Esse processo é chamado execução sequencial;� Várias instruções Java permitem que você especifique que a próxima instrução a executar não é necessariamente a próxima na sequência. Isso é chamado de transferência de controle;� O trabalho de Bohm e Jacopini demonstrou que todos os programas poderiam ser escritos em termos de somente três estruturas de controle – a estrutura de sequência, a estrutura de seleção e a estrutura de repetição

Page 7: Instruções de controle

© Prof. Cícero Quarto – [email protected]

7

Estrutura de sequência em Java

� A estrutura de sequência está incorporada ao Java. A não ser que seja instruído de outra forma, o computador executa as instruções Java uma depois da outra na ordem em que elas são escritas;� O diagrama de atividades na Figura 1 ilustra uma estrutura de sequência típica em que dois cálculos são realizados na ordem;

adiciona grade a total

adiciona 1 a counter

Instrução Java correspondente:total = total + grade;

Instrução Java correspondente:counter = counter + 1;

Figura 1: Diagrama de atividades da estrutura de sequência.

Page 8: Instruções de controle

© Prof. Cícero Quarto – [email protected]

8

Diagrama de atividades UML

adiciona grade a total

adiciona 1 a counter

Instrução Java correspondente:total = total + grade;

Instrução Java correspondente:counter = counter + 1;

� Um diagrama de atividades UML modela o fluxo de trabalho (também chamado

atividade) de uma parte de um sistema de software;� Esses fluxos de trabalho podem incluir uma parte de um algoritmo, como a estrutura de sequência na Figura 1;� Os diagramas de atividade são compostos de símbolos, como símbolos de estado de ação (retângulos com os lados esquerdo e direito substituídos por arcos curvados para fora), losangos e pequenos círculos. Esses símbolos são conectados por setas de transição, que representam o fluxo da atividade – isto é, a ordem em que as ações devem ocorrer.

Figura 1: Diagrama de atividades da estrutura de sequência.

Page 9: Instruções de controle

© Prof. Cícero Quarto – [email protected]

9

Instrução de seleção em Java

� O Java contém três tipos de instruções de seleção:

Instruções de seleção em Java

if if ... else switch

INSTRUÇÃO DE SELEÇÃO ÚNICA (porque seleciona ou ignora uma única ação

(ou um único grupo de ações)

INSTRUÇÃO DE SELEÇÃO DUPLA ( porque seleciona

entre duas ações diferentes (ou grupo de ações)

INSTRUÇÃO DE SELEÇÃO MÚLTIPLA

(porque seleciona entre muitas ações (ou grupo

de ações)

Page 10: Instruções de controle

© Prof. Cícero Quarto – [email protected]

10

10

Instrução de repetição em Java

� O Java fornece três instruções de repetição (também chamadas instruções de loop);

� Permitem que programas executem instruções repetidamente contanto que uma condição (chamada condição de continuação do loop) permaneça verdadeira. A Tabela 1 resume as três instruções de repetição do Java.

INSTRUÇÃO DESCRIÇÃO

while Realizam a ação (ou grupo de ações) no seu corpo zero ou mais vezes – se a condição de continuação do loop for inicialmente for falsa, a ação (ou grupo de ações) não será executada.

for

do ... while Realiza a ação (ou grupo de ações) no seu corpo uma ou mais vezes

Tabela 1: Instruções de repetição em Java

Page 11: Instruções de controle

© Prof. Cícero Quarto – [email protected]

1

11

A instrução de seleção única if

� Os programas utilizam instruções de seleção para escolher cursos alternativos de ações;� Por exemplo, suponha que a nota de aprovação de um exame seja 60. A instrução em pseudocódigo (ver Figura 2):

� Determina se a condição “nota do aluno é maior que ou igual a 60” é

verdadeira. Nesse caso “Aprovado” é impresso, e a próxima instrução de pseudocódigo é “realizada”;� Se a condição for falsa, a instrução imprima é ignorada e a próxima instrução de pseudocódigo na sequência é realizada.

Figura 2: Instrução em pseudocódigo (arquivo do autor).

Page 12: Instruções de controle

© Prof. Cícero Quarto – [email protected]

12

A instrução de seleção única if ...

� A instrução de pseudocódigo if precedente pode ser escrita em Java, conforme ilustra a Figura 3:

Figura 3: Instrução em Java (arquivo do autor).

� A Figura 4 ilustra a instrução de seleção única if. Essa figura contém o

símbolo mais importante em um diagrama de atividade – o losango, ou símbolo de decisão, que indica que uma decisão deve ser tomada;

imprime “Aprovado”

[grade >= 60]

[grade < 60]

Figura 4: Diagrama de atividades UML de uma Instrução de seleção única if em Java.

Page 13: Instruções de controle

© Prof. Cícero Quarto – [email protected]

3

13

A instrução de seleção única if ...

� A instrução de pseudocódigo if precedente pode ser escrita em Java, conforme ilustra a Figura 3:

Figura 3: Instrução em Java (arquivo do autor).

� A Figura 4 ilustra a instrução de seleção única if. Essa figura

contém o símbolo mais importante em um diagrama de atividade – o losango, ou símbolo de decisão, que indica que uma decisão deve ser tomada;

imprime “Aprovado”

[grade >= 60]

[grade < 60]

Figura 4: Diagrama de atividades UML de uma Instrução de seleção única if em Java.

Page 14: Instruções de controle

© Prof. Cícero Quarto – [email protected]

4

14

A instrução de seleção dupla if ... else

� A instrução if de seleção única realiza uma ação indicada somente quando a condição é true; caso contrário, a ação é pulada;� A instrução de seleção dupla if ... else permite especificar uma ação a realizar quando a condição é verdadeira e uma ação diferente quando a ação é falsa. Por exemplo, este pseudocódigo:Se a nota do aluno for maior que ou igual a 60Imprima “Aprovado”Caso contrário (Else)Imprima “Reprovado”

Veja no slide a seguir a instrução if … else equivalente em Java é:

Page 15: Instruções de controle

© Prof. Cícero Quarto – [email protected]

15

5

A instrução de seleção dupla if ... else em Java

If ( studentGrade >= 60 )System.out.println( “Passed”);

elseSystem.out.println( “Failed” );

Boa prática de programação!Recue as duas instruções do corpo de uma instrução if … else

Page 16: Instruções de controle

© Prof. Cícero Quarto – [email protected]

16

Diagrama de atividades UML da instrução de seleção dupla if … else

A Figura 5 ilustra o fluxo de controle na instrução if … else. Mais uma vez, os símbolos no diagrama de atividades UML (além do estado inicial, setas de transição e estado final) representam os estados e decisões da ação.

imprime“Reprovado”

imprime“Aprovado”

[grade < 60] [grade >= 60]

Figura 5: Diagrama de atividades da UML de instrução de seleção dupla if … else (Deitel,

Page 17: Instruções de controle

© Prof. Cícero Quarto – [email protected]

17

Operador condicional (?:)

• O Java fornece o operador condicional (?:) que pode ser utilizado no lugar de uma instrução if … else.

� É o único operador ternário do

Java (operador que recebe três operandos);� Juntos, os operandos e o símbolo ?:

formam uma expressão condicional;- o primeiro operando (à esquerda do ?)

é uma expressão boolean (isto é, uma condição que é avaliada como um valor boolean – true ou false);

- o segundo operando (entre o ? e :) é o valor da expressão condicional se a expressão boolean for true e o terceiro operando (à direita do :) é o valor da expressão condicional se a expressão boolean for avaliada como false. Veja um exemplo no slide seguinte:

Page 18: Instruções de controle

© Prof. Cícero Quarto – [email protected]

18

Operador condicional (?:)

System.out.println( studentGrade >= 60 ? “Passed” : “Failed”);

Considerações:(i) Imprime o valor do argumento da expressão condicional de println;(ii) A expressão condicional nessa instrução é avaliada para a string “Passed” se a expressão boolean studentGrade >= 60 for verdadeira e para a string “Failed” se a expressão booleanfor falsa;(iii) Essa instrução realiza essencialmente a mesma função da instrução if … eles;(iv) A precedência do operador condicional é baixa, então a expressão condicional inteira normalmente é colocada entre parênteses.

Page 19: Instruções de controle

© Prof. Cícero Quarto – [email protected]

19

Instruções if … else aninhadas

• Um programa pode testar múltiplos casos colocando instruções if … else dentro de outras instruções if … else para criar instruções if … else aninhadas;

• Por exemplo, o pseudocódigo a seguir representa uma if… else aninhada que imprime A para notas de exame maiores que ou igual a 90, B para notas de 80 a 89, C para notas de 70 a 79, D para notas de 60 a 69 e F para todas as outras notas:

Se a nota do aluno for maior que ou igual a 90Imprima “A”

Caso contrárioSe a nota do aluno for maior que ou igual a 80Imprima “B”

Caso contrárioSe a nota do aluno for maior que ou igual a 70Imprima “C”

Caso contrárioSe a nota do aluno for maior que ou igual a 60Imprima “D”

Caso contrárioImprima “F”

Page 20: Instruções de controle

© Prof. Cícero Quarto – [email protected]

20

Instruções if … else aninhadas

• O mesmo pseudocódigo, mostrado no slide anterior, pode ser reescrito é mostrado abaixo:if( studentGrade >= 90 )

System.out.println( “A”);elseif( studentGrade >= 80 )

System.out.println( “B”);elseif( studentGrade >= 70 )

System.out.println( “C”);elseif( studentGrade >= 80 )System.out.println( “D”);elseSystem.out.println( “F”);

if( studentGrade >= 90 )System.out.println( “A”);

else if( studentGrade >= 80 )System.out.println( “B”);

else if( studentGrade >= 70 )System.out.println( “C”);

else if( studentGrade >= 60 )System.out.println( “D”);

elseSystem.out.println( “F”);

Observação:Ambas as formas A e B são idênestão corretas.

A

B

Page 21: Instruções de controle

© Prof. Cícero Quarto – [email protected]

21

O problema do else oscilante

• O compilador Java sempre associa um else à instrução ifimediatamente anterior, a menos que instruído de outro modo pela colocação de chaves ({e});• Esse comportamento pode levar àquilo que é chamado do problema do else oscilante. Por exemplo:

if( x > 5 )if( y > 5 )

System.out.println( “x and y are > 5” );else

System.out.println( “x is <= 5” );

Obs.: Se a condição da instrução if externa for falsa, o if … else interno é pulado e nada é exibido. Para forçar a instrução if … else aninhada para executar como foi originalmente concebida, devemos escrevê-la como no slide a seguir:

Page 22: Instruções de controle

© Prof. Cícero Quarto – [email protected]

22

O problema do else oscilante

if( x > 5 ){

if( y > 5)System.out.println( “x and y are > 5” );

}else

System.out.println( “x is <= 5” );

Consideração:As chaves indicam que a segunda instrução if está no corpo da primeira e que a instrução else está associada com a primeira instrução if.

Page 23: Instruções de controle

© Prof. Cícero Quarto – [email protected]

23

Blocos

◈ A instrução if normalmente espera somente uma instrução no seu corpo;◈Para incluir várias instruções no corpo de uma if (ou no corpo de

um else de uma instrução if … eles), inclua as instruções dentro de chaves ({ e });◈As instruções contidas em um par de chaves formam um bloco;

◈Um bloco pode ser colocado em qualquer lugar em um programa

em que uma única instrução pode ser colocada;◈O exemplo a seguir inclui um bloco na parte else de uma

instrução if … else:

Page 24: Instruções de controle

© Prof. Cícero Quarto – [email protected]

24

Blocos – exemplo

if( grade >= 60 )System.out.println( “Passed” );

else{

System.out.println( “Failed” );System.out.println( “You must take this course again.” );

}

Page 25: Instruções de controle

© Prof. Cícero Quarto – [email protected]

25

A instrução de repetição while

♦ Uma instrução de repetição (ou um loop) permite especificar que um programa deve repetir uma ação enquanto alguma condição permanece verdadeira;♦ Como exemplo da instrução de repetição while do Java, considere um segmento de programa projetado para encontrar a primeira potência de 3 maior que 100;♦ Suponha que a int product tenha sido inicializada como 3;♦ Quando a instrução while seguinte terminar a execução, product conterá o resultado:

while( product <= 100 )product = 3 * product;

♦ Quando a instrução while for falsa, a execução de programa continua com a próxima instrução depois da instrução while.

Page 26: Instruções de controle

© Prof. Cícero Quarto – [email protected]

26

Diagrama de atividades UML da instrução de repetição while

• O diagrama de atividades UML na Figura 6 ilustra o fluxo de controle na instrução while;• Esse diagrama também introduz o símbolo de agregação(representado por um losango);

Figura 6: Diagrama de atividades da UML da instrução de repetição while(Deitel, p. 89, 8a. Edição) - Java

triplica o valorde product

Instrução Java correspondenteproduct = 3 * product;

merge

decision

[product <= 100]

[product > 100]

Page 27: Instruções de controle

© Prof. Cícero Quarto – [email protected]

27

Implementando a repetição controlada por contador na classe GradeBook

♦ A classe GradeBook (Figura 4.6) contém um construtor (linhas 19-21) que atribui um valor à variável de instância courseName da classe (declarada na linha 16);♦ As linhas 24-26, 29-31 e 34-38 declaram métodos setCourseName, getCourseName e displayMessage, respectivamente;♦ As linhas 41-69 declaram o método determineClassAverage, que implementa o algoritmo de média da classe.

Page 28: Instruções de controle

© Prof. Cícero Quarto – [email protected]

28

Operadores de atribuição composta

♦ Os operadores de atribuição composta abreviam expressões de atribuição. Instruções como:

variável = variável operador expressão;onde operador é um dos operadores binários +, -, *, / ou % (ou outros que discutiremos mais adiante), pode ser escrita na forma:

variável operador= expressão;Por exemplo, você pode abreviar a instrução:

c = c + 3;com o operador de atribuição composta de adição, +=, como:

c += 3;

♦ A Tabela no slide a seguir mostra os operadores aritméticos de atribuição composta, expressões de exemplo que utilizam os operadores e explicações do que os operadores fazem.

Page 29: Instruções de controle

© Prof. Cícero Quarto – [email protected]

29

Operadores aritméticos de atribuição composta

Operador de atribuição

Expressão de atribuição

Explicação Atribuições

Suponha: int c = 3, d = 5, e = 4, f = 6, g = 12

+= c += 7 c = c + 7 10 a c

-= d -= 4 d = d - 4 1 a d

*= e *= 5 e = e * 5 20 a e

/= f /= 3 f = f / 3 2 a f

%= g %= 9 g = g % 9 3 a g

Tabela 2 | Operadores aritméticos de atribuição composta (Java - Como Programar, Deitel, 8o ed., p. 102, 2010).

Page 30: Instruções de controle

© Prof. Cícero Quarto – [email protected]

30

Operadores de incremento e decremento

▪ O Java fornece dois operadores unários para adicionar 1 a ou para subtrair 1 do valor de uma variável numérica. Esses são o operador de incremento unário, ++, e o operador de decremento

unário, --, que são resumidos na Tabela abaixo.

Operador Nome do operador

Expressão de exemplo

Explicação

++ pré-incremento ++a Incrementa a por 1, então utiliza o novo valor de a na expressão em

que a reside.

++ pós-incremento a++ Utiliza o valor atual de a na expressão em que a reside, então

incrementa a por 1.

-- pré-decremento --b Decrementa b por 1, então utiliza o novo valor de b na expressão em

que b reside.

-- pós-decremento b-- Utiliza o valor atual de b na expressão em que b reside, então

decrementa b por 1.

Page 31: Instruções de controle

© Prof. Cícero Quarto – [email protected]

31

Classe Increment que demonstra as funcionabilidades dos operadores de pré-

incremento e pós-incremento

1 // Figura 4.15: Increment.java2 // operadores de pré-incremento e pós-incremento34 public class Increment {5 public static void main( String[] args ) {6 int c;7 // demonstra o operador de pós-incremento8 c = 5; // atribui 5 à variável c9 System.out.println( c ); // imprime 510 System.out.println( c++ ); // imprime 5 e pós-incrementa11 System.out.println( c ); // imprime 61213 System.out.println(); // pula uma linha1415 // demonstra o operador de pré-incremento16 c = 5; // atribui 5 à variável c17 System.out.println( c ); // imprime 518 System.out.println( ++c ); // pré-incrementa e imprime 619 System.out.println( c ); // imprime 62021 } // fim de main22 } // fim da classe Increment

Saída do aplicativo

Page 32: Instruções de controle

© Prof. Cícero Quarto – [email protected]

32

Tipos primitivos

▪A tabela no Apêndice D (Java como programar, ed. 8. p. 1070) lista os oito tipos primitivos em Java.▪ Como ocorre com suas linguagens predecessoras, C e C++, o Java requer que todas as variáveis tenham um tipo. Por essa razão, o Java é referido como uma linguagem fortemente tipada.

• Cada tipo do Apêndice D é listado com seu tamanho em bits (há oito bits em um byte) e seu intervalo de valores;

• As variáveis de instância dos char, byte, short, int, long, float e double recebem o valor 0 por padrão;

• Atribui-se às variáveis de instância do tipo boolean o valor false por padrão;

• As variáveis de instância de tipo por referência são inicializadas por padrão para o valor null.

Page 33: Instruções de controle

© Prof. Cícero Quarto – [email protected]

33

APÊNDICE D – Tipos primitivos

Tipo Tamanho em bits

Valores

boolean true ou false

char 16 '\u0000' a '\uFFFF' (0 a 65535)

byte 8 -128 a +127 (-27 a 27 -1)

short 16 -32.768 a +32.767 (-215 a 215 -1)

int 32 -2.147.483.648 a +2.147.483.647 (-231 a 231 -1)

long 64 -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 (-263 a 263 -1)

float 32 Intervalo negativo:-3,4028234663852886E+38 a -1,40129846432481707e-45

Intervalo positivo:1,40129846432481707e-45 a3,4028234663852886E+38

double 64 Intervalo negativo:-1,7976931348623157E+308 a -4,94065645841246544e-324

Intervalo positivo:4,94065645841246544e-324 a 1,7976931348623157E+308

Figura D.1 | Tipos primitivos do Java (Adaptação do Deitel, p. 1070)

Page 34: Instruções de controle

© Prof. Cícero Quarto – [email protected]

34

(Opcional) Estudo de caso de GUI e imagens gráficas: criando desenhos simples

▪ Um recurso atraente do Java é o suporte a gráficos, que permite a programadores aprimorar aplicativos visualmente;▪ Esta seção introduz uma das capacidades gráficas do Java –desenhar linhas;▪ Esta seção também aborda os princípios básicos da criação de uma janela para exibir um desenho na tela do computador.

Page 35: Instruções de controle

© Prof. Cícero Quarto – [email protected]

35

Sistema de coordenadas do Java

▪ Para desenhar em Java, você deve primeiro entender o sistema de coordenadas do Java (Figura 7), um esquema para identificar pontos na tela;

eixo x

eixo y

(0, 0)+x

+y(x, y)

Considerações:

♦ Por padrão, o canto superior esquerdo de um componente GUI tem as coordenadas (0, 0);

♦ Um par de coordenadas é composto de uma coordenada x (a coordenada horizontal) e uma coordenada y (a coordenada vertical);♦ As coordenadas indicam onde elementos gráficos devem ser exibidos em uma tela;♦ Unidades coordenadas são medidas em pixels. (O termo pixel significa “picture element” [elemento de imagem]

Page 36: Instruções de controle

© Prof. Cícero Quarto – [email protected]

36

Sistema de coordenadas do Java

▪ Para desenhar em Java, você deve primeiro entender o sistema de coordenadas do Java (Figura 7), um esquema para identificar pontos na tela;

eixo x

eixo y

(0, 0)+x

+y(x, y)

Considerações:

♦ Por padrão, o canto superior esquerdo de um componente GUI tem as coordenadas (0, 0);

♦ Um par de coordenadas é composto de uma coordenada x (a coordenada horizontal) e uma coordenada y (a coordenada vertical);♦ As coordenadas indicam onde elementos gráficos devem ser exibidos em uma tela;♦ Unidades coordenadas são medidas em pixels. (O termo pixel significa “picture element” [elemento de imagem]

Page 37: Instruções de controle

© Prof. Cícero Quarto – [email protected]

37

Primeiro aplicativo de desenho

▪ Nosso primeiro aplicativo de desenho simplesmente desenha duas linhas;▪A classe DrawPanel (Figura 4.18) realiza o desenho real, enquanto a classe DrawPanelTest (Figura 4.19) cria uma janela para exibir o desenho;▪ Na classe DrawPanel, as instruções import nas linhas 12-13 permitem utilizar a classe Graphics (do pacote java.awt), que fornece vários métodos para desenhar texto e formas na tela, e a classe JPanel (do pacote javax.swing), que fornece uma área em que podemos desenhar.

Page 38: Instruções de controle

© Prof. Cícero Quarto – [email protected]

38

Figura 4.18: DrawPanel

Comentando a classe DrawPanel

♦ A linha 15 utiliza a palavra-chave extends para indicar que a classe DrawPanel é um tipo aprimorado de JPanel;♦ A palavra-chave extends representa o relacionamento conhecido como herança, no qual nossa nova classe DrawPanel inicia com os membros existentes (dados e métodos) a partir da classe JPanel;♦ A classe a partir da qual DrawPanel herda, JPanel, aparece à direita da palavra-chave extends;♦ Nessa relação de herança, JPanel é chamado de superclasse e DrawPanel é chamado de subclasse;♦ Isso resulta em uma classe DrawPanel com os atributos (dados) e comportamentos (métodos) da classe JPanel, bem como os novos recursos que estamos adicionando à nossa declaração da classe DrawPanel –especificamente, a capacidade de desenhar duas linhas ao longo das diagonais do painel;♦ A herança é explicada detalhadamente no Capítulo 9. Por enquanto, você deve simular nossa classe DrawPanel criando os seus próprios programas gráficos.

Figura 4.18 | Utilizando drawLine para conectar os cantos de um painel

Page 39: Instruções de controle

© Prof. Cícero Quarto – [email protected]

39

Método paintComponent

▪ Todo JPanel, incluindo nosso DrawPanel, contém um método paintComponent (linhas 18-30), que o sistema chama automaticamente sempre que precisa exibir o JPanel;▪ O método paintComponent deve ser declarado conforme mostrado na linha 17 – caso contrário, o sistema não o chamará;▪ Esse método é chamado quando um JPanel é exibido na tela pela primeira vez, quando é ocultado e então exibido por uma janela na tela e quando a janela em que aparece é redimensionada;▪ O método paintComponent requer um argumento, um objeto de Graphics, que é oferecido pelo sistema quando ele chama paintComponent.

A primeira instrução em cada método paintComponent que você cria sempre deve ser:

Page 40: Instruções de controle

© Prof. Cícero Quarto – [email protected]

40

Método paintComponent – cont...

A primeira instrução em cada método paintComponent que você cria sempre deve ser;

super.paintComponent( g );▪ que assegura que o painel seja exibido

corretamente antes de começarmos a desenhá-lo;▪ em seguida, as linhas 21-22 chamam os métodos

que a classe DrawPanel herda de JPanel. Como DrawPanel estende JPanel, DrawPanel pode utilizar alguns métodos public de JPanel;

▪ os métodos getWidth e getHeight retornam a largura e a altura de JPanel, respectivamente;

▪ as linhas 21-22 armazenam esses valores nas variáveis locais width e height;

▪ por fim, as linhas 25-28 utilizam a variável g de Graphics para chamar o método drawLine a fim de desenhar as duas linhas.

Page 41: Instruções de controle

© Prof. Cícero Quarto – [email protected]

41

Método paintComponent – cont...Método paintComponent – cont...

▪ o método drawLine desenha uma linha entre dois pontos representados pelos seus quatro argumentos. Os dois primeiros argumentos são as coordenadas x e y para uma extremidade, e os dois últimos argumentos são as coordenadas para a outra extremidade;▪ se você redimensionar a janela, as linhas serão dimensionadas de maneira correspondente, uma vez que os argumentos estão baseados na largura e altura do painel;▪ Redimensionar a janela nesse aplicativo resulta em uma chamada de sistema a paintComponent para redesenhar o conteúdo de DrawPanel.

Page 42: Instruções de controle

© Prof. Cícero Quarto – [email protected]

42

Classe DrawPanelTest

▪ Para exibir a DrawPanel na tela, você deve colocá-la em uma janela. Você cria uma janela com um objeto da classe Jframe;▪ Em DrawPanelTest.java (Figura 4.19), a linha 12 importa a classe JFrame a partir do pacote javax.swing;

♦ Α linha 17 em main cria um objeto DrawPanel, que contém nosso desenho, e a linha 20 cria um novo JFrame que pode armazenar e exibir o nosso painel;♦ A linha 23 chama o método JFramesetDefaultCloseOperation com o argumento Jframe.EXIT_ON_CLOSE para indicar que o aplicativo deve terminar quando o usuário fecha a janela;♦ A linha 25 usa o método add da classe JFrame para anexar o DrawPanela JFrame;

Page 43: Instruções de controle

© Prof. Cícero Quarto – [email protected]

43

Classe DrawPanelTest

♦ A linha 26 configura o tamanho da Jframe. O método setSize recebe dois parâmetros que representam a largura e a altura do Jframe, respectivamente;♦ Por fim, a linha 27 exibe Jframechamando seu método setVisible com o argumento true. Quando a Jframe é exibida, o método paintComponent de DrawPanel (linhas 7-30 da Figura 4.18) é implicitamente chamado e as duas linhas são desenhadas (veja as saídas de exemplo na Figura 4.19). Tente redimensionar a janela para ver que as linhas sempre são desenhadas com base na largura e na altura atual da janela.

Page 44: Instruções de controle

© Prof. Cícero Quarto – [email protected]

44

Saída do aplicativo DrawPanelTest

Figura 4.19': Saída do aplicativo DrawPanelTest

Page 45: Instruções de controle

© Prof. Cícero Quarto – [email protected]

45

Exercícios do Estudo de caso de GUI e imagens gráficas

Resolver os exercícios 4.1 (a e b) e 4.2 (a e b), página 107 do livro Java – como programar, 8o edição. Autor: Deitel