Java Apostila

download Java Apostila

of 42

Transcript of Java Apostila

  • 5/23/2018 Java Apostila

    1/42

    Apostila de JAVA

  • 5/23/2018 Java Apostila

    2/42

    Apostila de Java Grupo PET - Informtica

    Sumrio1. Introduo ______________________________________________ 031.1. O que JAVA? __________________________________________ 031.2. O que uma Applet ______________________________________ 031.3. O que uma Aplicao ____________________________________ 031.4. O que o Appletviewer ___________________________________ 031.5. O que Applet no WWW __________________________________ 031.6. Criando uma Aplicao ____________________________________ 041.7. Criando uma Applet ______________________________________ 042. O Bsico ________________________________________________ 062.1 Variveis e tipos de dados __________________________________ 062.2. Comentrios ____________________________________________ 062.3. Caracteres Especiais ______________________________________ 072.4. Expresses e Operadores __________________________________ 072.5. Comparaes ___________________________________________ 083. Arrays, Loops e Condicionais _________________________________ 103.1. Arrays _________________________________________________ 103.2. Condicionais ____________________________________________ 113.3. Operador Condicional _____________________________________ 123.4. Switch _________________________________________________ 123.5. Loop For ______________________________________________ 133.6. Loop While _____________________________________________ 133.7. Loop Do _______________________________________________ 134. Criando Classes e Aplicaes em Java ___________________________ 144.1. Definindo Classes ________________________________________ 144.2. Definindo Variveis de Instncia _____________________________ 144.3. Constantes _____________________________________________ 144.4. Variveis de Classe _______________________________________ 144.5. Definio de Mtodos _____________________________________ 154.6. A palavra chave this ______________________________________ 154.7. Passando argumentos para Mtodos __________________________ 165. Mais sobre Mtodos ________________________________________ 175.1. Polimorfismo ou Sobrecarga ________________________________ 175.2. Mtodos Construtores _____________________________________ 195.3. Mtodos Destrutores _____________________________________ 216. Window Toolkit ___________________________________________ 226.1. Eventos ________________________________________________ 226.2. Componentes AWT ______________________________________ 266.3. Grficos _______________________________________________ 337. Threads _________________________________________________ 367.1. O que so threads? _______________________________________ 367.2. Os estados de uma thread __________________________________ 377.3. Threads em Applets ______________________________________ 387.4. Herdando de Thread x Implementando Runnable ________________ 398. Procure Saber Mais Sobre ___________________________________ 41Referncias Bibliogrficas _____________________________________ 42

  • 5/23/2018 Java Apostila

    3/42

    Apostila Java Informtica

    Page 3 of 42Printed by [email protected]

    3

    1. INTRODUO

    1.1. O que JAVA?Java uma linguagem de programao orientada a objetos desenvolvida pela Sun

    Microsystems. Modelada depois de C++, a linguagem Java foi projetada para ser pequena,simples e portvel a todas as plataformas e sistemas operacionais, tanto o cdigo fonte como osbinrios. Esta portabilidade obtida pelo fato da linguagem ser interpretada, ou seja, ocompilador gera um cdigo independente de mquina chamado byte-code. No momento daexecuo este byte-code interpretado por uma mquina virtual instalado na mquina. Para portar

    Java para uma arquitetura hadware/s especfica, basta instalar a mquina virtual (interpretador).Alm de ser integrada Internet, Java tambm uma excelente linguagem para desenvolvimentode aplicaes em geral. D suporte ao desenvolvimento de software em larga escala.

    1.2. O que uma APPLET?

    Applet um programa especial escrito em Java adaptado para instalao e execuodentro de pginas HTML. Estas pginas podem ento ser visualizadas num browser.

    1.3. O que uma APLICAO?Aplicao um programa mais geral escrito na linguagem Java. No requer um browser

    para sua execuo. De fato, Java pode ser usada para criar todo tipo de aplicaes queusualmente voc implementa com outras linguagens mais convencionais.

    1.4. O que o APPLETVIEWER?Quem criou o Java espera que todos os browsersalgum dia suportem as applets, o que no

    acontece ainda. Para facilitar o desenvolvimento de aplicaes, foi criado o Appletviewer que

    mostra apenas a rea onde executada applet. Depois de testar bem seu cdigo com oAppletviewer, voc deve ento test-lo com alguns browsersque suportem Java para ver o efeitofinal.

    1.5. O que APPLET no WWWAs applets so disparadas quando se carrega uma pgina HTML. A seguir h um exemplo

    de cdigo HTML que dispara uma applet.

    Java

  • 5/23/2018 Java Apostila

    4/42

    Apostila Java Informtica

    Page 4 of 42Printed by [email protected]

    4

    1.6. Criando uma APLICAOPara comear, criaremos uma simples aplicao em Java: a clssica Hello World!, o

    exemplo que todos os livros de linguagens usam.

    1.6.1. O cdigo fonteComo todas as linguagens de programao, o cdigo fonte ser criado em um editor de

    texto ASCII puro. No Unix alguns exemplos so emacs, pico, vi e outros. No Windows, notepadou dosedit tambm servem.

    A seguir, o cdigo da aplicao Hello World! (arquivo: HelloWorld.java):

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

    System.out.println(Hello World!);}

    }

    1.6.2. Compilando a aplicao

    Para compilar a aplicao, basta digitar o comando:javac HelloWorld.java

    Este comando vai gerar o arquivo HelloWorld.class, que o byte-codeda aplicao. Paraexecutar o byte-codebasta digitar o comando:

    java HelloWorld

    1.7. Criando uma APPLETCriar uma applet diferente de criar uma simples aplicao porque uma applet

    executada e visualizada dentro de uma pgina HTML. Como exemplo, novamente serimplementada a clssica Hello World!.

    1.7.1. O cdigo fonte

    A seguir, o cdigo da aplicao Hello World! (arquivo: HelloWorldApplet.java):import java.awt.Graphics;

    public class HelloWorldApplet extends java.applet.Applet {public void paint (Graphics g) {

    g.drawString (Hello World!,5,25);}

    }

  • 5/23/2018 Java Apostila

    5/42

    Apostila Java Informtica

    Page 5 of 42Printed by [email protected]

    1.7.2. Compilando a applet

    Para compilar a applet, basta digitar o comando:javac HelloWorldApplet.java

    Este comando vai gerar o arquivo HelloWorldApplet.class, que o byte-code da applet.

    Para executar o byte-code necessrio haver uma pgina HTML, a qual tem o cdigo a seguir(arquivo: exemplo1.html):

    Java Hello World

    1.7.3. Visualizao

    A pgina com cdigo descrito anteriormente pode ser visualizada atravs de um browserque suporte java ou do appletviewer utilizando-se do comando a seguir:

    appletviewer exemplo1.html

  • 5/23/2018 Java Apostila

    6/42

    Apostila Java Informtica

    Page 6 of 42Printed by [email protected]

    6

    2. O BSICO

    2.1. Variveis e tipos de dadosVariveis so alocaes de memria nas quais podemos guardar dados. Elas tm um

    nome, tipo e valor. Toda vez que necessite usar de uma varivel voc precisa declar-la e s entopoder atribuir valores a mesma.

    2.1.1. Declarando variveis

    As declaraes de variveis consistem de um tipo e um nome de varivel: como segue oexemplo:

    int idade;String nome;boolean existe;Os nomes de variveis podem comear com uma letra, um sublinhado ( _ ), ou um cifro

    ($). Elas no podem comear com um nmero. Depois do primeiro caracter pode-se colocarqualquer letra ou nmero.

    2.1.2. Tipos de variveis

    Toda varivel deve possuir um tipo. Os tipos que uma varivel pode assumir uma das trscoisas a seguir:

    Uma das oito primitivas bsicas de tipos de dadosO nome de uma classe ou interfaceUm Array

    Veremos mais sobre o uso de arrays e classes mais a frente.Os oito tipos de dados bsicos so: inteiros, nmeros de ponto-flutuante, caracteres e booleanos

    (verdadeiro ou falso).Tipos Inteiros:

    Tipo Tamanho Alcancebyte 8 bits -128 at 127short 16 bits -32.768 at 32.767int 32 bits -2.147.483.648 at 2.147.483.647long 64 bits -9223372036854775808 at 9223372036854775807Existem dois tipos de nmeros de ponto-flutuante: float ( 32 bits, preciso simples) e

    double (64 bits, preciso dupla).

    2.1.3. Atribuies a variveis

    Aps declarada uma varivel a atribuio feita simplesmente usando o operador =:idade = 18;existe = true;

    2.2. ComentriosJava possui trs tipos de comentrio, o /* e */ como no C e C++. Tudo que estiver entre

    os dois delimitadores so ignorados:/* Este comentrio ficar visvel somente no cdigo o compilador ignorar completamente este trecho entre osdelimitadores*/

    Duas barras (//) tambm podem ser usadas para se comentar uma linha:int idade; // este comando declara a varivel idade

  • 5/23/2018 Java Apostila

    7/42

    Apostila Java Informtica

    Page 7 of 42Printed by [email protected]

    7

    E finalmente os comentrios podem comear tambm com /** e terminar com */. Estecomentrio especial e usado pelo javadoc e para gerar uma documentao API do cdigo.Para aprender mais sobre ojavadoc acesse a home page (http://www.javasoft.com).

    2.3. Caracteres especiaisCaracter Significado

    \n Nova Linha\t Tab\b Backspace\r Retorno do Carro\f Formfeed (avana pgina na impressora)\\ Barra invertida\ Apstrofe\ Aspas

    \ddd Octal

    \xdd Hexadecimal

    2.4. Expresses e operadores

    2.4.1. Operadores Aritmticos

    Operador Significado Exemplo+ soma 3 + 4- subtrao 5 - 7* multiplicao 5 * 5/ diviso 14 / 7% mdulo 20 % 7

    Exemplo Aritmtico:class ArithmeticTest {public static void main ( Strings args[] ) {

    short x = 6;int y = 4;float a = 12.5f;float b = 7f;

    System.out.println ( x + x + , y + y ); System.out.println ( x + y = + (x + y) );

    System.out.println ( x - y = + (x - y) );System.out.println ( x /y = + (x / y) );System.out.println ( x % y = + ( x % y ) );

    System.out.println ( a + a + , b + b ); System.out.println ( a / b = + ( a / b ) );

    }}

  • 5/23/2018 Java Apostila

    8/42

    Apostila Java Informtica

    Page 8 of 42Printed by [email protected]

    8

    A sada do programa acima :

    x 6, y 4x + y = 10x - y = 2x / y = 1x % y = 2a 12.5, b 7a / b = 1.78571

    2.4.2. Mais sobre atribuies

    Variveis podem atribuidas em forma de expresses como:int x, y, z;x = y = z = 0;

    No exemplo as trs variveis recebem o valor 0;Operadores de Atribuio:

    Expresso Significadox += y x = x + yx -= y x = x - yx *= y x = x * yx /= y x = x / y

    2.4.3. Incrementos e decrementos

    Como no C e no C++ o Java tambm possui incrementadores e decrementadores :y = x++;y = --x;

    As duas expresses do resultados diferentes, pois existe uma diferena entre prefixo e

    sufixo. Quando se usa os operadores ( x++ ou x-- ), y recebe o valor de x antes de x serincrementado, e usando o prefixo ( ++x ou x ) acontece o contrario, y recebe o valorincrementado de x.

    2.5. ComparaesJava possui vrias expresses para testar igualdade e magnitude. Todas as expresses

    retornam um valor booleano (true ou false).

    2.5.1. Operadores de comparao

    Operador Significado Exemplo

    == Igual x == 3!= Diferente ( No igual) x != 3< Menor que x < 3> Maior que x > 3

    = 3

  • 5/23/2018 Java Apostila

    9/42

    Apostila Java Informtica

    Page 9 of 42Printed by [email protected]

    9

    2.5.2. Operadores lgicos

    Operador Significado&& Operao lgica E (AND)|| Operao lgica OU (OR)

    ! Negao lgica& Comparao bit-a-bit E (AND)| Comparao bit-a-bit OU (OR)^ Comparao bit-a-bit OU-Exclusivo (XOR)

    > Deslocamento a direita

    >>> Deslocamento a direita com preenchimento de zeros- Complemento bit-a-bit

    x > y )

    x >>>= y Atribuio com deslocamento a direita e com preenchimento de

    zeros ( x = x >>> y )x &= y atribuio AND ( x = x & y )x |= y atribuio OR ( x = x | y )x ^= y atribuio XOR ( x = x ^ y )

  • 5/23/2018 Java Apostila

    10/42

    Apostila Java Informtica

    Page 10 of 42Printed by [email protected]

    10

    3. ARRAYS, LOOPS E CONDICIONAIS

    3.1. ArraysArrays em Java so diferentes do que em outras linguagens. Arrays em Java so objetos

    que podem ser passados e acoplados a outros objetos.Arrays podem conter qualquer tipo de elemento valorado(tipos primitivos ou objetos),

    mas voc no pode armazenar diferente tipos em um simples array.Ou seja, voc pode ter um array de inteiros, ou um array de strings, ou um array de array, mas

    voc no pode ter um array que contenha ambos os objetos strings e inteiros.A restrio acima descrita significa que os arrays implementados em Java so genricos

    homogneos, ou seja, um nico array pode armazenar qualquer tipo de objeto com a restrioque todos sejam do mesma classe.

    3.1.1. Declarando um Array:

    String difficult[];Point hits[];int temp[];

    Outra alternativa de declarao:

    String[] difficult;Point[] hits;int[] temp;

    3.1.2. Criando Objetos Arrays:

    Um dos caminhos usar o operador new para criar uma nova instncia de um array, porexemplo:

    int[] temps = new int[99];

    Quando voce cria um objeto array usando o operador new, todos os ndices soinicializados para voc ( 0 para arrays numricos, falso para boolean, \0 para caracteres, e NULLpara objetos). Voc tambm pode criar e inicializar um array ao mesmo tempo.

    String[] chiles = { jalapeno, anaheim, serrano , jumbou, thai};

    Cada um dos elementos internos deve ser do mesmo tipo e deve ser tambm do mesmotipo que a varivel que armazena o array. O exemplo acima cria um array de Strings chamadochiles que contm 5 elementos.

    3.1.3. Acessando os Elementos do Array

    Uma vez que voc tm um array com valores iniciais, voc pode testar e mudar os valoresem cada ndice de cada array.

    Os arrays em Java sempre iniciam-se na posio 0 como no C++. Por exemplo:String[] arr= new String[10];arr[10]=out;

  • 5/23/2018 Java Apostila

    11/42

    Apostila Java Informtica

    Page 11 of 42Printed by [email protected]

    11

    Isto provoca um erro de compilao pois o ndice 10 no existe, pois isto est fora dasbordas do array.

    arr[9] = inside;

    Esta operao de atribuio vlida e insere na posio 9 do array, a string inside.

    3.1.4. Arrays Multidimensionais

    Java no suporta arrays multidimensionais. No entanto, voc pode declarar e criar umarray de arrays e acess-los como voc faria no estilo-C.

    int coords[][]= new int[12][12];coords[0][0] = 1;coords[0][1] = 2;

    3.2. CondicionaisO condicional contm a palavra chave if, seguido por um teste booleano. Um opcional else

    como palavra chave pode ser executado na caso do teste ser falso, Exemplo:

    if ( x < y)System.out.println( x e menor do que y);

    elseSystem.out.println( y e maior);

    Nota tcnica: A diferena entre o if em Java e C ou C++ que o teste deve retornar umvalor booleano(true ou false).

    3.2.1. Bloco

    Um bloco definido por ({}) e contm um grupo de outros blocos. Quando um novobloco criado um novo escopo local aberto e permite a definio de variveis locais. As

    variveis definidas dentro de um bloco s podem ser vistas internamente a este, e so terminadasou extintas no final da execuo deste(}).

  • 5/23/2018 Java Apostila

    12/42

    Apostila Java Informtica

    Page 12 of 42Printed by [email protected]

    12

    void testblock(){int x = 10, w=1;

    if (x> w){ // inicio do bloco

    int y=50;

    System.out.println(dentro do bloco);System.out.println(x: + x);System.out.println(y: + y);

    } // final do bloco

    System.out.println(w: + w);System.out.println(y: + y); // erro varivel no conhecida

    }

    3.3. O operador CondicionalUma alternativa para o uso do if e else um operador ternrio condicional.Este operador

    ternrio (?: ) , chamado assim porque tem trs termos como parmetro.Exemplo:

    test ? trueresult : falseresultint menor = x < y ? x : y ; // A varivel menor recebe o valor do menor entre x e y.

    3.4. O switchUm comum mecanismo para substituio de ifs que pode ser usado para um grupo de

    testes e aes junto a um simples agrupamento, chama-se switch.switch (teste){

    case valorum;

    resultum;break;

    case valordois;resultdois;

    break;

    case valortres:resulttres;

    break;

    default: defaultresult;}

    O valor comparado com cada um dos casos relacionados. Se a combinao no forencontrada, o bloco default executado. O default opcional, ento caso este no estejaassociado ao comando, o bloco do swicth sem executar nada.

  • 5/23/2018 Java Apostila

    13/42

    Apostila Java Informtica

    Page 13 of 42Printed by [email protected]

    13

    3.5. Looping ForO loop em Java tem esta sintaxe:

    for(inicializao; teste; incremento) {

    bloco de comandos;}

    Voc tambm pode incluir um comando simples, sendo assim no h necessidade dautilizao de chaves. Exemplo:

    String strArray[] = new String[10];for ( i=0; i< strArray.length; i++)

    strArray[i]=;

    Inicializa um array de10 elementos com ;

    3.6. LoopWhileO while usado para repetir um comando, ou um conjunto de comando enquanto a

    condio verdadeira.

    While (condio){bloco de comandos;

    }

    A condio uma expresso booleana. Exemplo:

    int count=0;while( count < array1.length && array1[count]!=0){

    array2[count]=(float) array1[count++];}

    3.7. Loop DoA principal diferena entre o while e o do que o teste condicional no caso do while feita

    antes de se executar o cdigo interno ao loop. Desta forma, o que pode acontecer no while que o loop pode no ser executado se a condio for false. J no loop do o corpo do loop

    executado pelo menos uma vez, pois o teste de permanncia executado no fim do loop.

    do{bodyOfLoop;

    } while(condition);

  • 5/23/2018 Java Apostila

    14/42

    Apostila Java Informtica

    Page 14 of 42Printed by [email protected]

    14

    4. Criando Classes e Aplicaes em Java

    4.1. Definindo ClassesPara definir uma classe use a palavra chave classe o nome da classe. Exemplo:

    class Minhaclasse{...}

    Se esta classe uma subclasse de outra classe, use extends para indicar a superclasse.Exemplo:

    class Minhaclasse extends SuperClasse{...

    }

    4.2. Definindo Variveis de InstnciaAs variveis de instncia, aparentemente, so declaradas e definidas quase exatamente da

    mesma forma que as variveis locais, a principal diferena que a alocao delas na definioda classe. Exemplo:

    class Bike extends Veculo {String tipo;int correia;

    int pedal;}

    4.3. ConstantesPara declarar uma constante, use a palavra chave final antes da declarao da varivel e

    inclua um valor inicial para esta varivel. Exemplo:

    final float pi=4.141592;final boolean debug=false;final int maxsize = 40000;

    4.4. Variveis de ClasseAs variveis de classe so boas para a comunicao entre os diferentes objetos da mesma

    classe, ou para manter travamento de estados globais sobre um conjunto de objetos. Exemplo:

    static int soma;static final int maxObjects= 10;

    4.5. Definio de MtodosA definio dos mtodos tm quatro partes bsicas:

    O nome do mtodo;

  • 5/23/2018 Java Apostila

    15/42

    Apostila Java Informtica

    Page 15 of 42Printed by [email protected]

    15

    O tipo objeto ou tipo primitivo de retorno;Uma lista de parmetros;O corpo do mtodo;

    A definio bsica de um mtodo tem esta aparncia:

    tipoderetorno nomedometodo(tipo1 arg1, tipo2 arg2, ...){....

    }

    Exemplo:

    int[] makeRange(int lower, int upper) { ... }

    A RangeClass classe:

    class RangeClass{int[] makeRange(int lower, int upper){

    int arr[] = new int[ (upper - lower) + 1];

    for (int i=0; i

  • 5/23/2018 Java Apostila

    16/42

    Apostila Java Informtica

    Page 16 of 42Printed by [email protected]

    16

    this.idade = idade;}

    public void imprimeDados () {System.out.print ( Nome: + this.nome + Idade: + this.idade);

    }

    }

    4.7.Passando argumentos para Mtodosclass PassByReference{

    int onetoZero(int arg[]){int count=0;

    for(int i=0; i< arg.length; i++){if(arg[i]==1){

    count++;arg[i]=0;

    }}return count;}

    }

    public static void main (String arg[])int arr[]= { 1,3,4,5,1,1,7};PassByReference test = new PassByReference();int numOnes;

    System.out.print(Values of the array: [);for( int i=0; i < arr.length; i++){

    System.out.print(arr[i] + );}System.out.println(]);

    numOnes= test.onetoZero(arr);System.out.println(Number of Ones = + numOnes);System.out.print(New values of the array: [ );for( int i=0; i < arr.length; i++){

    System.out.print(arr[i] + );}System.out.println(]);

    }

    As sadas deste programa:Values of the array: [ 1 3 4 5 1 1 7 ]Number of Ones = 3New values of the Array: [ 0 3 4 5 0 0 7]

  • 5/23/2018 Java Apostila

    17/42

    Apostila Java Informtica

    Page 17 of 42Printed by [email protected]

    17

    5. MAIS SOBRE MTODOS

    5.1. Polimorfismo ou SobrecargaOs mtodos em Java podem ser sobrecarregados, ou seja, podem-se criar mtodos com o

    mesmo nome, mas com diferentes assinaturas (parmetros) e diferentes definies. Quando sechama um mtodo em um objeto, o Java casa o nome do mtodo, o nmero de argumentos e otipo dos argumentos e escolhe qual a definio do mtodo a executar.Para criar um mtodo sobrecarregado, necessrio criar diferentes definies de mtodos na suaclasse, todos com o mesmo nome, mas com diferentes parmetros (nmero de argumentos outipos).

    No exemplo a seguir veremos a definio da classe Retangulo, a qual define um retnguloplano. A classe Retangulo tm quatro variveis para instanciar, as quais definem o canto superioresquerdo e o canto inferior direito do retngulo: x1, y1, x2 e y2.

    class Retangulo {int x1 = 0;int y1 = 0;int x2 = 0;int y2 = 0;

    }

    Quando uma nova instncia da classe Retangulo for criada, todos as suas variveis soinicializadas com 0. Definindo um mtodo construaRetang (): este mtodo recebe quatro inteirose faz um resize doretngulo de acordo com as novas coordenadas e retorna o objeto retnguloresultante ( note que os argumentos possuem o mesmo nome das variveis instanciveis, portantodeve-se usar o this para referenci-las ):

    Retangulo construaRetang ( int x1, int y1, int x2, int y2 ) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;return this;

    }

    Querendo-se definir as dimenses do retngulo de outra forma, por exemplo pode-seusar o objeto Point ao invs de coordenadas individuais. Faremos a sobrecarga do mtodoconstruaRetang (), passando agora como parmetro dois objetos Point:

    Retangulo construaRetang (Point superiorEsquerdo, Point inferiorDireito) {x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = inferiorDireito.x;y2 = inferiorDireito.y;return this;

    }

    Porm querendo-se definir um retngulo usando somente o canto superior esquerdo euma largura e altura do retngulo pode-se ainda definir mais um mtodo construaRetang ():

  • 5/23/2018 Java Apostila

    18/42

    Apostila Java Informtica

    Page 18 of 42Printed by [email protected]

    18

    Retangulo construaRetang (Point superiorEsquerdo, int largura, int altura) {x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = (x1 + largura);y2 = (y1 + altura);return this;

    }

    Para finalizar o exemplo mostra-se a seguir um mtodo para imprimir as coordenadas doretngulo e um main para fazer o teste:

    import java.awt.Point;

    class Retangulo {int x1 = 0;int y1 = 0;int x2 = 0;int y2 = 0;

    Retangulo construaRetang ( int x1, int y1, int x2, int y2 ) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;return this;

    }

    Retangulo construaRetang (Point superiorEsquerdo, Point inferiorDireito) {x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = inferiorDireito.x;

    y2 = inferiorDireito.y;return this;}

    Retangulo construaRetang (Point superiorEsquerdo, int largura, int altura) {x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = (x1 + largura);y2 = (y1 + altura);return this;

    }

    void imprimaRetangulo () {System.out.print ( Retngulo: < + x1 + , + y1 );System.out.println ( , + x2 + , + y2 + >);

    }

    public static void main ( String args[] ) {Retangulo retang = new Retangulo();

    System.out.println ( Chamando construaRetang com coordenadas 25, 25, 50, 50 : );retang.construaRetang ( 25, 25, 50, 50 );retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);

    System.out.println ( Chamando construaRetang com os pontos (10, 10) , (20, 20) : ); retang.construaRetang ( new Point (10,10) , new Point (20, 20) );retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);

  • 5/23/2018 Java Apostila

    19/42

    Apostila Java Informtica

    Page 19 of 42Printed by [email protected]

    19

    System.out.println ( Chamando construaRetang com os pontos (10, 10) , largura (50) e altura (50) : ); retang.construaRetang ( new Point (10,10) , 50, 50);retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);

    }}

    5.2. Mtodos ConstrutoresUm mtodo construtor um tipo especial de mtodo que determina como um objeto

    inicializado quando ele criado.Diferente dos mtodos normais um mtodo construtor no pode ser chamado

    diretamente; ao invs disto os mtodos construtores so chamados automaticamente pelo Java.No momento em que o objeto instanciado, ou seja quando se usa new o Java faz trs coisas:

    Aloca memria para o objetoInicializa as variveis daquela instncia do objetoChama o mtodo construtor da classe

    5.2.1. Construtores Bsicos

    Os construtores parecem muito com os mtodos normais, com duas diferenas bsicas:Construtores sempre tm o mesmo nome da classeConstrutores no podem ter tipo de retorno

    Exemplo:

    class Pessoa {String nome;int idade;

    Pessoa (String n, int i) {nome = n;idade = i;

    }

    void printPessoa () {System.out.print (Oi meu nome : + nome);System.out.println (. Eu tenho : +idade+ anos);

    }

    public static void main ( String args[] ) {

    Pessoa p;p = new Pessoa ( Maria, 20 );

    p.printPessoa();}

    }

    5.2.2. Polimorfismo de Construtores

    Igual aos mtodos normais os construtores tambm podem ter nmeros variveis de tipose parmetros. Por exemplo os mtodos construaRetang () definidos na classe Retangulo seriamexcelentes construtores para a mesma classe, pois eles esto justamente instanciando as variveis.Segue o exemplo abaixo com as devidas alteraes :

  • 5/23/2018 Java Apostila

    20/42

    Apostila Java Informtica

    Page 20 of 42Printed by [email protected]

    20

    import java.awt.Point;class Retangulo {

    int x1 = 0;int y1 = 0;int x2 = 0;int y2 = 0;

    Retangulo ( int x1, int y1, int x2, int y2 ) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;

    }Retangulo (Point superiorEsquerdo, Point inferiorDireito) {

    x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = inferiorDireito.x;y2 = inferiorDireito.y;

    }

    Retangulo (Point superiorEsquerdo, int largura, int altura) {x1 = superiorEsquerdo.x;y1 = superiorEsquerdo.y;x2 = (x1 + largura);y2 = (y1 + altura);

    }

    void imprimaRetangulo () {System.out.print ( Retngulo: < + x1 + , + y1 );System.out.println ( , + x2 + , + y2 + >);

    }

    public static void main ( String args[] ) {

    Retangulo retang;System.out.println ( Retangulo com coordenadas 25, 25, 50, 50 : ); retang = new Retangulo (25, 25, 50, 50 );retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);

    System.out.println ( Retangulo com os pontos (10, 10) , (20, 20) : );retang = new Retangulo ( new Point (10,10) , new Point (20, 20) );retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);System.out.println ( Retangulo com os pontos (10, 10), largura (50) e altura (50) : );retang = new Retangulo ( new Point (10,10) , 50, 50);retang.imprimaRetangulo ();System.out.println ( --------------------------------------------);

    }}

  • 5/23/2018 Java Apostila

    21/42

    Apostila Java Informtica

    Page 21 of 42Printed by [email protected]

    21

    5.3. Mtodos DestrutoresOs mtodos destrutores so chamados logo antes do coletor de lixo passar e sua

    memria se liberada. O mtodos destrutor chamado de finalize() a classe Object define ummtodo destrutor padro, que no faz nada. Para criar um mtodo destrutor para suas prprias

    classes basta sobrepor o mtodo finalize () com o seguinte cabealho:

    protected void finalize () {...

    }

    Dentro do mtodo finalize voc pode colocar tudo que voc precisa fazer para a limpezado seu objeto.

  • 5/23/2018 Java Apostila

    22/42

    Apostila Java Informtica

    Page 22 of 42Printed by [email protected]

    22

    6. WINDOW TOOLKITAs ferramentas de controle de janelas do java tambm conhecidas por AWT (Abstract

    Window Toolkit) so uns dos pontos fortes do java. Estas ferramentas fornecem toda afuncionalidade que se podia esperar de um sistema moderno de janelas. O AWT contem os maisusados componentes das interfaces grficas atuais portanto habilita a aplicao a ser executada emsistemas grficos completamente diferentes.

    Neste capitulo apresentaremos os seguintes componentes: Buttom, Canvas, Checkbox,Container, Label, List, Scrollbar e TextComponent. Mas para um bom entendimento destescomponentes necessrio primeiro ter uma base sobre manuseio de eventos.

    6.1. EventosUm evento uma comunicao do mundo externo para o programa que alguma coisa

    aconteceu. Podemos citar como exemplos o clique ou ainda o movimento do mouse. Uma das

    mais importantes coisas a se entender sobre o AWT como feito o manuseio/tratamentodestes eventos. Sem eventos sua aplicao no poderia responder as aes do usurio.

    Exemplo 1:import java.awt.*;import java.applet.Applet;

    public class ex5_1 extends Applet {Button boto;

    public void init() {boto = new Button("Clique Aqui!");add(boto);

    }

    public boolean action (Event evt, Object algum) {if (evt.target == boto) {

    boto.setLabel("OK!!");return true;

    }else

    return false;}

    }

    Quando um componente que tem a ele uma ao associada manipulado pelo usurio, omtodo action() daquele componente chamado. Neste caso nos estamos usando um boto aoinvs de usar uma subclasse de nossa autoria. O tratador de eventos tenta tratar o evento dentroda classe boto, mas como ele no acha o tratador que iria manusear o evento ele passa o eventopara cima para o container que contem o componente e assim por diante at que algum trate oevento.

    Vamos dar uma olhada de perto no mtodo action():public boolean action(Event evt, Object algum) {

    Todos tratadores de eventos tem uma forma similar a esta. Eles aceitam um parmetro dotipo Event que prove informao detalhada sobre o evento. Segundo eles retornam um valorBoolean indicando True se o evento foi tratado, ou False caso contrario.

    if (evt.target == boto) {Aqui o alvo do evento e checado para se saber se ou no o boto. Porque evt.target eboto so ambos objetos, nos podemos checar se ambos so o mesmo objeto.

  • 5/23/2018 Java Apostila

    23/42

    Apostila Java Informtica

    Page 23 of 42Printed by [email protected]

    23

    boto.setLabel("OK!!");

    J que o boto foi pressionado vamos mudar o seu titulo.

    return true;}

    elsereturn false;

    Finalmente, se o evento foi tratado retornado true, caso contrrio retornado false.

    6.1.1. Tratamento de Eventos em Detalhe

    Em quase todos os casos podemos usar os mtodos tratadores de eventos que sofornecidos na linguagem Java. Estes esto na tabela abaixo. Mas lembre-se que tudo relativo aocomponente. Por exemplo, o mtodo mouseMove() de um componente chamado quando omouse movido dentro daquele componente.

    Eventos do Java

    TIPO MTODOAo tomada action(Event evt, Object algum)Boto do mouse pressionado mouseDown(Event evt, int x, int y)Boto do mouse liberado mouseUp(Event evt, int x, int y)Movimento do mouse mouseMove(Event evt, int x, int y)

    Arrasto do mouse mouseDrag(Event evt, int x, int y)Mouse entra em componente mouseEnter(Event evt, int x, int y)Mouse sai de componente mouseExit(Event evt, int x, int y)

    Tecla pressionada keyDown(Event evt, int key)Tecla liberada keyUp(Event evt, int key)

    Quando voc deve usar outros mtodos em detrimento do action()? A resposta quandovoc quer trocar o comportamento do componente, action() no suficiente. Ele apenas reportaeventos que so essenciais para o componente como um clique do mouse num boto.

    Vamos adicionar ao programa exemplo anterior algumas mudanas de comportamento:

    Exemplo 2:import java.awt.*;import java.applet.Applet;

    public class ex5_2 extends Applet {Button boto;

    public void init() {boto = new Button("Clique Aqui !!");add(boto);

    }

    public boolean mouseEnter(Event evt, int x, int y) {boto.setLabel("Va Embora !!");return true;

    }

    public boolean mouseExit(Event evt, int x, int y) {boto.setLabel("Fique Longe !!");return true;

    }public boolean action (Event evt, Object algum) {

    if (evt.target == boto) {

  • 5/23/2018 Java Apostila

    24/42

    Apostila Java Informtica

    Page 24 of 42Printed by [email protected]

    24

    boto.setLabel("OK");return true;

    }else

    return false;}

    }Agora por aonde que o usurio mova o mouse na applet, o mesmo instigado a no

    clicar no boto. Antes, o boto era usado de uma maneira completamente normal, agora nosmudamos seu comportamento/funcionalidade.

    6.1.2. handleEvent() ou action()

    Geralmente, uma combinao do mtodo action() com outros pr-construidos tratadoresde eventos trabalharo bem. Para aquelas vezes que voc necessita tomar um controle completohandleEvent() usado.

    O mtodo handleEvent() tem vantagens e desvantagens. No lado positivo, voc quem

    tem o completo controle. E no lado negativo, voc quem tem o completo controle. Istosignifica que voc deve ter muito cuidado quando esta montando um handleEvent() ou suaaplicao pode comear ficar confusa e cheia debugs muito rapidamente. Exemplo 3:

    :public boolean mouseEnter (Event evt, int x, int y) {

    setText("Sai fora!!");}

    public boolean handleEvent (Event evt) {if (evt.id == KEY_PRESS) {

    setText("Pressionado");return true;

    }else

    return false;}

    :

    Eventos do AWTTIPO MTODOAo tomada ACTION_EVENTBoto do mouse pressionado MOUSE_DOWN

    Arrasto do mouse MOUSE_DRAGMouse entra em componente MOUSE_ENTERMouse sai de componente MOUSE_EXITBoto do mouse liberado MOUSE_UPMovimento do mouse MOUSE_MOVED

    Tecla pressionada KEY_PRESSTecla liberada KEY_RELEASE

    6.1.3. Criando Eventos

    Ocasionalmente o programa tem que criar seus prprios eventos. Pode at parecerestranho, mas as vezes o programa fica muito mais simples.

    Um simples evento pode ser criado assim:Event evt = new Event(obj_alvo, id, arg);

  • 5/23/2018 Java Apostila

    25/42

    Apostila Java Informtica

    Page 25 of 42Printed by [email protected]

    25

    Aonde obj_alvo o objeto para o qual o evento deve ser mandado, id um inteiro querepresenta o tipo do evento (pode-se usar as constantes acima) e arg um argumento para serincludo no evento se ha alguma informao extra que voc gostaria que o tratador de eventosrecebesse. Normalmente a definio de um evento feita como o exemplo abaixo:

    Exemplo 4:::public boolean keyDown(Event evt, int key) {

    if (key == 49) {deliverEvent(new Event(oneKey, Event.MOUSE_DOWN, null));return true;

    }...

    }::

    6.1.4. Foco

    Quando um usurio clica em um componente da interface, este item fica "selecionado".Quando um text field selecionado, o usurio pode digitar no campo de texto.

    Quando um componente recebe o foco, o mtodo getFocus() do componente chamado:public boolean getFocus(Event evt, Object what) {

    ...}

    Quando um componente perde o foco, o mtodo lostFocus() do componente chamado:public boolean lostFocus(Event evt, Object what) {

    ...}

    comum em um programa a necessidade de manter o foco em determinadocomponente. Por exemplo se um text field para mostrar dados e no para receber dados, vocprovavelmente no quer que o text field esteja apto a receber o foco. Para este caso existe omtodo requestFocus():public void requestFocus() {

    ...}

    Isto pode ser colocado em um componente que contem o text field para que estecomponente fique com o foco.

  • 5/23/2018 Java Apostila

    26/42

    Apostila Java Informtica

    Page 26 of 42Printed by [email protected]

    26

    6.2. Componentes AWTAntes de comearmos bom sabermos que:

    1. Todos os componentes tem uma posio e tamanho2. Todos os componentes tem uma cor e uma cor de fundo3. Componentes podem ser habilitados ou desabilitados4. Existe uma interface standard para os componentes tratarem eventos

    Componentes AWT podem ser divididos em trs partes:Componentes da Interface

    Componentes da Interface abrangem todos os widgets e controles associados a umainterface grfica. Exemplos destes componentes so: buttons, text labels, scrollbars,pick list e campos text-entry.

    ContainersContainers abrangem reas nas quais os componentes da interface podem ser postos.Isto habilita os componentes a serem agrupados e formarem um objeto mais coeso efcil de ser manipulado. Um Panel um exemplo deste tipo de componente.

    WindowsWindows so um tipo muito especial da classe Component. Todos os outroscomponentes so adicionados dentro de uma window. Normalmente quando seprograma applets, windows no so usadas.

    6.2.1. Componentes da Interface

    BUTTONBoto. Pode ser customizado para ter um texto ou ainda ser branco.

    Construtores:

    Button() cria um boto sem labelButton(String etiq) Cria um Button com label igual ao contedo de etiqMtodos especficos:

    String getLabel() retorna o label(etiqueta) do botovoid setLabel(String etiq) ajusta label do boto para o contedo de etiq

    Ao:Cria um evento quando pressionado.

    Exemplo:Button boto = new Button("OK");

    CANVAS

    Canvas um componente completamente genrico. Ele existe como fundao para outrassubclasses. Este componente no muito til para usurios iniciantes ou intermedirios, mas extremamente til para criar seus prprios componentes.Construtores:

    Canvas() cria um canvasMtodos especficos:

    void paint(Graphics g) desenha um canvas com a cor de fundo defaultAo:

    nenhuma por defaultExemplo:

    Canvas x = new Canvas();

    CHECKBOX

  • 5/23/2018 Java Apostila

    27/42

    Apostila Java Informtica

    Page 27 of 42Printed by [email protected]

    27

    Checkbox uma caixa pequena com um label ao lado. O usurio pode clicar on ou off.Isto til quando voc tem uma variedade de atributos que podem ser ligados ou no. Alemdisto, mais de uma checkbox podem ser agrupadas com um CheckboxGroup para possibilitarque apenas um dos itens seja selecionado ao mesmo tempo.Construtores:

    Checkbox() cria uma checkbox branca com opo falseCheckbox(String lbl) cria uma checkbox com label lbl com opo falseCheckbox(String lbl, CheckboxGroup group, boolean state) cria uma checkbox com a opo

    lbl em true contida no grupo CheckGroup.Mtodos especficos:

    String getLabel() retorna o label da checkboxString setLabel(String lbl) ajusta o label da checkbox para lblboolean getState() retorna o estado da checkbox

    void setState(boolean est) ajusta o estado da checkbox para estCheckboxGroup getCheckboxGroup() retorna o grupo que a checkbox pertence

    void setCheckboxGroup(CheckboxGroup g) ajusta nova CheckboxGroup(grupo) quepertence a checkbox

    Ao:Cria um evento quando o estado muda

    Exemplo:Checkbox aBox = new Checkbox("SHOW");

    LABELUm label simplesmente um texto que pode ser colocado em um componente.

    Construtores:

    Label() cria um label vazioLabel(String lbl, int alin) cria um label com o texto contido em lbl e com o alinhamento

    especificado em alin, podendo ser:Label.LEFT alinhamento a esquerdaLabel.CENTER centraliza textoLabel.RIGHT alinhamento a direita

    Mtodos especficos:

    int getAlignment() retorna o alinhamento do labelvoid setAlignment(int alinha) ajusta o alinhamento do label para alinha.String getText() retorna o texto do label

    void setText(String lbl) ajusta o texto do label para lblAo:Nenhuma, por default

    Exemplo:Label aLabel = new Label("Hello!");

  • 5/23/2018 Java Apostila

    28/42

    Apostila Java Informtica

    Page 28 of 42Printed by [email protected]

    28

    LISTList uma lista de itens aonde o usurio pode escolher um item ou mais.

    Construtores:

    List() cria uma lista nova sem linhas visveis, desabilitando mltiplas seleesList(int nlin, boolean scr) cria uma lista nova com um numero visvel de linhas nlin e com

    mltiplas selees se scr for TrueMtodos:

    void addItem(String item) adiciona um item no final da listavoid addItem(String item, int pos) adiciona um item no na posio posvoid clear() Limpa a listaint countItems() retorna o numero de itens da lista

    void delItem(int num) deleta item na posio numString getItem(int num) retorna o nome do item na posio num

    void replaceItem(String new_item, int num) ajusta o item na posio num para new_itemExemplos:

    List alist = new List();alist.addItem("Primeiro");alist.addItem("Segundo");

    CHOICEChoice um menu de escolha. Por default o primeiro item adicionado a um menu choice

    o item default.Construtores:

    public Choice() cria menu de escolha, inicialmente vazio.Mtodos:

    void addItem(String item); adiciona item ao menu de escolhaint countItems(); retorna o numero de itens do menuString getItem(int num); retorna nome do item na posio numint getSelectedIndex(); retorna ndice do item selecionadoString getSelectedItem(); retorna o nome do item selecionado

    void select(int num);

    ajusta o item selecionado para numvoid select(String str);

    ajusta o item selecionado para str

    SCROLLBARScrollbar uma barra deslizante. geralmente usada quando o usurio precisa se

    locomover rapidamente numa grande rea. Pode ser orientada verticalmente ou horizontalmente.

    Construtores:Scrollbar() Cria scrollbar orientada verticalmenteScrollbar(int ori) Cria scrollbar orientada por ori, sendo que ori pode ser:

    Scrollbar.HORIZONTALScrollbar.VERTICAL

    Scrollbar(int ori, int val, int vis, int min, int max) Cria uma scrollbar com orientao ori, itemdefault val, tamanho da pagina vis, mnimo min e mximo max.

    Mtodos:

    int getOrientation() retorna a orientao da Scrollbarvoid setValue(int val) ajusta o valor da scrollbar para item na posio val

    int getMinimum() retorna o valor mnimo de itens da Scrollbarint getMaximum() retorna o valor mximo de itens da Scrollbar

    Exemplo:

  • 5/23/2018 Java Apostila

    29/42

    Apostila Java Informtica

    Page 29 of 42Printed by [email protected]

    29

    ScrollBar x = new Scrollbar(Scrollbar.HORIZONTAL);

    TEXTFIELDTextField um componente que habilita o usurio entrar com uma linha de texto. Isto

    o suficiente para quase todas as entradas de dados. Mesmo o nome sendo TextField nmeros no

    aceitos tambm.Construtores:public TextField() cria um campo de textopublic TextField(int tam) cria um campo de texto com tamanho tampublic TextField(String txt) cria um campo de texto ajustado com a string txtpublic TextField(String txt, int tam) cria um campo de texto ajustado com a string txt e com

    o tamanho tamMtodos:

    int getColumns() retorna o numero de colunas(tamanho) do TextFieldString getText() retorna o texto contido no TextField

    void setText(String txt) ajusta o texto da TextField para txtExemplo:TextField atexto = new TextField("35",5);

    TEXTAREATextArea um componente parecido com TextField, a diferena que TextArea pode ter

    varias linhas de texto.Construtores:TextArea() Cria um campo de textoTextArea(int lin, int col) Cria um campo de texto com lin linhas e col colunasTextArea(String txt,int lin, int col) Cria um campo de texto com o contedo txt, lin linhas e

    col colunasMtodos:

    int getColumns() retorna o numero de colunas do TextFieldint getRows() retorna o numero de linhas do TextFieldString getText() retorna o texto contido no TextField

    void setText(String txt) ajusta o contedo do TextField para a string txtExemplo:

    TextArea texto = new TextArea("OK", 5, 40);

    Exemplo 5:

    import java.awt.*;import java.applet.Applet;

    public class ex5_3 extends Applet {Button boto;Checkbox cbox;Label texto;List lista;Scrollbar barra_rolagem;

    TextField campo_texto;TextArea area_texto;

    public void init() {

    boto = new Button("Ok");cbox = new Checkbox("Show");texto = new Label("Hello!");lista = new List();

  • 5/23/2018 Java Apostila

    30/42

    Apostila Java Informtica

    Page 30 of 42Printed by [email protected]

    30

    barra_rolagem = new Scrollbar(Scrollbar.HORIZONTAL);campo_texto = new TextField("37",5);area_texto = new TextArea("Ok",5,40);lista.addItem("Primeiro");lista.addItem("Segundo");add(boto);

    add(cbox);add(texto);add(lista);add(barra_rolagem);add(campo_texto);add(area_texto);

    }}

    CONTAINERSContainers so simplesmente componentes que podem conter outros componentes.

    Pense como uma maneira de subdividir uma rea para construir a interface com o usurio, aonde

    os componentes podem ser colocados.Existem dois tipos de containers: Panels e Windows. A maior diferena entre eles queum Panel definido como uma rea em uma janela j existente e Window uma janelacompletamente nova. Quando a aplicao uma Applet o nico container que pode ser aplicado o Panel.

    Exemplo:import java.awt.*;import java.applet.Applet;

    public class ex5_6 extends Applet {Frame aframe;

    public void init() {aframe = new Frame("Exemplo de Frame");aframe.show();

    }}

  • 5/23/2018 Java Apostila

    31/42

    Apostila Java Informtica

    Page 31 of 42Printed by [email protected]

    31

    LAYOUTSLayout pode ser definido como uma mascara que colocada sobre um container para

    definir como os seus componentes sero adicionados. Normalmente usado o layoutBorderLayout(), baseado nos pontos cardeais.

    Exemplo:import java.awt.*;import java.applet.Applet;

    public class ex5_7 extends Applet {Button boto1, boto2, boto3, boto4, boto5;

    public void init() {setLayout(new BorderLayout());boto1 = new Button("Norte");boto2 = new Button("Sul");boto3 = new Button("Leste");boto4 = new Button("Oeste");

    boto5 = new Button("Centro");add("North",boto1);add("South",boto2);add("East",boto3);add("West",boto4);add("Center",boto5);

    }}

    MTODOS COMUNS A TODOS OS COMPONENTESvoid resize(int width, int height) Tamanho do componentevoid move(int x, int y)

    Mover componente

    void setForeground(Color x) Cor do componentevoid setBackground(Color y) Cor de Fundo do componentevoid disable() Desabilitando componentevoid enable() Habilitando componente

    VARIVEIS DE COR DEFINIDAS NO JAVAblack blue cyan darkGraygray green lightGray magentaorange pink red whiteyellow

  • 5/23/2018 Java Apostila

    32/42

    Apostila Java Informtica

    Page 32 of 42Printed by [email protected]

    32

    Exemplo de Interface de uma calculadora:import java.awt.*;import java.applet.Applet;

    public class ex5_7 extends Applet {Label display;

    Panel bottom;Panel num_panel;Panel func_panel;Button number[] = new Button[10];Button function[] = new Button[6];

    public void init() {setLayout(new BorderLayout());display = new Label("0", Label.RIGHT);add("North", display);

    bottom = new Panel();bottom.setLayout(new BorderLayout());

    num_panel = new Panel();num_panel.setLayout(new GridLayout(4,3));

    for (int x=9; x>=0; x--) {number[x] = new Button((new String()).valueOf(x));num_panel.add(number[x]);

    }

    function[4] = new Button(".");num_panel.add(function[4]);

    function[5] = new Button("=");

    num_panel.add(function[5]);

    bottom.add("Center", num_panel);

    func_panel = new Panel();func_panel.setLayout(new GridLayout(4,1));

    function[0] = new Button("+");function[1] = new Button("-");function[2] = new Button("*");function[3] = new Button("/");

    for (int x=0; x

  • 5/23/2018 Java Apostila

    33/42

    Apostila Java Informtica

    Page 33 of 42Printed by [email protected]

    33

    6.3. GrficosA linguagem Java contem um numero grande de primitivas grficas que possibilitam ao

    usurio criar grficos facilmente e rapidamente. Abaixo uma pequena relao dos mtodos maisteis da classe Graphics:

    dispose()limpa contexto corrente do objeto

    clearRect(int x, int y, int width, int height)limpa a rea do retngulo especificado com a cor atual

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

    drawLine(int x1, int y1, int x2, int y2)desenha uma linha

    int x1 coordenada x inicialint y1 coordenada y inicialint x2 coordenada x finalint y2 coordenada y final

    drawRect(int x, int y, int width, int height)desenha um retngulo

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

  • 5/23/2018 Java Apostila

    34/42

    Apostila Java Informtica

    Page 34 of 42Printed by [email protected]

    34

    drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)desenha um retngulo com as bordas arredondadas

    int x coordenada x inicialint y coordenada y inicialint width largura

    int height alturaint arcWidth dimetro horizontal do arco nos 4 cantosint arcHeight dimetro vertical do arco nos 4 cantos

    drawOval(int x, int y, int width, int height)desenha um circulo

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

    draw3DRect(int x, int y, int width, int height, boolean raised)desenha um retngulo em 3 dimenses

    int x coordenada x inicialint y coordenada y inicialint width larguraint height alturaboolean raised se True retngulo aparece aumentado, seno diminudo

    drawPolygon(int xPoints[], int yPoints[], int nPoints)

    desenha um polgono. Qualquer polgono criado tem que conter um ponto que o fecha. Javano cria polgonos fechados automaticamente, ento tenha sempre certeza que os pontos inicial efinal so iguais.

    int xPoints[] array de coordenadas xint yPoints[] array de coordenadas yint nPoints[] numero de pontos

    drawString(String str, int x, int y)desenha string com a fonte e tamanho correntes

    String str string a ser desenhadaint x coordenada xint y coordenada y

    fillRect(int x, int y, int width, int height)preenche um retngulo com a cor corrente

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

  • 5/23/2018 Java Apostila

    35/42

    Apostila Java Informtica

    Page 35 of 42Printed by [email protected]

    35

    fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)preenche um retngulo com bordas arredondadas com a cor corrente

    int x coordenada x inicialint y coordenada y inicialint width largura

    int height alturaint arcWidth dimetro horizontal do arco nos 4 cantosint arcHeight dimetro vertical do arco nos 4 cantos

    fill3DRect(int x, int y, int width, int height, boolean raised)preenche um retngulo 3D com a cor corrente

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

    boolean raised se True retngulo aparece aumentado, seno diminudo

    fillOval(int x, int y, int width, int height)preenche um circulo com a cor corrente

    int x coordenada x inicialint y coordenada y inicialint width larguraint height altura

    fillPolygon(int xPoints[], int yPoints[], int nPoints)

    preenche um polgono com a cor correnteint xPoints[] array de coordenadas xint yPoints[] array de coordenadas yint nPoints[] numero de pontos

    Color getColor()retorna a cor corrente

    setColor(Color c)ajusta a cor corrente

    Color c nova cor corrente

    Font getFont()retorna a fonte corrente

    setFont(Font f)ajusta a fonte corrente

    Font f nova fonte corrente

    Muito mais em:Procure por classe Graphics() em http://www.javasoft.com/doc/index.html

  • 5/23/2018 Java Apostila

    36/42

    Apostila Java Informtica

    Page 36 of 42Printed by [email protected]

    36

    7. ThreadsThreads constituem uma caracterstica bastante relevante da linguagem Java. A

    incorporao dos conceitos de sincronizao e variveis de condio dentro da prpria linguagempermite que programadores mdios consigam utilizar conceitos de computao concorrente deforma bem facilitada, o que possibilita uma melhoria de performance dos programas. Nestecaptulo veremos o que so threads, analisaremos seus estados e mtodos bsicos e aprenderemosa inserir threads em applets.

    7.1. O que so threads?Uma thread pode ser definido como um fluxo de controle seqencial isolado dentro de

    um programa. Como um programa seqencial qualquer, uma thread tem um comeo, um fim euma seqncia de comandos. Entretanto, uma thread em Java no um programa, no executasozinho, executa dentro de um programa.

    Threads permitem que um programa simples possa executar vrias tarefas diferentes ao

    mesmo tempo, independentemente umas das outras.Programas multithreaded so programas que contm vrias threads, executando tarefasdistintas, simultaneamente. O browser HotJava, implementado em Java, um exemplo. Damesma forma que o Netscape, com o HotJava voc pode fazer um scroll em uma pginaenquanto carrega uma imagem ou executa vrios applets ao mesmo tempo.

    Em Java, threads so cidados de primeira ordem, se constituindo de instncias da classeThread que fornecem suporte a comunicao concorrente. A classe Thread prov os mtodosnecessrios para criar e controlar threads (independentemente da plataforma usada) e execut-losconcorrentemente. A real implementao de threads feita pelo sistema operacional.

    O corpo de uma thread o seu mtodo run(), e nele que so executadas as tarefas squais thread se destina. Podemos implementar threads de duas maneiras (ambas suportadas pelos

    construtores da classe Thread):Criando uma subclasse da classe Thread e definindo o seu mtodo run() de maneira adequada realizao da tarefa do thread.Criando uma instncia de Thread que recebe como parmetro um objeto que implemente ainterface Runnable - esse objeto providenciar o mtodo run() para a thread.

    A linguagem Java fornece meios para criarmos threads como daemons, agruparmosthreads, sincroniz-los e controlar suas prioridades.

  • 5/23/2018 Java Apostila

    37/42

    Apostila Java Informtica

    Page 37 of 42Printed by [email protected]

    37

    7.2. Os estados de uma thread

    New ThreadInicializao da thread - feita atravs do construtor Thread().

    class MyThreadClass extends Thread {...

    }...MyThreadClass myThread = new MyThreadClass();

    Neste estado, nenhum recurso do sistema foi alocado para o thread ainda, assim, a partir

    daqui, tudo que voc pode fazer um start(), para ativar a thread, ou um stop(), para mat-lo. Achamada de qualquer outro mtodo no faz sentido e levantar a exceoIllegalThreadStateException.

    RunnableEste o estado em que o thread est pronto para rodar. O mtodo start() requisita os

    recursos do sistema necessrios para rodar a thread e chama o seu mtodo run(). O mtodo run() a alma de um thread; neste mtodo que definimos o que a thread vai executar.

    Thread myThread = new MyThreadClass();myThread.start();

    Falamos em Runnable, ao invs de Running, porque a thread pode no estar realmente

    sendo executada. Imagine um computador com um nico processador - seria impossvel executartodas as threads ao mesmo tempo. O que ocorre que a CPU deve ser escalonada entre as vriasthreads. Quando uma thread est Running, ela est tambm Runnable, as instrues do seumtodo run() que esto sendo executadas pela CPU.

    Not RunnableO estado Not Runnable significa que a thread est impedida de executar por alguma

    razo. Existem 4 maneiras de uma thread ir para o estado Not Runnable.1. receber a mensagem suspend();2. receber a mensagem sleep();3. a thread bloqueia, esperando I/O;4. a thread usa seu mtodo wait() para esperar por uma varivel de condio.O exemplo abaixo coloca o applet myThread para dormir por 10 segundos:

  • 5/23/2018 Java Apostila

    38/42

    Apostila Java Informtica

    Page 38 of 42Printed by [email protected]

    38

    Thread myThread = new MyThreadClass();myThread.start();try {

    myThread.sleep(10000);} catch (InterruptedException e) { }

    Cada uma destas maneiras tem a sua forma especfica de sair do estado Not Runnable.1. se a thread foi suspensa, algum precisa mandar-lhe a mensagem resume();2. se a thread foi posta para dormir, ela voltar a ser Runnable quando o nmero de

    milisegundos determinado passar;3. se a thread est bloqueada, esperando por I/O, a operao precisa ser completada;4. se a thread est esperando por uma varivel de condio, o objeto que a retm precisa

    liber-la, atravs de um notify() ou de um notifyAll()

    DeadUma thread pode morrer de causas naturais (quando o seu mtodo run() acaba

    normalmente) ou pode ser morto pelo mtodo stop(). possvel controlar a ordem de execuo de vrias threads definindo prioridades para

    eles. O escalonador de threads do Java segue a seguinte regra: a qualquer instante, a threadcorrente a de maior prioridade. Para que a thread de maior prioridade ceda CPU a outra thread,ele precisa enviar para si o mtodo yield(), ou, entrar no estado Not Runnable. Caso contrrio, eleir executar at que termine seu mtodo run().

    Para descobrir a prioridade de uma thread, podemos usar o mtodo getPriority() e, paradefini-la setPriority(n), onde n um inteiro de 1 a 10 (10 representando a prioridade mxima).

    7.3. Threads em Applets

    At agora ns vimos como trabalhar com threads criadas a partir da classe Thread ou deuma classe que herde da classe Thread. Sabemos que esta classe prov os mtodos bsicos para selidar com threads (run(), start(), stop(), sleep(), etc.).

    Suponha que voc queira, agora, implementar uma thread dentro de uma applet. Porexemplo, suponha que voc quer fazer uma applet relgio, que atualiza o seu display a cadasegundo. A classe que vai implementar o seu relgio precisa ser uma subclasse da classe Appletpara herdar todas as facilidades oferecidas por ela. Como faz-la, ento, herdar tambm da classe

    Thread? A interface Runnable a soluo!Qualquer objeto que implemente a interface Runnable pode utilizar o seu mtodo run()

    para ser executado como uma thread.

    class Clock extends Applet implements Runnable {....}

    A applet Clock precisa, agora, criar a sua prpria thread. Isto feito no seu mtodo start()public void start() {

    if ( clockThread == null) {clockThread = new Thread(this, Clock);clockThread.start();

    }}

    Observe a chamada ao construtor Thread(this, Clock). O construtor precisa recebercomo primeiro argumento um objeto que implemente a interface Runnable, este objeto que vaifornecer o mtodo run() da thread clockThread.

  • 5/23/2018 Java Apostila

    39/42

    Apostila Java Informtica

    Page 39 of 42Printed by [email protected]

    39

    public void run() {while (clockThread != null) {

    repaint();try {

    clockThread.sleep(1000);} catch (InterruptedException e) { }

    }}

    No mtodo stop() do applet Clock, temos que chamar tambm o mtodo stop() da threadclockThread, caso contrrio, a thread vai continuar executando e consumindo recursos mesmodepois que sairmos da pgina da applet.public void stop() {

    clockThread.stop();clockThread = null;

    }

    Se voc revisitar a pgina, o start() da applet Clock chamado novamente e uma novathread inicializada.

    7.4. Herdando de Thread x Implementando RunnableExistem duas maneiras de implementar threads:

    1. Herdando da classe Thread ou de subclasses da classe Thread.2. Implementando a interface Runnable e criando uma thread (passando o objeto que

    implementa Runnable como argumento).Qual opo utilizar?

    Se voc precisa estender outra classe (o exemplo mais comum a classe Applet), useRunnable. Entretanto, se voc est planejando apenas sobrepor o mtodo run(), e mais nenhumoutro mtodo de Thread, use Runnable. Classes no devem herdar de outras classes, a menos queo programador pretenda modificar ou aprimorar o comportamento fundamental da classe.

  • 5/23/2018 Java Apostila

    40/42

    Apostila Java Informtica

    Page 40 of 42Printed by [email protected]

    40

    Abaixo o cdigo completo da applet Clock:/** Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved.** Permission to use, copy, modify, and distribute this software* and its documentation for NON-COMMERCIAL purposes and without

    * fee is hereby granted provided that this copyright notice* appears in all copies. Please refer to the file "copyright.html"* for further important copyright and licensing information.* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.*/

    import java.awt.Graphics;import java.util.Date;

    public class Clock extends java.applet.Applet implements Runnable {

    Thread clockThread = null;

    public void start() {if (clockThread == null) {

    clockThread = new Thread(this, "Clock");clockThread.start();

    }}public void run() {

    // loop terminates when clockThread is set to null in stop()while (Thread.currentThread() == clockThread) {

    repaint();try {clockThread.sleep(1000);

    } catch (InterruptedException e){}

    }}public void paint(Graphics g) {

    Date now = new Date();g.drawString(now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(), 5, 10);

    }public void stop() {

    clockThread = null;

    }}

  • 5/23/2018 Java Apostila

    41/42

    Apostila Java Informtica

    Page 41 of 42Printed by [email protected]

    41

    8. Procure Saber Mais Sobre

    8.1. URLPara aqueles que gostariam de interligar suas Applets com outros recursos da Internet, o

    Java contm classes especificas para isto.

    8.2. Fila, Pilha, Tabela HashA maioria das estruturas abstratas de dados j esto implementadas no Java, veja as

    bibliotecas contidas em java.util.

    8.3. JavadocFazer a documentao de um sistema sempre foi um problema. Na linguagem Java existe

    um gerador de documentao em HTML. O Javadoc gera documentao de: Packages, classes,interfaces, excees, mtodos e variveis.

    8.4. Ambientes de Programao/DebugaoAlm do JDK, existem vrios outros ambientes de programao e depurao para Java,

    abaixo relacionamos os mais conhecidos:Symantec Espresso:

    Ambiente completo de desenvolvimento para Windows 95, alm de um gerenciador deprojeto, contm um poderoso.Borland Latte:

    O Latte est ainda em desenvolvimento pela Borland. Este ambiente est sendodesenvolvido totalmente em Java, isto vai possibilitar a Borland vender o Latte para todas asplataformas.

    JavaMaker:Desenvolvido por Heechang Choi, roda sobre Windows 95 e NT. muito simples,

    pequeno e fcil de utilizar.J++:

    Ambiente de desenvolvimento ainda em fase de desenvolvimento pela Microsoft.Cosmo Code:

    Um dos mais interessantes ambientes j montados, faz parte do Cosmo Web system.Cosmo Code avaliavel para estaes Silicon Graphics.

  • 5/23/2018 Java Apostila

    42/42

    Apostila Java Informtica

    Page 42 of 42Printed by [email protected]

    42

    Referncias Bibliogrficas

    ALCANTARA, Andreia Almeida. Anais da XV JAI - Minicurso Java. Departamento de InformticaUFPE, 1996.

    DAMASCENOJR, Amrico. Aprendendo Java - Programao na Internet. Editora rica, 1996.LEMAY, Laura e PERKINS, Charles. Teach Yourself Java in 21 Days. Sams net Group, 1996.

    Java API Documentation. Sun Microsystems, 1995.Java Unleashed. Sams net Group, 1996.