/********************************************************************* banneri.java Mainos-banneri, jossa liikutetaan ja skaalataan kuvia applettipinnalla. Appletti on esimerkki grafiikan kaksoispuskuroinnista ja säikeistä. Appletti toimii myös linkkinä. Tekijä: Pekka Malmirae 2/1999 Muutoksia: Appletti päivitetty Java 1.1 -mukaiseksi: * Säikeiden käsittelyssä päivitetty turvallisemmaksi (poistettu deadlock-vaarat) 11/1999, Pekka Malmirae *********************************************************************/ import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.*; public class banner extends Applet implements Runnable { Thread saie = null; Image puskuriKuva; Graphics puskuri; Image java1, java2, java3, java4, java5, tausta; int vaihe, laskuri, java1Y, java2Y, java3X, leveys, korkeus, muuttuvaLeveys, muuttuvaKorkeus; boolean valke; public void init() { MediaTracker md = new MediaTracker(this); tausta = getImage(getDocumentBase(), "tausta.jpg"); java1 = getImage(getDocumentBase(), "java1.gif"); java2 = getImage(getDocumentBase(), "java2.gif"); java3 = getImage(getDocumentBase(), "java3.gif"); java4 = getImage(getDocumentBase(), "java4.gif"); java5 = getImage(getDocumentBase(), "java5.gif"); md.addImage(java1, 0); md.addImage(java2, 1); md.addImage(java3, 2); md.addImage(java4, 3); md.addImage(java5, 4); md.addImage(tausta, 5); try { md.waitForAll(); } catch(Exception e) {}; leveys = getSize().width; korkeus = getSize().height; muuttuvaLeveys = leveys; muuttuvaKorkeus = korkeus; puskuriKuva = createImage(leveys,korkeus); puskuri = puskuriKuva.getGraphics(); vaihe = 1; laskuri = 0; valke = false; java1Y = 0; java2Y = 0; java3X = 0; addMouseListener(new HiiriKuuntelee()); } public void start() { saie = new Thread(this); saie.start(); } public void stop() { saie = null; } public void run() { Thread tamaSaie = Thread.currentThread(); while (true) { // ensimmäinen kuva näytössä if ( vaihe == 1) { laskuri++; if (laskuri >= 50) { vaihe = 2; laskuri = 0; } } // ensimmäinen kuva liukuu pois näytöstä (alas) else if ( vaihe == 2) { java1Y += 3; if (java1Y >= korkeus) vaihe = 3; } // toinen kuva näytössä else if ( vaihe == 3) { laskuri++; if (laskuri >= 50) { vaihe = 4; laskuri = 0; } } // toinen kuva liukuu pois näytöstä (ylös) else if ( vaihe == 4) { java2Y -= 3; if (java2Y <= -1 * java2.getHeight(this)) vaihe = 5; } // kolmas kuva näytössä else if ( vaihe == 5) { laskuri++; if (laskuri >= 50) { vaihe = 6; laskuri = 0; } } // kolmas kuva liukuu vasemmalle else if ( vaihe == 6) { java3X -= 3; if (java3X <= -1 * java3.getWidth(this)) vaihe = 7; } // näytetään java4- ja java5-kuvia vuorotellen näytössä else if ( vaihe == 7) { laskuri++; if (laskuri%20 == 0) valke = !valke; if (laskuri >= 200) { vaihe = 8; java1Y = 0; laskuri=0; } } // skaalataan java5 niin että se häviää näytöstä else if (vaihe == 8) { muuttuvaLeveys -= 5; muuttuvaKorkeus -= 5; if (muuttuvaKorkeus < 5) { vaihe = 1; java2Y = 0; java3X = 0; muuttuvaLeveys = leveys; muuttuvaKorkeus = korkeus; } } repaint(); try { tamaSaie.sleep(30); } catch (InterruptedException e) {} } } public void update(Graphics g) { puskuri.drawImage(tausta,0,0,this); if (vaihe==8) { puskuri.drawImage(java1,0,0,this); puskuri.drawImage(java5, leveys/2 - muuttuvaLeveys/2, korkeus/2 - muuttuvaKorkeus/2, leveys/2 + muuttuvaLeveys/2, korkeus/2 + muuttuvaKorkeus/2, 0,0, leveys,korkeus,this); paint(g); return; } puskuri.drawImage(java5,0,0,this); if (valke) puskuri.drawImage(java4,0,0,this); puskuri.drawImage(java3,java3X,0,this); puskuri.drawImage(java2,0,java2Y,this); puskuri.drawImage(java1,0,java1Y,this); paint(g); } public void paint(Graphics g) { if (puskuriKuva!= null) g.drawImage(puskuriKuva, 0, 0, this); } class HiiriKuuntelee extends MouseAdapter { public void mousePressed(MouseEvent me) { try { URL osoite = new URL ("http","www.teknolit.fi","/"); getAppletContext().showDocument(osoite); } catch (MalformedURLException e2) {} } } }