/* Tiedosto: Tikkukko.java Esimerkki: Java-kirja, Luku 4. Tekijä: Juha Peltomäki, 09.1998 */ import java.awt.*; import java.applet.*; public class Tikkukko extends Applet implements Runnable { Thread ukko_saie = null; // Säie-olion määritys int ukko_laskuri = 0; // monesko Ukko vuorossa public static final int viim_kuva = 2; // viimeisen kuvan ind.numero // Varataan muuttujat tikku-ukoille Image ukko[] = new Image[viim_kuva+1]; // Tikku-ukkojen tallennus. Graphics varasto; // Piirrettävä grafiikka. Image kuva_puskuri; // Piirrettävän kuvan talletus. String viesti; // public void init() { Font kkFontti = new Font("Arial", Font.BOLD, 18); super.init(); setLayout(null); Label tulos = new Label("Tikku-ukko demo!", Label.LEFT); tulos.setFont(kkFontti); tulos.setBounds(10, 10, 150, 25); add(tulos); // Ladataan kuvat muistiin jo alustusvaiheess lataaKuvat(); } /* Metodilla alustetaan grafiikka ennen piirtämistä. */ private boolean lataaKuvat() { try { ukko[0] = getImage(getCodeBase(), "ukko1.gif"); ukko[1] = getImage(getCodeBase(), "ukko2.gif"); ukko[2] = getImage(getCodeBase(), "ukko3.gif"); // Luodaan alueen täyttävä kuva sekä varasto, johon grafiikka // "piirretään" ennen kuvaruudulle piirtämistä. kuva_puskuri = createImage(this.getSize().width, this.getSize().height); varasto = kuva_puskuri.getGraphics(); } catch(Exception e) { System.out.println(e); } return true; } /* Metodia kutsutaan kuvia ladattaessa seuraamaan, onko koko kuva ladattu. Kun kuva on ladattu, metodi palauttaa false, jolloin kuvaa voi alkaa käyttämään. */ public boolean imageUpdate(Image kuva, int kuvabitit, int x, int y, int lev, int kork) { if ((kuvabitit & (FRAMEBITS)) != 0) { showStatus("Ladataan kuvaa!"); return true; } if ((kuvabitit & ALLBITS) != 0) { showStatus("Kuva on valmis!"); repaint(); return false; } return true; } /* Aloitetaan säie. */ public void start() { if (ukko_saie == null) { ukko_saie = new Thread(this); ukko_saie.start(); } } /* Piirtometodissa piirretään kuva varastoon, josta se "kopioidaan" näytölle (kaksoispuskurointi). */ public void paint(Graphics kuvaruutu) { varasto.setColor(Color.white); varasto.fillRect(0,0,getSize().width, getSize().height); varasto.drawImage(ukko[ukko_laskuri], 0, 0, this); kuvaruutu.drawImage(kuva_puskuri, 50, 50, this); // Lisätään laskuria yhdellä tai aloitetaan kuvasarja alusta. if (ukko_laskuri >= 2) ukko_laskuri = 0; else ukko_laskuri++; } /* Metodi piirtää kuvasta ainoastaan muuttuneet osat. Tällöin kuva välkkyy vähemmän kuin pelkkää paint()-metodia käytettäessä. */ public void update(Graphics g) { this.paint(g); } /* "Ikuinen silmukka", jossa säiettä suoritetaan. */ public void run() { while (true) { repaint(); try { ukko_saie.sleep(200); } catch (InterruptedException e) { } } } /* Säikeen pysäytys. */ public void stop() { if (ukko_saie != null) { ukko_saie.stop(); ukko_saie = null; } } }