Você está na página 1de 52

Apostila de JAVA

Apostila de Java

Grupo PET - Informtica

Sumrio
1. Introduo _______________________________________________ 03
1.1. O que JAVA? __________________________________________ 03
1.2. O que uma Applet _______________________________________ 03
1.3. O que uma Aplicao _____________________________________ 03
1.4. O que o Appletviewer ____________________________________ 03
1.5. O que Applet no WWW ___________________________________ 03
1.6. Criando uma Aplicao _____________________________________ 04
1.7. Criando uma Applet _______________________________________ 04
2. O Bsico _________________________________________________ 06
2.1 Variveis e tipos de dados ___________________________________ 06
2.2. Comentrios _____________________________________________ 06
2.3. Caracteres Especiais _______________________________________ 07
2.4. Expresses e Operadores ___________________________________ 07
2.5. Comparaes ____________________________________________ 08
3. Arrays, Loops e Condicionais __________________________________ 10
3.1. Arrays __________________________________________________ 10
3.2. Condicionais _____________________________________________ 11
3.3. Operador Condicional ______________________________________ 12
3.4. Switch __________________________________________________ 12
3.5. Loop For _______________________________________________ 13
3.6. Loop While ______________________________________________ 13
3.7. Loop Do ________________________________________________ 13
4. Criando Classes e Aplicaes em Java ___________________________ 14
4.1. Definindo Classes _________________________________________ 14
4.2. Definindo Variveis de Instncia ______________________________ 14
4.3. Constantes ______________________________________________ 14
4.4. Variveis de Classe ________________________________________ 14
4.5. Definio de Mtodos ______________________________________ 15
4.6. A palavra chave this _______________________________________ 15
4.7. Passando argumentos para Mtodos ___________________________ 16
5. Mais sobre Mtodos ________________________________________ 17
5.1. Polimorfismo ou Sobrecarga__________________________________ 17
5.2. Mtodos Construtores ______________________________________ 19
5.3. Mtodos Destrutores _______________________________________ 21
6. Window Toolkit ____________________________________________ 22
6.1. Eventos _________________________________________________ 22
6.2. Componentes AWT _______________________________________ 26
6.3. Grficos ________________________________________________ 33
7. Threads __________________________________________________ 36
7.1. O que so threads? ________________________________________ 36
7.2. Os estados de uma thread ___________________________________ 37
7.3. Threads em Applets _______________________________________ 38
7.4. Herdando de Thread x Implementando Runnable __________________ 39

Apostila de Java

Grupo PET - Informtica

8. Procure Saber Mais Sobre ____________________________________ 41


Referncias Bibliogrficas _______________________________________ 42

Apostila de Java

Grupo PET - Informtica

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 os binrios.
Esta portabilidade obtida pelo fato da linguagem ser interpretada, ou seja, o compilador gera um
cdigo independente de mquina chamado byte-code. No momento da execuo 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 desenvolvimento de 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 execuo dentro
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 que usualmente
voc implementa com outras linguagens mais convencionais.

1.4. O que o APPLETVIEWER?


Quem criou o Java espera que todos os browsers algum 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 o
Appletviewer, voc deve ento test-lo com alguns browsers que suportem Java para ver o efeito
final.

1.5. O que APPLET no WWW


As applets so disparadas quando se carrega uma pgina HTML. A seguir h um exemplo
de cdigo HTML que dispara uma applet.
<HTML>
<HEAD>
<TITLE> Java </TITLE>
</HEAD>
<BODY>
<APPLET CODE=nome.class WIDTH=300 HEIGHT=100>
</APPLET>
</BODY>
</HTML>

Pgina

Apostila de Java

Grupo PET - Informtica

1.6. Criando uma APLICAO


Para 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 fonte
Como 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, notepad
ou 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-code da aplicao. Para
executar o byte-code basta digitar o comando:
java HelloWorld

1.7. Criando uma APPLET


Criar uma applet diferente de criar uma simples aplicao porque uma applet executada
e visualizada dentro de uma pgina HTML. Como exemplo, novamente ser implementada 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);
}
}

Pgina

Apostila de Java

Grupo PET - Informtica

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):
<HTML>
<HEAD>
<TITLE> Java Hello World </TITLE>
</HEAD>
<BODY>
<APPLET CODE=HelloWorldApplet.class WIDTH=300 HEIGHT=100>
</APPLET>
</BODY>
</HTML>

1.7.3. Visualizao
A pgina com cdigo descrito anteriormente pode ser visualizada atravs de um browser
que suporte java ou do appletviewer utilizando-se do comando a seguir:
appletviewer exemplo1.html

Pgina

Apostila de Java

Grupo PET - Informtica

2. O BSICO
2.1. Variveis e tipos de dados
Variveis 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 ento poder
atribuir valores a mesma.
2.1.1. Declarando variveis
As declaraes de variveis consistem de um tipo e um nome de varivel: como segue o
exemplo:
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 colocar
qualquer letra ou nmero.
2.1.2. Tipos de variveis
Toda varivel deve possuir um tipo. Os tipos que uma varivel pode assumir uma das trs
coisas a seguir:
Uma das oito primitivas bsicas de tipos de dados
O nome de uma classe ou interface
Um 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
Alcance
byte 8 bits
-128 at 127
short 16 bits
-32.768 at 32.767
int
32 bits
-2.147.483.648 at 2.147.483.647
long 64 bits
-9223372036854775808 at 9223372036854775807
Existem 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. Comentrios
Java possui trs tipos de comentrio, o /* e */ como no C e C++. Tudo que estiver entre os
dois delimitadores so ignorados:
Pgina

Apostila de Java

Grupo PET - Informtica

/* Este comentrio ficar visvel somente no cdigo o compilador ignorar


completamente este trecho entre os delimitadores
*/

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

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

2.3. Caracteres especiais


Caracter
\n
\t
\b
\r
\f
\\
\
\
\ddd
\xdd

Significado
Nova Linha
Tab
Backspace
Retorno do Carro
Formfeed (avana pgina na impressora)
Barra invertida
Apstrofe
Aspas
Octal
Hexadecimal

2.4. Expresses e operadores


2.4.1. Operadores Aritmticos
Operador
Significado
+
soma
subtrao
*
multiplicao
/
diviso
%
mdulo

Exemplo
3+4
5-7
5*5
14 / 7
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
System.out.println
System.out.println
System.out.println
System.out.println

(
(
(
(
(

x
x
x
x
x

+
/
%

y
y
y
y

+
=
=
=
=

+
+
+
+
+

, y + y );
(x + y) );
(x - y) );
(x / y) );
( x % y ) );
Pgina

Apostila de Java

Grupo PET - Informtica

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

Pgina

Apostila de Java

Grupo PET - Informtica

A sada do programa acima :


x
x
x
x
x
a
a

+
/
%

6, y 4
y = 10
y = 2
y = 1
y = 2
12.5, b 7
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
Significado
x += y
x=x+y
x -= y
x=x - y
x *= y
x=x*y
x /= 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 ser
incrementado, e usando o prefixo ( ++x ou x ) acontece o contrario, y recebe o valor incrementado
de x.

2.5. Comparaes
Java 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
==
Igual
!=
Diferente ( No igual)
<
Menor que
>
Maior que
<=
Menor ou igual
>=
Maior ou igual

Exemplo
x == 3
x != 3
x<3
x>3
x <= 3
x >= 3

Pgina

Apostila de Java

Grupo PET - Informtica

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 esquerda
>>
Deslocamento a direita
>>>
Deslocamento a direita com preenchimento de zeros
Complemento bit-a-bit
x <<= y
Atribuio com deslocamento a esquerda ( x = x << y )
x >>= y
Atribuio com deslocamento a direita ( x = 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 )

Pgina

10

Apostila de Java

Grupo PET - Informtica

3. ARRAYS, LOOPS E CONDICIONAIS


3.1. Arrays
Arrays 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 restrio que 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, por
exemplo:
int[] temps = new int[99];

Quando voce cria um objeto array usando o operador new, todos os ndices so
inicializados para voc ( 0 para arrays numricos, falso para boolean, \0 para caracteres, e NULL
para objetos). Voc tambm pode criar e inicializar um array ao mesmo tempo.
String[] chiles = { jalapeno,
thai};

anaheim,

serrano ,

jumbou,

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

Pgina

11

Apostila de Java

Grupo PET - Informtica

3.1.3. Acessando os Elementos do Array


Uma vez que voc tm um array com valores iniciais, voc pode testar e mudar os valores
em 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;

Isto provoca um erro de compilao pois o ndice 10 no existe, pois isto est fora das
bordas 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 um array
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. Condicionais
O 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);
else
System.out.println( y e maior);

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

3.2.1. Bloco
Um bloco definido por ({}) e contm um grupo de outros blocos. Quando um novo bloco
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 terminadas ou extintas
no final da execuo deste(}).

Pgina

12

Apostila de Java

Grupo PET - Informtica

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 Condicional


Uma 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 : falseresult
int menor = x < y ? x : y ; // A varivel menor recebe o valor do menor
entre x e y.

3.4. O switch
Um 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 for


encontrada, o bloco default executado. O default opcional, ento caso este no esteja
associado ao comando, o bloco do swicth sem executar nada.

Pgina

13

Apostila de Java

Grupo PET - Informtica

3.5. Looping For


O 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 da


utilizao 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. Loop While


O 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 Do
A 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);

Pgina

14

Apostila de Java

Grupo PET - Informtica

4. Criando Classes e Aplicaes em Java


4.1. Definindo Classes
Para definir uma classe use a palavra chave class e 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 Instncia


As 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 definio da
classe. Exemplo:
class Bike extends Veculo {
String tipo;
int correia;
int pedal;
}

4.3. Constantes
Para 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 Classe


As 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;
Pgina

15

Apostila de Java

Grupo PET - Informtica

4.5. Definio de Mtodos


A definio dos mtodos tm quatro partes bsicas:
O nome do mtodo;
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<arr.length;i++)
arr[i]=lower++;
return arr;
}
public static void main(String arg[]){
int theArray[];
RangeClass theRange=new RangeClass();
theArray= theRange.makeRange(1,10);
System.out.print(The array: [ );
for ( int i=0; i < theArray.length; i++)
System.out.print(theArray[i] + );
System.out.println(]);
}
}

A sada do programa :
The array: [ 1 2 3 4 5 6 7 8 9 10 ]

Pgina

16

Apostila de Java

Grupo PET - Informtica

4.6. A palavra chave this


No corpo de uma definio de mtodo, voc pode querer referir-se ao objeto corrente-o
objeto que o mtodo foi chamado - para referir-se s variveis de instncia ou para passar o objeto
corrente como um argumento para um outro mtodo. Para este tipo de referncia, voc pode usar a
palavra chave this.
class Pessoa {
String nome;
int idade;
Pessoa ( String nome, int idade ) {
this.nome = nome;
this.idade = idade;
}
public void imprimeDados () {
System.out.print ( Nome: + this.nome + Idade: + this.idade);
}
}

4.7.Passando argumentos para Mtodos


class 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(]);
Pgina

17

Apostila de Java

Grupo PET - Informtica

As sadas deste programa:


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

Pgina

18

Apostila de Java

Grupo PET - Informtica

5. MAIS SOBRE MTODOS


5.1. Polimorfismo ou Sobrecarga
Os 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 se
chama um mtodo em um objeto, o Java casa o nome do mtodo, o nmero de argumentos e o tipo
dos argumentos e escolhe qual a definio do mtodo a executar.
Para criar um mtodo sobrecarregado, necessrio criar diferentes definies de mtodos na sua
classe, todos com o mesmo nome, mas com diferentes parmetros (nmero de argumentos ou
tipos).
No exemplo a seguir veremos a definio da classe Retangulo, a qual define um retngulo
plano. A classe Retangulo tm quatro variveis para instanciar, as quais definem o canto superior
esquerdo 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 so
inicializadas com 0. Definindo um mtodo construaRetang (): este mtodo recebe quatro inteiros e
faz um resize do retngulo de acordo com as novas coordenadas e retorna o objeto retngulo
resultante ( note que os argumentos possuem o mesmo nome das variveis instanciveis, portanto
deve-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-se usar o
objeto Point ao invs de coordenadas individuais. Faremos a sobrecarga do mtodo construaRetang
(), 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;
}

Pgina

19

Apostila de Java

Grupo PET - Informtica

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

Pgina

20

Apostila de Java

Grupo PET - Informtica

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 do


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

Pgina

21

Apostila de Java

Grupo PET - Informtica

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

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 Construtores


Um 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 objeto
Inicializa as variveis daquela instncia do objeto
Chama 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 classe
Construtores 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);
Pgina

22

Apostila de Java

Grupo PET - Informtica

}
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 tipos e
parmetros. Por exemplo os mtodos construaRetang () definidos na classe Retangulo seriam
excelentes construtores para a mesma classe, pois eles esto justamente instanciando as variveis.
Segue o exemplo abaixo com as devidas alteraes :
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 ( --------------------------------------------);
Pgina 23

Apostila de Java

Grupo PET - Informtica

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

Pgina

24

Apostila de Java

Grupo PET - Informtica

5.3. Mtodos Destrutores


Os 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 um
mtodo 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 limpeza do
seu objeto.

Pgina

25

Apostila de Java

Grupo PET - Informtica

6. WINDOW TOOLKIT
As 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 a
funcionalidade que se podia esperar de um sistema moderno de janelas. O AWT contem os mais
usados componentes das interfaces grficas atuais portanto habilita a aplicao a ser executada em
sistemas grficos completamente diferentes.
Neste capitulo apresentaremos os seguintes componentes: Buttom, Canvas, Checkbox,
Container, Label, List, Scrollbar e TextComponent. Mas para um bom entendimento destes
componentes necessrio primeiro ter uma base sobre manuseio de eventos.

6.1. Eventos
Um 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/tratamento destes
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, o
mtodo action() daquele componente chamado. Neste caso nos estamos usando um boto ao
invs de usar uma subclasse de nossa autoria. O tratador de eventos tenta tratar o evento dentro da
classe boto, mas como ele no acha o tratador que iria manusear o evento ele passa o evento para
cima para o container que contem o componente e assim por diante at que algum trate o evento.
Vamos dar uma olhada de perto no mtodo action():
public boolean action(Event evt, Object algum) {

Pgina

26

Apostila de Java

Grupo PET - Informtica

Todos tratadores de eventos tem uma forma similar a esta. Eles aceitam um parmetro do
tipo Event que prove informao detalhada sobre o evento. Segundo eles retornam um valor
Boolean 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 e


boto so ambos objetos, nos podemos checar se ambos so o mesmo objeto.
boto.setLabel("OK!!");

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


return true;
}
else
return 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 so
fornecidos na linguagem Java. Estes esto na tabela abaixo. Mas lembre-se que tudo relativo ao
componente. Por exemplo, o mtodo mouseMove() de um componente chamado quando o
mouse movido dentro daquele componente.
Eventos do Java
TIPO
MTODO
Ao 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 quando
voc quer trocar o comportamento do componente, action() no suficiente. Ele apenas reporta
eventos 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);
Pgina

27

Apostila de Java

Grupo PET - Informtica

}
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) {
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 nos mudamos
seu comportamento/funcionalidade.

6.1.2. handleEvent() ou action()


Geralmente, uma combinao do mtodo action() com outros pr-construidos tratadores de
eventos trabalharo bem. Para aquelas vezes que voc necessita tomar um controle completo
handleEvent() 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. Isto significa que
voc deve ter muito cuidado quando esta montando um handleEvent() ou sua aplicao pode
comear ficar confusa e cheia de
bugs 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 AWT
Pgina

28

Apostila de Java

Grupo PET - Informtica

TIPO
MTODO
Ao tomada
ACTION_EVENT
Boto do mouse pressionado MOUSE_DOWN
Arrasto do mouse
MOUSE_DRAG
Mouse entra em componente
MOUSE_ENTER
Mouse sai de componente
MOUSE_EXIT
Boto do mouse liberado
MOUSE_UP
Movimento do mouse
MOUSE_MOVED
Tecla pressionada
KEY_PRESS
Tecla liberada
KEY_RELEASE
6.1.3. Criando Eventos
Ocasionalmente o programa tem que criar seus prprios eventos. Pode at parecer
estranho, mas as vezes o programa fica muito mais simples.
Um simples evento pode ser criado assim:
Event evt = new Event(obj_alvo, id, arg);

Aonde obj_alvo o objeto para o qual o evento deve ser mandado, id um inteiro que
representa o tipo do evento (pode-se usar as constantes acima) e arg um argumento para ser
includo no evento se ha alguma informao extra que voc gostaria que o tratador de eventos
recebesse. 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 determinado componente.


Por exemplo se um text field para mostrar dados e no para receber dados, voc provavelmente
Pgina

29

Apostila de Java

Grupo PET - Informtica

no quer que o text field esteja apto a receber o foco. Para este caso existe o mtodo
requestFocus():
public void requestFocus() {
...
}

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

Pgina

30

Apostila de Java

Grupo PET - Informtica

6.2. Componentes AWT


1.
2.
3.
4.

Antes de comearmos bom sabermos que:


Todos os componentes tem uma posio e tamanho
Todos os componentes tem uma cor e uma cor de fundo
Componentes podem ser habilitados ou desabilitados
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 uma
interface grfica. Exemplos destes componentes so: buttons, text labels, scrollbars, pick
list e campos text-entry.
Containers
Containers abrangem reas nas quais os componentes da interface podem ser postos. Isto
habilita os componentes a serem agrupados e formarem um objeto mais coeso e fcil de
ser manipulado. Um Panel um exemplo deste tipo de componente.
Windows
Windows so um tipo muito especial da classe Component. Todos os outros componentes
so adicionados dentro de uma window. Normalmente quando se programa applets,
windows no so usadas.

6.2.1. Componentes da Interface


BUTTON
Boto. Pode ser customizado para ter um texto ou ainda ser branco.
Construtores:
Button() cria um boto sem label
Button(String etiq) Cria um Button com label igual ao contedo de etiq
Mtodos especficos:
String getLabel() retorna o label(etiqueta) do boto
void 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 outras
subclasses. Este componente no muito til para usurios iniciantes ou intermedirios, mas
extremamente til para criar seus prprios componentes.
Construtores:
Canvas() cria um canvas
Mtodos especficos:
void paint(Graphics g) desenha um canvas com a cor de fundo default
Ao:
Pgina

31

Apostila de Java

Grupo PET - Informtica

nenhuma por default


Exemplo:
Canvas x = new Canvas();
CHECKBOX
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. Alem disto, mais
de uma checkbox podem ser agrupadas com um CheckboxGroup para possibilitar que apenas um
dos itens seja selecionado ao mesmo tempo.
Construtores:
Checkbox() cria uma checkbox branca com opo false
Checkbox(String lbl) cria uma checkbox com label lbl com opo false
Checkbox(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 checkbox
String setLabel(String lbl) ajusta o label da checkbox para lbl
boolean getState() retorna o estado da checkbox
void setState(boolean est) ajusta o estado da checkbox para est
CheckboxGroup getCheckboxGroup() retorna o grupo que a checkbox pertence
void setCheckboxGroup(CheckboxGroup g) ajusta nova CheckboxGroup(grupo) que pertence
a checkbox
Ao:
Cria um evento quando o estado muda
Exemplo:
Checkbox aBox = new Checkbox("SHOW");

LABEL
Um label simplesmente um texto que pode ser colocado em um componente.
Construtores:
Label() cria um label vazio
Label(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 esquerda
Label.CENTER centraliza texto
Label.RIGHT
alinhamento a direita
Mtodos especficos:
int getAlignment() retorna o alinhamento do label
void 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 lbl
Ao:
Nenhuma, por default
Exemplo:
Pgina

32

Apostila de Java

Grupo PET - Informtica

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

Pgina

33

Apostila de Java

Grupo PET - Informtica

LIST
List uma lista de itens aonde o usurio pode escolher um item ou mais.
Construtores:
List() cria uma lista nova sem linhas visveis, desabilitando mltiplas selees
List(int nlin, boolean scr) cria uma lista nova com um numero visvel de linhas nlin e com
mltiplas selees se scr for True
Mtodos:
void addItem(String item) adiciona um item no final da lista
void addItem(String item, int pos) adiciona um item no na posio pos
void clear() Limpa a lista
int countItems() retorna o numero de itens da lista
void delItem(int num) deleta item na posio num
String 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_item
Exemplos:
List alist = new List();
alist.addItem("Primeiro");
alist.addItem("Segundo");
CHOICE
Choice 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 escolha
int countItems(); retorna o numero de itens do menu
String getItem(int num); retorna nome do item na posio num
int getSelectedIndex(); retorna ndice do item selecionado
String getSelectedItem(); retorna o nome do item selecionado
void select(int num); ajusta o item selecionado para num
void select(String str); ajusta o item selecionado para str
SCROLLBAR
Scrollbar 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 verticalmente
Scrollbar(int ori) Cria scrollbar orientada por ori, sendo que ori pode ser:
Scrollbar.HORIZONTAL
Scrollbar.VERTICAL
Scrollbar(int ori, int val, int vis, int min, int max) Cria uma scrollbar com orientao ori, item
default val, tamanho da pagina vis, mnimo min e mximo max.
Mtodos:
int getOrientation() retorna a orientao da Scrollbar
Pgina

34

Apostila de Java

Grupo PET - Informtica

void setValue(int val) ajusta o valor da scrollbar para item na posio val
int getMinimum() retorna o valor mnimo de itens da Scrollbar
int getMaximum() retorna o valor mximo de itens da Scrollbar
Exemplo:
ScrollBar x = new Scrollbar(Scrollbar.HORIZONTAL);
TEXTFIELD
TextField 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 texto
public TextField(int tam) cria um campo de texto com tamanho tam
public TextField(String txt) cria um campo de texto ajustado com a string txt
public TextField(String txt, int tam) cria um campo de texto ajustado com a string txt e com o
tamanho tam
Mtodos:
int getColumns() retorna o numero de colunas(tamanho) do TextField
String getText() retorna o texto contido no TextField
void setText(String txt) ajusta o texto da TextField para txt
Exemplo:
TextField atexto = new TextField("35",5);
TEXTAREA
TextArea um componente parecido com TextField, a diferena que TextArea pode ter
varias linhas de texto.
Construtores:
TextArea() Cria um campo de texto
TextArea(int lin, int col) Cria um campo de texto com lin linhas e col colunas
TextArea(String txt,int lin, int col) Cria um campo de texto com o contedo txt, lin linhas e col
colunas
Mtodos:
int getColumns() retorna o numero de colunas do TextField
int getRows() retorna o numero de linhas do TextField
String getText() retorna o texto contido no TextField
void setText(String txt) ajusta o contedo do TextField para a string txt
Exemplo:
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;
Pgina

35

Apostila de Java

Grupo PET - Informtica

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

CONTAINERS
Containers 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 que um
Panel definido como uma rea em uma janela j existente e Window uma janela completamente
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();
}
}

Pgina

36

Apostila de Java

Grupo PET - Informtica

LAYOUTS
Layout pode ser definido como uma mascara que colocada sobre um container para
definir como os seus componentes sero adicionados. Normalmente usado o layout
BorderLayout(), 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 COMPONENTES


void resize(int width, int height) Tamanho do componente
void move(int x, int y)
Mover componente
void setForeground(Color x)
Cor do componente
void setBackground(Color y)
Cor de Fundo do componente
void disable()
Desabilitando componente
void enable()
Habilitando componente
VARIVEIS DE COR DEFINIDAS NO JAVA
black
blue
cyan
darkGray
gray
green
lightGray
magenta
orange
pink
red
white
yellow

Pgina

37

Apostila de Java

Grupo PET - Informtica

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]
function[1]
function[2]
function[3]

=
=
=
=

new
new
new
new

Button("+");
Button("-");
Button("*");
Button("/");

for (int x=0; x<4; x++)


func_panel.add(function[x]);
bottom.add("East", func_panel);
add("Center",bottom);
}
}

Pgina

38

Apostila de Java

Grupo PET - Informtica

6.3. Grficos
A linguagem Java contem um numero grande de primitivas grficas que possibilitam ao
usurio criar grficos facilmente e rapidamente. Abaixo uma pequena relao dos mtodos mais teis
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 inicial
int y coordenada y inicial
int width largura
int height altura
drawLine(int x1, int y1, int x2, int y2)
desenha uma linha
int x1 coordenada x inicial
int y1 coordenada y inicial
int x2 coordenada x final
int y2 coordenada y final
drawRect(int x, int y, int width, int height)
desenha um retngulo
int x coordenada x inicial
int y coordenada y inicial
int width largura
int height altura

Pgina

39

Apostila de Java

Grupo PET - Informtica

drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
desenha um retngulo com as bordas arredondadas
int x coordenada x inicial
int y coordenada y inicial
int width largura
int height altura
int arcWidth dimetro horizontal do arco nos 4 cantos
int arcHeight dimetro vertical do arco nos 4 cantos
drawOval(int x, int y, int width, int height)
desenha um circulo
int x coordenada x inicial
int y coordenada y inicial
int width largura
int height altura
draw3DRect(int x, int y, int width, int height, boolean raised)
desenha um retngulo em 3 dimenses
int x coordenada x inicial
int y coordenada y inicial
int width largura
int height altura
boolean 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. Java no
cria polgonos fechados automaticamente, ento tenha sempre certeza que os pontos inicial e final
so iguais.
int xPoints[] array de coordenadas x
int yPoints[] array de coordenadas y
int nPoints[] numero de pontos
drawString(String str, int x, int y)
desenha string com a fonte e tamanho correntes
String str string a ser desenhada
int x coordenada x
int y coordenada y
fillRect(int x, int y, int width, int height)
preenche um retngulo com a cor corrente
int x coordenada x inicial
int y coordenada y inicial
int width largura
int height altura
Pgina

40

Apostila de Java

Grupo PET - Informtica

Pgina

41

Apostila de Java

Grupo PET - Informtica

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 inicial
int y coordenada y inicial
int width largura
int height altura
int arcWidth dimetro horizontal do arco nos 4 cantos
int 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 inicial
int y coordenada y inicial
int width largura
int 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 inicial
int y coordenada y inicial
int width largura
int height altura
fillPolygon(int xPoints[], int yPoints[], int nPoints)
preenche um polgono com a cor corrente
int xPoints[] array de coordenadas x
int yPoints[] array de coordenadas y
int 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:
Pgina

42

Apostila de Java

Grupo PET - Informtica

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

Pgina

43

Apostila de Java

Grupo PET - Informtica

7. Threads
Threads constituem uma caracterstica bastante relevante da linguagem Java. A incorporao
dos conceitos de sincronizao e variveis de condio dentro da prpria linguagem permite que
programadores mdios consigam utilizar conceitos de computao concorrente de forma bem
facilitada, o que possibilita uma melhoria de performance dos programas. Neste captulo veremos o
que so threads, analisaremos seus estados e mtodos bsicos e aprenderemos a 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 e uma
seqncia de comandos. Entretanto, uma thread em Java no um programa, no executa sozinho,
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 tarefas
distintas, simultaneamente. O browser HotJava, implementado em Java, um exemplo. Da mesma
forma que o Netscape, com o HotJava voc pode fazer um scroll em uma pgina enquanto carrega
uma imagem ou executa vrios applets ao mesmo tempo.
Em Java, threads so cidados de primeira ordem, se constituindo de instncias da classe
Thread que fornecem suporte a comunicao concorrente. A classe Thread prov os mtodos
necessrios para criar e controlar threads (independentemente da plataforma usada) e execut-los
concorrentemente. 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 s
quais 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 a
interface Runnable - esse objeto providenciar o mtodo run() para a thread.
A linguagem Java fornece meios para criarmos threads como daemons, agruparmos threads,
sincroniz-los e controlar suas prioridades.

7.2. Os estados de uma thread

Pgina

44

Apostila de Java

Grupo PET - Informtica

New Thread
Inicializao 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. A
chamada de qualquer outro mtodo no faz sentido e levantar a exceo
IllegalThreadStateException.
Runnable
Este 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 executar
todas as threads ao mesmo tempo. O que ocorre que a CPU deve ser escalonada entre as vrias
threads. Quando uma thread est Running, ela est tambm Runnable, as instrues do seu mtodo
run() que esto sendo executadas pela CPU.
Not Runnable
O 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;
Pgina

45

Apostila de Java

Grupo PET - Informtica

4. a thread usa seu mtodo wait() para esperar por uma varivel de condio.

Pgina

46

Apostila de Java

Grupo PET - Informtica

O exemplo abaixo coloca o applet myThread para dormir por 10 segundos:


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 liberla, atravs de um notify() ou de um notifyAll()
Dead
Uma 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 thread corrente 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, ele ir executar
at que termine seu mtodo run().
Para descobrir a prioridade de uma thread, podemos usar o mtodo getPriority() e, para
defini-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 de
uma classe que herde da classe Thread. Sabemos que esta classe prov os mtodos bsicos para se
lidar com threads (run(), start(), stop(), sleep(), etc.).
Suponha que voc queira, agora, implementar uma thread dentro de uma applet. Por
exemplo, suponha que voc quer fazer uma applet relgio, que atualiza o seu display a cada
segundo. A classe que vai implementar o seu relgio precisa ser uma subclasse da classe Applet
para 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) {
Pgina

47

Apostila de Java

Grupo PET - Informtica


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

}
}

Observe a chamada ao construtor Thread(this, Clock). O construtor precisa receber


como primeiro argumento um objeto que implemente a interface Runnable, este objeto que vai
fornecer o mtodo run() da thread clockThread.
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 thread
clockThread, caso contrrio, a thread vai continuar executando e consumindo recursos mesmo
depois 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 nova
thread inicializada.

7.4. Herdando de Thread x Implementando Runnable


Existem 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), use
Runnable. Entretanto, se voc est planejando apenas sobrepor o mtodo run(), e mais nenhum
outro mtodo de Thread, use Runnable. Classes no devem herdar de outras classes, a menos que o
programador pretenda modificar ou aprimorar o comportamento fundamental da classe.

Pgina

48

Apostila de Java

Grupo PET - Informtica

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

":"

Pgina

49

Apostila de Java

Grupo PET - Informtica

8. Procure Saber Mais Sobre


8.1. URL
Para aqueles que gostariam de interligar suas Applets com outros recursos da Internet, o
Java contm classes especificas para isto.

8.2. Fila, Pilha, Tabela Hash


A maioria das estruturas abstratas de dados j esto implementadas no Java, veja as
bibliotecas contidas em java.util.

8.3. Javadoc
Fazer 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/Debugao


Alm 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 de
projeto, contm um poderoso.
Borland Latte:
O Latte est ainda em desenvolvimento pela Borland. Este ambiente est sendo
desenvolvido totalmente em Java, isto vai possibilitar a Borland vender o Latte para todas as
plataformas.
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.

Pgina

50

Apostila de Java

Grupo PET - Informtica

Referncias Bibliogrficas
ALCANTARA , Andreia Almeida. Anais da XV JAI - Minicurso Java. Departamento de Informtica
UFPE, 1996.
DAMASCENO JR, 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.

Pgina

51