applets

35
Introdução aos Applets Vitor Brandi Junior Baseado na lição “Escrevendo Applets” do Java Tutorial

Upload: emsnews

Post on 04-Jun-2015

1.116 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Applets

Introdução aos Applets

Vitor Brandi Junior

Baseado na lição “Escrevendo Applets” do Java Tutorial

Page 2: Applets

Sumário• Introdução• O que são applets ?• Exemplo de um applet simples• O ciclo de vida de um applet• Substituindo os métodos de um applet• Exemplos• Tratamento de eventos• Componentes de interface gráfica• Restrições de segurança• Executando applets

Page 3: Applets

Introdução• Um dos princípios originais do Java era

que as aplicações fossem enviadas pela rede para o seu computador

• Infelizmente isto ainda não se materializou por causa de problemas de infra-estrutura e compatibilidade entre os sistemas

• de qualquer modo, para dar conta desta necessidade a linguagem Java suporta, desde sempre, os applets

Page 4: Applets

O que são applets ?• É um programa escrito em Java• Em uma tradução livre, um applet pode

ser entendido como um mini-aplicativo• Diferente de um aplicativo “normal”, ele é

inicializado a partir de uma página HTML, ou seja,

• caso uma página HTML invocada por um cliente contenha uma referência à um applet, este será carregado e executado pelo navegador toda vez que a página for inicializada

Page 5: Applets

Criando um applet• Todo applet é implementado a partir da

criação de uma subclasse da classe Applet. Hierarquicamente:

Page 6: Applets

Exemplo Simplesimport java.awt.Graphics;import java.applet.*;

public class TestApplet0 extends Applet{ public void paint(Graphics g) { g.drawString("Oi mundo", 5, 50); }}

Page 7: Applets

O ciclo de vida de um applet

• Todo applet, quando invocado, passa uma série de “momentos”, até que, eventualmente, seja destruído.

• Este ciclo de vida começa assim:

– uma instância da classe que estende Applet é criada

– o applet inicializa-se a si próprio

– o applet começa a rodar

Page 8: Applets

Mais ciclo de vida• Caso o usuário vá para uma outra página

(ou minimize a janela da página):– o applet é parado

• Quando o usuário retorna à página (ou maximiza a janela):– o applet é novamente iniciado

• Assim que o usuário fecha o browser:– o applet para– em seguida executa uma limpeza final,

em preparação para ser destruído

Page 9: Applets

Métodos executados• Para cada um dos estágios do ciclo de

vida do applet existe um método associado, a saber:– init(): inicializa o applet toda vez que

ele é invocado (ou reinvocado)– start(): põe o applet em execução– stop(): para a execução do applet– destroy(): é chamado toda vez que o

applet vai ser destruído (permitindo executar a tal limpeza final em preparação para destruição)

Page 10: Applets

Substituindo os métodos• Cada um destes métodos está pré-

definido na classe Applet

• O procedimento usual então é substituir (override) um ou mais destes métodos quando da construção de um novo applet

• Isto permite que este novo applet execute tarefas específicas à ele toda vez que for inicializado, iniciado, parado ou destruído. Exemplo:

Page 11: Applets

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

public class Ciclo extends Applet{ public void init() { System.out.println("inicio!"); } public void start() { System.out.println("inicializacao!"); } public void stop() { System.out.println("interrupcao!"); } public void destroy() { System.out.println("destruicao!"); } public void paint(Graphics g) { System.out.println("pintura!"); }}

Page 12: Applets

Substituindo o método init()

• Nem todos os métodos precisam ser substituídos, principalmente em applets muito simples

• No entanto, é normal a substituição, por exemplo, do método init():– o método init()é útil para a definição de

ações que devem ser executadas uma única vez. Este método guarda muitas semelhanças com uma construtora da classe

Page 13: Applets

Substituindo start() e stop()• O método start():

– qualquer applet que faça alguma coisa após a sua inicialização deve substituir o método start(). Por exemplo, este é um bom lugar para se iniciar a execução de eventuais threads

• O método stop():– a maioria dos applets que substituem o start()

também o fazem com o stop()– ele é útil para economizar recursos quando o

usuário não está “prestando atenção”– p. ex., em um applet que exibe animações, elas

devem ser paradas quando a janela está minimizada

Page 14: Applets

O método destroy()• Não é muito comum a substituição do

método destroy() uma vez que é usual que o próprio método stop(), que é chamado antes da destruição do applet, realize as tarefas necessárias para destruição do applet

• Eventualmente, se ainda algum recurso adicional precise ser liberado, isto deve ser feito através da substituição do método destroy()

Page 15: Applets

Desenhando no applet• Toda rotina de impressão em tela está

colocada dentro do método paint()• Ele e o método update() podem ser

substituídos:– paint: método básico para apresentação

de informações na janela do applet

– update: a chamada a este método ocasiona também uma subsequente chamada ao método paint

Page 16: Applets

Exemplo mais completoimport java.applet.*;import java.awt.*;public class AnimacaoSimples extends Applet implements Runnable { private Thread animacao; private Image imagens[]; private int frames = 5; private int conta = 0; public void init() { imagens = new Image[frames]; for (int i = 0; i < frames; i++) imagens[i] = getImage(getDocumentBase(), "F5" + i + "AULA3.jpg"); } public void paint(Graphics g) { g.drawImage(imagens[conta++], 1, 1, this); if (conta == frames) conta = 0; }

Page 17: Applets

Exemplo mais completo public void start() { if (animacao == null) { animacao = new Thread(this); animacao.start(); } } public void stop() { if (animacao != null){ animacao.stop(); animacao = null; } } public void run() { while (isActive()) { try { repaint(); Thread.sleep(500); } catch (InterruptedException e) {} animacao = null; } } }

Page 18: Applets

Tratamento de eventos• Applets tratam eventos como qualquer

aplicação Java

• No entanto,é recomendável que o tratamento seja destes eventos ainda seja feito ao estilo do JDK 1.0 (handleEvent(), action(), mouseDown() etc.), pois muitos browsers antigos ainda não suportam as versões mais recentes do JDK

Page 19: Applets

Exemploimport java.awt.*;import java.applet.*;public class Circ extends Applet { int xOrig, yOrig; int primVez = 0; public boolean handleEvent(Event e) { if (e.id == Event.MOUSE_DOWN) { Graphics g = getGraphics(); if (primVez == 0) { primVez = 1; xOrig = e.x; yOrig = e.y; } else g.drawLine(xOrig, yOrig, e.x, e.y); xOrig = e.x; yOrig = e.y; return true; } return false; } }

Page 20: Applets

Usando componentes de GUI

• Como qualquer aplicação Java, também os applets podem conter componentes de interação com o usuário, como por exemplo, Button Checkbox, TextField, TextArea, Label, List, Choice, Canvas, Menu, Panel etc.

• Exemplo:

Page 21: Applets

Exemplo de interfaceimport java.awt.*;import java.applet.*;public class GUI extends Applet { Frame janela; public void init() { add(new Button("Abre Janela")); add(new Button("Fecha Janela")); janela = new Frame("Uma Janela PopUp"); janela.resize(250,150); janela.show(); } public boolean action(Event evt, Object arg) { if (evt.target instanceof Button) { String label = (String)arg; if (label.equals("Abre Janela")) { if (!janela.isShowing()) janela.show(); } else if (label.equals("Fecha Janela")) { if (janela.isShowing()) janela.hide();

} } return true; } // metodo action} // classe GUI

Page 22: Applets

Outro exemplo de interfaceimport java.awt.*;import java.applet.*;public class d extends Applet { Panel p1,p2,p3,p0; Choice c1,c2; Button b1,b2,b3; TextField t1; public void init() { p1 = new myPanel(new Color(0).red,new FlowLayout(),100,100); Choice c1 = new Choice(); c1.addItem("Option 1"); c1.addItem("Option 2"); p1.add(c1); p2 = new myPanel(new Color(0).blue,new FlowLayout(),100, 100); c2 = new Choice(); c2.addItem("Option A"); c2.addItem("Option B"); c2.addItem("Option C"); p2.add(c2); p3 = new myPanel(new Color(0).black,new FlowLayout(),100, 100); t1 = new TextField(8); t1.setBackground(new Color(0).white); p3.add(t1); p0 = new myPanel(new Color(0).white,new CardLayout(0,0),100,100); setLayout(new FlowLayout()); add(p0); p0.add("First card", p1); p0.add("2nd card", p2); p0.add("3rd card", p3); add(b1 = new Button("card 1")); add(b2 = new Button("card 2")); add(b3 = new Button("card 3")); }

Page 23: Applets

Restrições dos applets• Por razões de segurança (uma vez que

são carregados de um servidor e executados na máquina do cliente), os applets não podem realizar uma série de operações.

• Estas restrições são garantidas pelo fato dos applets rodarem em cima do browser, que por sua vez provê uma sandbox (literalmente, “caixa de areia”), que impede que o applet execute esta série de operações. Ex:

Page 24: Applets

O que eles não podem...• É proibido aos applets:

– carregar bibliotecas ou definir métodos nativos

– ler ou gravar arquivos na máquina que os estão executando.

– efetuar conexões de rede a não ser com o servidor de onde ele foi carregado

– carregar qualquer programa na máquina que os estão executando.

– não pode ler propriedades do sistema

Page 25: Applets

Além disso...• As janelas criadas por um applet

possuem um estilo diferente de apresentação. Ex:

Page 26: Applets

O que eles podem fazer...• É permitido aos applets:

– conectarem-se ao host de onde foram carregados

– exibir novas páginas HTML– invocar métodos públicos de outros

applets que estão na mesma página– caso tenham sido carregados a partir da

própria máquina do cliente, eles não sofrem qualquer tipo de restrição de acesso

Page 27: Applets

Executando os applets• Para rodar um applet é necessário adicioná-

lo à uma página HTML• para isto utiliza-se a tag <applet> </applet> • a sintaxe básica desta tag é:<APPLET CODE=AppletSubclass.class WIDTH=y HEIGHT=x></APPLET>

• o JDK provê uma ferramenta (appletviewer.exe), que permite executar applets. Ela é útil na fase de teste dos applets

Page 28: Applets

A tag <applet>• É importante lembrar que:• o arquivo .class tem de estar no mesmo

diretório do arquivo .html• ou então deve-se especificar o pacote

dentro do qual se encontra o arquivo .class • os parâmetros width e height especificam

o tamanho do retângulo dentro do qual o applet será exibido

• existem muitas opções para a tag <applet>

Page 29: Applets

A sintaxe da tag <applet>• A sintaxe completa da tag é: <APPLET [CODEBASE = codebaseURL] CODE = appletFile [ALT = alternateText] [NAME = appletInstanceName] WIDTH = pixels HEIGHT = pixels [ALIGN = alignment] [VSPACE = pixels] [HSPACE = pixels]> [< PARAM NAME = appletParameter1 VALUE = value >] [< PARAM NAME = appletParameter2 VALUE = value >] . . . [alternateHTML]</APPLET>

Page 30: Applets

Explicando...• CODEBASE = codebaseURL

– opcional, especifica um caminho alternativo para se encontrar o arquivo .class (diferente do

• CODE = appletFile – obrigatório, especifica o nome do arquivo .class a ser

executado• ALT = alternateText

– opcional, especifica o texto que deve ser exibido se o browser entende a tag mas não consegue executar applets

• NAME = appletInstanceName – opcional, define um nome para a instância do applet,

através do qual é possível que outros applets na mesma página o identifiquem (e se comuniquem)

Page 31: Applets

Mais explicações...• WIDTH = pixels / HEIGHT = pixels

– obrigatórios, definem o tamanho inicial do retângulo dentro do qual o applet será executado

• ALIGN = alignment – opcional, define o alinhamento applet (semelhante

à tag <img>, que aceita left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom).

• VSPACE = pixels / HSPACE = pixels – opcionais, definem espaçamento acima, abaixo, a

esquerda e a direita do applet

Page 32: Applets

Ainda mais explicações...• < PARAM NAME = appletParameter1 VALUE = value > – opcional(ais), define parâmetros que são

passados da página HTML para o applet, que por sua vez os recupera através do método getParameter()

• alternateHTML – útil somente no caso de um browser que não

entende a tag <applet> e por isso a ignora, exibindo em seu lugar o texto aqui epecificado. Browsers que entendem a tag ignoram este texto

Page 33: Applets

Exemplo• CodeBase:

<APPLET CODE=Simple.class

CODEBASE="example/"

WIDTH=500 HEIGHT=20>

</APPLET>

Page 34: Applets

Mais exemplos<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160 ALT=”Se você rodasse essse applet, estaria vendo uma animação <PARAM NAME="imageSource" VALUE="images/Beans"> <PARAM NAME="backgroundColor" VALUE="0xc0c0c0"> <PARAM NAME="endImage" VALUE=10> <PARAM NAME="soundSource" VALUE="audio"> <PARAM NAME="soundtrack" VALUE="spacemusic.au"> <PARAM NAME="pause" VALUE=200> Seu browser não consegiue entender a tag &lt;APPLET&gt;</APPLET>

<HTML><HEAD><TITLE>Oi!</TITLE></HEAD><BODY><P><APPLET CODE="TestApplet3.class" WIDTH=300 HEIGHT=200><PARAM NAME=nome VALUE="UNIMEP">Alo para voce !!!</APPLET></BODY></HTML>

Page 35: Applets

Recuperando parâmetrosimport java.awt.Graphics;import java.awt.Font;import java.awt.Color;public class TestApplet3 extends java.applet.Applet{ Font f = new Font("TimesRoman",Font.BOLD,36); String nome;

public void init() { this.nome = getParameter("nome"); if (this.nome == null) this.nome = "Vitor"; this.nome = "Oi " + nome + "!"; }

public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString(this.nome, 5, 50); }}