Introdução aos Applets Vitor Brandi Junior Baseado na lição “Escrevendo Applets” do Java Tutorial
Sumário <ul><li>Introdução </li></ul><ul><li>O que são applets ? </li></ul><ul><li>Exemplo de um applet simples </li></ul>...
Introdução <ul><li>Um dos princípios originais do Java era que as aplicações fossem enviadas pela rede para o seu computad...
O que são applets ? <ul><li>É um programa escrito em Java </li></ul><ul><li>Em uma tradução livre, um applet pode ser ente...
Criando um applet <ul><li>Todo applet é implementado a partir da criação de uma subclasse da classe Applet. Hierarquicamen...
Exemplo Simples import java.awt.Graphics; import java.applet.*; public class TestApplet0 extends Applet { public void pain...
O ciclo de vida de um applet <ul><li>Todo applet, quando invocado, passa uma série de “momentos”, até que, eventualmente, ...
Mais ciclo de vida <ul><li>Caso o usuário vá para uma outra página (ou minimize a janela da página): </li></ul><ul><ul><li...
Métodos executados <ul><li>Para cada um dos estágios do ciclo de vida do applet existe um método associado, a saber: </li>...
Substituindo os métodos <ul><li>Cada um destes métodos está pré-definido na classe Applet </li></ul><ul><li>O procedimento...
Exemplo: import java.applet.Applet; import java.awt.Graphics; public class Ciclo extends Applet { public void init() { Sys...
Substituindo o método init() <ul><li>Nem todos os métodos precisam ser substituídos, principalmente em applets muito simpl...
Substituindo  start()  e  stop() <ul><li>O método  start() :  </li></ul><ul><ul><li>qualquer applet que faça alguma coisa ...
O método  destroy() <ul><li>Não é muito comum a substituição do método  destroy()  uma vez que é usual que o próprio métod...
Desenhando no applet <ul><li>Toda rotina de impressão em tela está colocada dentro do método  paint() </li></ul><ul><li>El...
Exemplo mais completo import java.applet.*; import java.awt.*; public class AnimacaoSimples extends Applet implements Runn...
Exemplo mais completo public void start()   { if (animacao == null)  {  animacao = new Thread(this);  animacao.start();  }...
Tratamento de eventos <ul><li>Applets tratam eventos como qualquer aplicação Java </li></ul><ul><li>No entanto,é recomendá...
Exemplo import java.awt.*; import java.applet.*; public class Circ extends Applet { int xOrig, yOrig; int primVez = 0; pub...
Usando componentes de GUI <ul><li>Como qualquer aplicação Java, também os applets podem conter componentes de interação co...
Exemplo de interface import java.awt.*; import java.applet.*; public class GUI extends Applet { Frame janela; public void ...
Outro exemplo de interface import java.awt.*; import java.applet.*; public class d extends Applet { Panel p1,p2,p3,p0; Cho...
Restrições dos applets <ul><li>Por razões de segurança (uma vez que são carregados de um servidor e executados na máquina ...
O que eles não podem... <ul><li>É proibido aos applets: </li></ul><ul><ul><li>carregar bibliotecas ou definir métodos nati...
Além disso... <ul><li>As janelas criadas por um applet possuem um estilo diferente de apresentação. Ex: </li></ul>
O que eles podem fazer... <ul><li>É permitido aos applets: </li></ul><ul><ul><li>conectarem-se ao host de onde foram carre...
Executando os applets <ul><li>Para rodar um applet é necessário adicioná-lo à uma página HTML </li></ul><ul><li>para isto ...
A tag <applet> <ul><li>É importante lembrar que: </li></ul><ul><li>o arquivo .class tem de estar no mesmo diretório do arq...
A sintaxe da tag <applet> <ul><li>A sintaxe completa da tag é:  </li></ul><ul><li><APPLET </li></ul><ul><li>[CODEBASE = co...
Explicando... <ul><li>CODEBASE = codebaseURL   </li></ul><ul><ul><li>opcional, especifica um caminho alternativo para se e...
Mais explicações... <ul><li>WIDTH = pixels / HEIGHT = pixels   </li></ul><ul><ul><li>obrigatórios, definem o tamanho inici...
Ainda mais explicações... <ul><li>< PARAM NAME = appletParameter1  VALUE = value >   </li></ul><ul><ul><li>opcional(ais), ...
Exemplo <ul><li>CodeBase:  </li></ul><ul><ul><li><APPLET CODE=Simple.class </li></ul></ul><ul><ul><li>CODEBASE=&quot;examp...
Mais exemplos <APPLET CODE=&quot;Animator.class&quot; WIDTH=460 HEIGHT=160 ALT=”Se você rodasse essse applet, estaria vend...
Recuperando parâmetros import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class TestApplet3 ext...
Upcoming SlideShare
Loading in …5
×

Applets

1,338 views
1,214 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,338
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Applets

  1. 1. Introdução aos Applets Vitor Brandi Junior Baseado na lição “Escrevendo Applets” do Java Tutorial
  2. 2. Sumário <ul><li>Introdução </li></ul><ul><li>O que são applets ? </li></ul><ul><li>Exemplo de um applet simples </li></ul><ul><li>O ciclo de vida de um applet </li></ul><ul><li>Substituindo os métodos de um applet </li></ul><ul><li>Exemplos </li></ul><ul><li>Tratamento de eventos </li></ul><ul><li>Componentes de interface gráfica </li></ul><ul><li>Restrições de segurança </li></ul><ul><li>Executando applets </li></ul>
  3. 3. Introdução <ul><li>Um dos princípios originais do Java era que as aplicações fossem enviadas pela rede para o seu computador </li></ul><ul><li>Infelizmente isto ainda não se materializou por causa de problemas de infra-estrutura e compatibilidade entre os sistemas </li></ul><ul><li>de qualquer modo, para dar conta desta necessidade a linguagem Java suporta, desde sempre, os applets </li></ul>
  4. 4. O que são applets ? <ul><li>É um programa escrito em Java </li></ul><ul><li>Em uma tradução livre, um applet pode ser entendido como um mini-aplicativo </li></ul><ul><li>Diferente de um aplicativo “normal”, ele é inicializado a partir de uma página HTML, ou seja, </li></ul><ul><li>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 </li></ul>
  5. 5. Criando um applet <ul><li>Todo applet é implementado a partir da criação de uma subclasse da classe Applet. Hierarquicamente: </li></ul>
  6. 6. Exemplo Simples import java.awt.Graphics; import java.applet.*; public class TestApplet0 extends Applet { public void paint(Graphics g) { g.drawString(&quot;Oi mundo&quot;, 5, 50); } }
  7. 7. O ciclo de vida de um applet <ul><li>Todo applet, quando invocado, passa uma série de “momentos”, até que, eventualmente, seja destruído. </li></ul><ul><li>Este ciclo de vida começa assim: </li></ul><ul><ul><li>uma instância da classe que estende Applet é criada </li></ul></ul><ul><ul><li>o applet inicializa-se a si próprio </li></ul></ul><ul><ul><li>o applet começa a rodar </li></ul></ul>
  8. 8. Mais ciclo de vida <ul><li>Caso o usuário vá para uma outra página (ou minimize a janela da página): </li></ul><ul><ul><li>o applet é parado </li></ul></ul><ul><li>Quando o usuário retorna à página (ou maximiza a janela): </li></ul><ul><ul><li>o applet é novamente iniciado </li></ul></ul><ul><li>Assim que o usuário fecha o browser: </li></ul><ul><ul><li>o applet para </li></ul></ul><ul><ul><li>em seguida executa uma limpeza final, em preparação para ser destruído </li></ul></ul>
  9. 9. Métodos executados <ul><li>Para cada um dos estágios do ciclo de vida do applet existe um método associado, a saber: </li></ul><ul><ul><li>init() : inicializa o applet toda vez que ele é invocado (ou reinvocado) </li></ul></ul><ul><ul><li>start() : põe o applet em execução </li></ul></ul><ul><ul><li>stop() : para a execução do applet </li></ul></ul><ul><ul><li>destroy() : é chamado toda vez que o applet vai ser destruído (permitindo executar a tal limpeza final em preparação para destruição) </li></ul></ul>
  10. 10. Substituindo os métodos <ul><li>Cada um destes métodos está pré-definido na classe Applet </li></ul><ul><li>O procedimento usual então é substituir (override) um ou mais destes métodos quando da construção de um novo applet </li></ul><ul><li>Isto permite que este novo applet execute tarefas específicas à ele toda vez que for inicializado, iniciado, parado ou destruído. Exemplo: </li></ul>
  11. 11. Exemplo: import java.applet.Applet; import java.awt.Graphics; public class Ciclo extends Applet { public void init() { System.out.println(&quot;inicio!&quot;); } public void start() { System.out.println(&quot;inicializacao!&quot;); } public void stop() { System.out.println(&quot;interrupcao!&quot;); } public void destroy() { System.out.println(&quot;destruicao!&quot;); } public void paint(Graphics g) { System.out.println(&quot;pintura!&quot;); } }
  12. 12. Substituindo o método init() <ul><li>Nem todos os métodos precisam ser substituídos, principalmente em applets muito simples </li></ul><ul><li>No entanto, é normal a substituição, por exemplo, do método init() : </li></ul><ul><ul><li>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 </li></ul></ul>
  13. 13. Substituindo start() e stop() <ul><li>O método start() : </li></ul><ul><ul><li>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 </li></ul></ul><ul><li>O método stop() : </li></ul><ul><ul><li>a maioria dos applets que substituem o start() também o fazem com o stop() </li></ul></ul><ul><ul><li>ele é útil para economizar recursos quando o usuário não está “prestando atenção” </li></ul></ul><ul><ul><li>p. ex., em um applet que exibe animações, elas devem ser paradas quando a janela está minimizada </li></ul></ul>
  14. 14. O método destroy() <ul><li>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 </li></ul><ul><li>Eventualmente, se ainda algum recurso adicional precise ser liberado, isto deve ser feito através da substituição do método destroy() </li></ul>
  15. 15. Desenhando no applet <ul><li>Toda rotina de impressão em tela está colocada dentro do método paint() </li></ul><ul><li>Ele e o método update() podem ser substituídos: </li></ul><ul><ul><li>paint : método básico para apresentação de informações na janela do applet </li></ul></ul><ul><ul><li>update : a chamada a este método ocasiona também uma subsequente chamada ao método paint </li></ul></ul>
  16. 16. Exemplo mais completo import 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(), &quot;F5&quot; + i + &quot;AULA3.jpg&quot;); } public void paint(Graphics g) { g.drawImage(imagens[conta++], 1, 1, this); if (conta == frames) conta = 0; }
  17. 17. 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; } } }
  18. 18. Tratamento de eventos <ul><li>Applets tratam eventos como qualquer aplicação Java </li></ul><ul><li>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 </li></ul>
  19. 19. Exemplo import 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; } }
  20. 20. Usando componentes de GUI <ul><li>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. </li></ul><ul><li>Exemplo: </li></ul>
  21. 21. Exemplo de interface import java.awt.*; import java.applet.*; public class GUI extends Applet { Frame janela; public void init() { add(new Button(&quot;Abre Janela&quot;)); add(new Button(&quot;Fecha Janela&quot;)); janela = new Frame(&quot;Uma Janela PopUp&quot;); 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(&quot;Abre Janela&quot;)) { if (!janela.isShowing()) janela.show(); } else if (label.equals(&quot;Fecha Janela&quot;)) { if (janela.isShowing()) janela.hide(); } } return true; } // metodo action } // classe GUI
  22. 22. Outro exemplo de interface import 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(&quot;Option 1&quot;); c1.addItem(&quot;Option 2&quot;); p1.add(c1); p2 = new myPanel(new Color(0).blue,new FlowLayout(),100, 100); c2 = new Choice(); c2.addItem(&quot;Option A&quot;); c2.addItem(&quot;Option B&quot;); c2.addItem(&quot;Option C&quot;); 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(&quot;First card&quot;, p1); p0.add(&quot;2nd card&quot;, p2); p0.add(&quot;3rd card&quot;, p3); add(b1 = new Button(&quot;card 1&quot;)); add(b2 = new Button(&quot;card 2&quot;)); add(b3 = new Button(&quot;card 3&quot;)); }
  23. 23. Restrições dos applets <ul><li>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. </li></ul><ul><li>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: </li></ul>
  24. 24. O que eles não podem... <ul><li>É proibido aos applets: </li></ul><ul><ul><li>carregar bibliotecas ou definir métodos nativos </li></ul></ul><ul><ul><li>ler ou gravar arquivos na máquina que os estão executando. </li></ul></ul><ul><ul><li>efetuar conexões de rede a não ser com o servidor de onde ele foi carregado </li></ul></ul><ul><ul><li>carregar qualquer programa na máquina que os estão executando. </li></ul></ul><ul><ul><li>não pode ler propriedades do sistema </li></ul></ul>
  25. 25. Além disso... <ul><li>As janelas criadas por um applet possuem um estilo diferente de apresentação. Ex: </li></ul>
  26. 26. O que eles podem fazer... <ul><li>É permitido aos applets: </li></ul><ul><ul><li>conectarem-se ao host de onde foram carregados </li></ul></ul><ul><ul><li>exibir novas páginas HTML </li></ul></ul><ul><ul><li>invocar métodos públicos de outros applets que estão na mesma página </li></ul></ul><ul><ul><li>caso tenham sido carregados a partir da própria máquina do cliente, eles não sofrem qualquer tipo de restrição de acesso </li></ul></ul>
  27. 27. Executando os applets <ul><li>Para rodar um applet é necessário adicioná-lo à uma página HTML </li></ul><ul><li>para isto utiliza-se a tag <applet> </applet> </li></ul><ul><li>a sintaxe básica desta tag é: </li></ul><ul><li><APPLET </li></ul><ul><li>CODE=AppletSubclass.class </li></ul><ul><li>WIDTH=y HEIGHT=x> </li></ul><ul><li></APPLET> </li></ul><ul><li>o JDK provê uma ferramenta ( appletviewer.exe ), que permite executar applets. Ela é útil na fase de teste dos applets </li></ul>
  28. 28. A tag <applet> <ul><li>É importante lembrar que: </li></ul><ul><li>o arquivo .class tem de estar no mesmo diretório do arquivo .html </li></ul><ul><li>ou então deve-se especificar o pacote dentro do qual se encontra o arquivo .class </li></ul><ul><li>os parâmetros width e height especificam o tamanho do retângulo dentro do qual o applet será exibido </li></ul><ul><li>existem muitas opções para a tag <applet> </li></ul>
  29. 29. A sintaxe da tag <applet> <ul><li>A sintaxe completa da tag é: </li></ul><ul><li><APPLET </li></ul><ul><li>[CODEBASE = codebaseURL] </li></ul><ul><li>CODE = appletFile </li></ul><ul><li>[ALT = alternateText] </li></ul><ul><li>[NAME = appletInstanceName] </li></ul><ul><li>WIDTH = pixels </li></ul><ul><li>HEIGHT = pixels </li></ul><ul><li>[ALIGN = alignment] </li></ul><ul><li>[VSPACE = pixels] </li></ul><ul><li>[HSPACE = pixels] </li></ul><ul><li>> </li></ul><ul><li>[< PARAM NAME = appletParameter1 VALUE = value >] </li></ul><ul><li>[< PARAM NAME = appletParameter2 VALUE = value >] </li></ul><ul><li>. . . </li></ul><ul><li>[alternateHTML] </li></ul><ul><li></APPLET> </li></ul>
  30. 30. Explicando... <ul><li>CODEBASE = codebaseURL </li></ul><ul><ul><li>opcional, especifica um caminho alternativo para se encontrar o arquivo .class (diferente do </li></ul></ul><ul><li>CODE = appletFile </li></ul><ul><ul><li>obrigatório, especifica o nome do arquivo .class a ser executado </li></ul></ul><ul><li>ALT = alternateText </li></ul><ul><ul><li>opcional, especifica o texto que deve ser exibido se o browser entende a tag mas não consegue executar applets </li></ul></ul><ul><li>NAME = appletInstanceName </li></ul><ul><ul><li>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) </li></ul></ul>
  31. 31. Mais explicações... <ul><li>WIDTH = pixels / HEIGHT = pixels </li></ul><ul><ul><li>obrigatórios, definem o tamanho inicial do retângulo dentro do qual o applet será executado </li></ul></ul><ul><li>ALIGN = alignment </li></ul><ul><ul><li>opcional, define o alinhamento applet (semelhante à tag <img>, que aceita left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom ). </li></ul></ul><ul><li>VSPACE = pixels / HSPACE = pixels </li></ul><ul><ul><li>opcionais, definem espaçamento acima, abaixo, a esquerda e a direita do applet </li></ul></ul>
  32. 32. Ainda mais explicações... <ul><li>< PARAM NAME = appletParameter1 VALUE = value > </li></ul><ul><ul><li>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() </li></ul></ul><ul><li>alternateHTML </li></ul><ul><ul><li>ú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 </li></ul></ul>
  33. 33. Exemplo <ul><li>CodeBase: </li></ul><ul><ul><li><APPLET CODE=Simple.class </li></ul></ul><ul><ul><li>CODEBASE=&quot;example/&quot; </li></ul></ul><ul><ul><li>WIDTH=500 HEIGHT=20> </li></ul></ul><ul><ul><li></APPLET> </li></ul></ul>
  34. 34. Mais exemplos <APPLET CODE=&quot;Animator.class&quot; WIDTH=460 HEIGHT=160 ALT=”Se você rodasse essse applet, estaria vendo uma animação <PARAM NAME=&quot;imageSource&quot; VALUE=&quot;images/Beans&quot;> <PARAM NAME=&quot;backgroundColor&quot; VALUE=&quot;0xc0c0c0&quot;> <PARAM NAME=&quot;endImage&quot; VALUE=10> <PARAM NAME=&quot;soundSource&quot; VALUE=&quot;audio&quot;> <PARAM NAME=&quot;soundtrack&quot; VALUE=&quot;spacemusic.au&quot;> <PARAM NAME=&quot;pause&quot; VALUE=200> Seu browser não consegiue entender a tag &lt;APPLET&gt; </APPLET> <HTML> <HEAD> <TITLE>Oi!</TITLE> </HEAD> <BODY> <P> <APPLET CODE=&quot;TestApplet3.class&quot; WIDTH=300 HEIGHT=200> <PARAM NAME=nome VALUE=&quot;UNIMEP&quot;> Alo para voce !!! </APPLET> </BODY> </HTML>
  35. 35. Recuperando parâmetros import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class TestApplet3 extends java.applet.Applet { Font f = new Font(&quot;TimesRoman&quot;,Font.BOLD,36); String nome; public void init() { this.nome = getParameter(&quot;nome&quot;); if (this.nome == null) this.nome = &quot;Vitor&quot;; this.nome = &quot;Oi &quot; + nome + &quot;!&quot;; } public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString(this.nome, 5, 50); } }

×