![]() |
Introdução a Applets |
|
![]() |
Por Francisco Demontiê dos Santos Junior(demontie@dsc.ufcg.edu.br) |
Você já viu pequenos programas Java embutidos em páginas HTML? Ficou curioso sobre como desenvolver esses aplicativos? No PETNews deste mês você aprenderá um pouco sobre Applets. |
Um Applet é um pequeno software que é executado, geralmente na forma de um plug-in, dentro de um programa maior. No âmbito de Java, os Applets são programas que podem ser facilmente inseridos em páginas HTML (ou seja, o programa é executado no contexto de um web browser). Esse recurso pode tornar sua página web mais interativa e trazer funcionalidades que o HTML não possui. Os Applets, geralmente, utilizam a biblioteca gráfica AWT, o que os torna bastante poderosos para o desenvolvimento de pequenas aplicações (sejam elas simples ou complexas). Para iniciar o desenvolvimento de applets, vamos ver um clássico "Hello World". import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { @Override public void paint(Graphics g) { g.drawString("Hello World!", 50, 50); } } Note que, como todo programa Java, os applets devem possuir pelo menos uma classe pública para que possam ser executados. A classe principal dos applets deve estender a classe Applet do pacote java.applet. Agora, vamos entender esse primeiro exemplo passo a passo. As duas primeiras linhas importam as classes necessárias para a compilação do programa: java.applet.Applet e java.awt.Graphics. A primeira contém os atributos e métodos necessários para um applet simples; a segunda (uma classe da biblioteca gráfica AWT) é usada para exibir objetos na tela, desde retas e polígonos a imagens. Nesse exemplo, a classe HelloWorld possui apenas um método, chamado paint. Esse é responsável por exibir os componentes gráficos na tela. Aqui, usamos o método drawString, da classe java.awt.Graphics, que recebe uma String para ser exibida, e dois inteiros representando a posição. O resultado desse exemplo é um retângulo branco com o texto "Hello World!", como na applet a seguir. Agora que já tivemos um primeiro contato com a programação de applets, vamos partir para um exemplo um pouco mais sofisticado. Nesse exemplo, iremos construir um simples joguinho de "ping-pong", cujo objetivo é não deixar a bola cair. Observe o código abaixo. import java.applet.Applet; import java.awt.Color; import java.awt.Event; import java.awt.Graphics; public class PingPong extends Applet implements Runnable { // Applet private int larguraTela; private int alturaTela; // Cores private final Color preto = new Color(0,0,0); private final Color azul = new Color(0,0,155); private final Color cinza = new Color(200,200,200); // Bola private final int BOLA_RAIO = 30; private int bolaX; private int bolaY; private int moveBolaY; private int moveBolaX; // Para o movimento da bola Thread t; boolean movendo; // Barra private int barraX; private int barraY; private final int BARRA_W = 80; private final int BARRA_H = 15; @Override public void init() { setBackground(cinza); larguraTela = this.getWidth(); alturaTela = this.getHeight(); barraX = larguraTela/2 - BARRA_W/2; barraY = alturaTela - BARRA_H; bolaX = larguraTela/2 - BOLA_RAIO/2; bolaY = BOLA_RAIO/2; moveBolaX = 2; moveBolaY = 2; t = new Thread(this); movendo = false; } @Override public void paint(Graphics g) { g.setColor(azul); g.fillArc(bolaX, bolaY, BOLA_RAIO, BOLA_RAIO, 0, 360); g.setColor(preto); g.fillRect(barraX, barraY, BARRA_W, BARRA_H); } @Override public boolean keyDown(Event e, int tecla) { if (tecla == Event.RIGHT){ moveDireita(); } if (tecla == Event.LEFT){ moveEsquerda(); } if (!movendo){ movendo = true; t.start(); } return true; } private void moveDireita(){ if (barraX + BARRA_W < larguraTela) barraX += 2; } private void moveEsquerda(){ if (barraX > 0) barraX -= 2; } private void moveBola(){ if (bolaY + BOLA_RAIO >= barraY && barraX <= bolaX + BOLA_RAIO && bolaX <= barraX + BARRA_W) moveBolaY *= -1; if (bolaY <= 0) moveBolaY *= -1; if (bolaX + BOLA_RAIO >= larguraTela) moveBolaX *= -1; if (bolaX <= 0) moveBolaX *= -1; bolaY += moveBolaY; bolaX += moveBolaX; } @Override public void run() { while (true) { moveBola(); repaint(); try { Thread.sleep(60); } catch (InterruptedException e) { e.printStackTrace(); } } } } Nesse exemplo, além de importar aquelas duas classes do exemplo anterior, importamos, também, as classes java.awt.Color e java.awt.Event. O primeiro é usado para setar cores de objetos e do background (aqui, utilizamos o construtor que recebe três parâmetros inteiros, entre 0 e 255, representando a quantidade de cada componente do sistema de cores RGB); o segundo é usado na captura de eventos em geral (como teclas pressionadas e movimentação do mouse). Agora vamos ter uma visão geral de cada método implementado nesse exemplo. No método init, da classe Applet, colocamos todo o código que deve ser rodado assim que o programa é inicializado. No exemplo, utilizamos esse método para mudar a cor de fundo, determinar as posições iniciais da bola e da barra, inicializar as variáveis de incremento de posição da bola e criar uma nova thread, que será utilizada para atualizar a posição da bola e redesenhar os objetos na tela com o método repaint (vide método run). O uso de thread se fez necessário pois precisamos atualizar a posição da bola independente dos eventos que ocorram. Por isso, a classe do exemplo implementa a interface Runnable. O método paint tem exatamente a mesma função que no exemplo anterior, a única diferença é que usamos outros dois métodos da classe java.awt.Graphics. São estes, fillArc e fillRect que desenham um círculo e um retângulo, respectivamente, preenchendo-os com a cor atual (definimos essas cores com uma chamada ao método setColor antes de desenhar cada objeto). Os movimentos da bola e da barra são feitos pelos métodos moveBola, para a bola, e moveEsquerda e moveDireita, para a barra. O método que movimenta a bola é chamado dentro de um laço no método run. A cada iteração do laço, os objetos na tela são redesenhados. Os métodos que movimentam a barra são chamados dependendo da tecla que foi pressionada. Para isso, implementamos o método keyDown. Note que, ao pressionar alguma das duas teclas, seta para a esquerda e seta para a direita, pela primeira vez, a thread é iniciada e o jogo começa. Confira, abaixo, o resultado do nosso segundo exemplo.
Por fim, podemos incluir um applet numa página HTML de uma forma bastante simples. Basta que compilemos a classe principal do aplicativo e utilizemos uma tag especial como mostrado a seguir. Como exercício, acrescente mais um jogador ao exemplo anterior (uma barra localizada no canto superior da tela e controlada pelas teclas 'a' e 'd') e exiba os pontos de cada um deles. |