Trabalhando com Applets

Prática em Laboratório

Objetivos:

1. Introduzindo Applets


Uma applet é uma pequena aplicação executada em uma janela de uma aplicação (browser/appletviewer). Tem por finalidade estender as funcionalidades de browsers, adicionando som, animação, etc., provenientes de fontes (URLs) locais ou remotas, sendo que cada página web (arquivo .html) pode conter uma ou mais applets.

O desenvolvimento ou não de programas em Java sob a forma de applets depende do objetivo da aplicação. Se por um lado a execução necessita de um navegador, por outro pode ser disponibilizada para execução via internet. Cabe ao projetista da aplicação definir a forma mais adequada para seu sistema.

Applets sempre executam nos clientes web, nunca nos servidores. Por esta razão a carga das classes pode levar algum tempo. Para definir programas Java que rodem no servidor, veja como construir servlets.

4 são os métodos que definem o ciclo de vida de uma applet:

Toda applet é uma aplicação gráfica, não existindo portanto applets “modo texto”. A principal diferença entre uma “Java application” e uma “applet” é o fato de que a janela base da aplicação é derivada a partir da classe Applet (ou JApplet) e não a partir da classe Frame. Além disso, a parte da aplicação que instancia a classe Applet e relaciona-a com o browser é padrão e, portanto, não precisa ser descrita. Desta forma, applets não possuem a função “main( )”.

O programa abaixo implementa uma applet muito simples.
 

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

public class Exemplo extends Applet{
 private int x,y,tam;

 public void init( ){
    x = 10;   y = 10; tam = 0;
  }
 public void start( ){
    tam += 5;
  }
 public void paint(Graphics g){
    g.setColor(new Color(200,123,212));
    g.fillRect(x,y,tam,10);
  }
 public void stop(){
 }
}

Execute a classe do exemplo acima com o auxílio do BlueJ. Experimente agora minimizar e maximizar a janela da applet diversas vezes e verifique o que acontece.

Também vimos que applets são aplicações desenvolvidas para serem executadas a partir de um browser e, portanto, devem ser incluídas em páginas web. O exemplo abaixo mostra uma applet e o arquivo html que a contém. Experimente...
 

Confucio.java Confucio.html
import java.applet.Applet;
import java.awt.*;
// Exibe um ditado de Confucio 
// do livro: Java Software Solutions:J. Lewis e W. Loftus
public class Confucio extends Applet{
 public void paint(Graphics pagina){
  pagina.drawString("Esqueça desaforos, nunca esqueça gentilezas.", 30,30);
  pagina.drawString("----Confúcio", 70,70);
 }//ditado
}// classe Confucio
<! Confucio.html>
<HTML>
<HEAD>
<TITTLE> CONFUCIO</TITLE>
</HEAD>
<BODY>
<H3>
<APPLET CODE="Confucio.class" WIDTH=300 HEIGHT=150>
</APPLET>
<HR>
</BODY>
</HTML>

Experimente também este outro exemplo:
 

MinhaApplet.java Teste.html
import java.awt.*;
import java.applet.*;

public class MinhaApplet extends Applet{ 

 public void init() {  // inicializacao
  setBackground(Color.white);
  /* outras cores predefinidas:black,blue,cyan,
     gray,darkGrey,ligthGrey,green,magenta,orange,
     pink,red,white,yellow */
  }

  public void paint(Graphics g) {//conteudo
   g.setColor(Color.red);
   g.drawString("Eu sou uma applet",25,45);
   g.setColor(Color.green);
   g.drawString("que desenha um retangulo",45,75);
   g.setColor(Color.orange);
   g.drawRect(200,50,30,40);
  }
}

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<TITTLE>
</head>
<body>
Pequena Aplica&ccedil;&atilde;o
<h3>
<applet CODE="MinhaApplet.class" WIDTH="323" HEIGHT="144"></applet>
<hr></h3>

</body>
</html>

Agora, gere um arquivo .html para exibir as duas applets acima ao mesmo tempo e carregue em um browser (Netscape, Explorer ou outro).

Importante: o ambiente de execução de Java fica bloqueado aguardando o final da execução. A janela AppletViewer deve ser fechada (X) para terminar a execução, enquanto que a execução com Browser pode ser feita  de 2 formas:

2. Applets e Swing ?

Você deve ter percebido que não usamos componentes do Swing. O motivo é simples: atualmente, os navegadores oferecem (nativamente) apenas uma JVM compatível com a versão 1.1 do JDK. Swing é uma extensão da biblioteca de classes (por isso o javax.swing), portanto não existe no 1.1. Somente o appletviewer executa diretamente applets Swing (por que será ...)

Porém, há uma maneira de utilizar Swing e recursos do JDK 1.2/1.3/1.4 em um applet: a Sun criou um plug-in para os navegadores (Java Plug-in), isto é, um módulo que é instalado junto ao navegador e adiciona funcionalidade a este. Outros exemplos de plug-ins que todo mundo conhece: Macromedia Flash, Quicktime, RealPlayer, etc.

O único problema com o Java Plug-in é que temos que alterar a chamada para o applet, pois se usarmos a tag <applet>, o navegador ativará a sua própria JVM.

Como a nova sintaxe é extremamente obscura (e varia de navegador para navegador, argh), a Sun (felizmente) disponibilizou um programinha (em Java, obviamente) para converter páginas HTML com tags <applet>. Este programa é chamado de HTML Java Converter.

Exercício:
  • A segunda tarefa da aula de hoje é instalar o HTML Java Converter. Para isso, baixe o zip deste link local e descompacte-o para um lugar seguro (pode ser dentro do JDK mesmo). Não esqueça de preservar os diretórios na descompactação!
  • Para executá-lo, clique duas vezes no arquivo HTMLConverter.bat
  • A interface é bastante simples, ele simplesmente converte TODOS os arquivos HTML presentes em um diretório, e salva cópias de segurança dos arquivos originais.
  • Verifique que é possível gerar código HTML que será suportado no IE, Netscape ou em ambos. Inclusive para outras plataformas (Mac, Linux)!
  • Experimente com os applets que você digitou anteriormente. Ah, você não digitou ? Que pena, vai ter que digitar agora...

Se você não reparar muito na bagunça que ficou o seu arquivo HTML, esse método é muito prático e transparente ao usuário final. Basta que ele tenha instalado o Java Plug-in, obviamente. Por esse motivo, às vezes as pessoas procuram escrever applets usando apenas AWT, para que se possa executá-los diretamente no navegador, sem instalar mais nada...

Porém, para que se utilize efetivamente o Java Plug-in, é necessário alterar o código dos applets, fazendo com que estes sejam derivados de JApplet, e não de Applet. Assim como nos JPanels, um JApplet tem um Container, acessado pelo método getContentPane().

Exercício:
  • A terceira tarefa da aula de hoje é converter uma aplicação para applet
  • Para isso, dê uma olhada nesta página, parte do Java Tutorial. Lá você encontrará diversos exemplos de applets convertidos para Swing, todos com código fonte. Execute alguns e verifique a funcionalidade.
  • Há também o link local para a mesma página, se a rede estiver muito lenta... Tenha em mente que esta página local não está atualizada!
  • A seguir, escolha um exemplo dentre os que fizemos em aula e tente convertê-lo para applet Swing.
  • Sugestões: applet para desenhar e arrastar bolinhas, applet para testar componentes de interface (JButton, JList, etc) ou até mesmo o trabalho 3 (é claro que você já fez parte da interface, certo ?)
Não esqueça: é fundamental encerrar a aula de hoje 
  • sabendo manipular applets sem dificuldades;
  • com alguma aplicação completamente convertida em uma applet.