Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Swing har en spesiell timer, som egner seg til bruk mot GUI. Veldig enkelt forklart kan man bruke en swingtimer til å utføre kode med faste intervaller, i den hensikt å få en applikasjon til å leve helt/delvis på egen hånd, etter bestemte premisser.

Dette bygger videre på Hendelsestyrte programmer i swing, men i tillegg/i stedet for brukerinteraksjon vil hendelsene være trigget av en timer.

...

Code Block
languagejava
titleSwing Timer
linenumberstrue
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

// Siden klassen SwingExample skal være mottaker for timeren, må den implementere interfacet ActionListner
// som vil si at klassen lover å ha metoden "actionPerformed". Timeren vil da kalle på denne metoden som et "pip"

public class SwingExample implements ActionListener {
 
	Timer timer = new Timer(100, this); // Intervallet skal være på 100 ms, og klassen er selv mottaker
	
    public SwingExample() {
    	timer.start();  // Timeren må startes
	}
 
	// For hvert intervall kalles denne metoden, og innholdet i metoden avgjør funksjonaliteten.
	
	public void actionPerformed(ActionEvent ae) {
		// Oppdatere komponenter, hente ny info, slette gammel info. 
	}
	// Kan brukes til å oppdatere en klokke grafisk.
		// Kan brukes til animasjon ved popups eller zooming
	}

Timere med spillgrafikk

Dersom vi lager et GUI bestående av figurer som vi ønsker skal bevege seg etter gitte betingelser, kan timeren også brukes til dette. 
Et slikt GUI kan for eksempel være grafikken i spillet Packman, hvor man styrer en figur som jages av spøkelse-figurer. Av og til får figurene økt eller redusert hastighet.

En måte å løse dette på kan være som følgende:

  • Spillbrettet deles opp som et rutenett i X og Y-koordinater
  • Hver figur er et objekt med en hastighet i X-retning og en hastighet i Y-retning (et forholdsmessig tall) 
  • Objektenes hastighet kan reduseres eller økes
  • Din figur har i utgangspunktet ingen hastighet, men får det gjennom å styres med piltasten

Hastigheten vil bare være et tall og kan ikke i seg selv flytte objektet, men:

  • For hver event fra timeren, (f.eks. hvert 100 ms) flyttes objektet med hastigheten sin, i hver av retningene.

Dersom timeren "piper" ofte nok og stegene til objektene ikke er for store, vil objektene flytte seg rundt og se levende ut for øyet vårt. 
I packman-eksempelet er all logikk knyttet til oppførselen til objektene helt utelatt, dette for å tydeliggjøre hvilken funksjon timeren har. Timere kan også brukes til å flytte grafikk med små veldig tidsintervaller, i den hensikt å skape bevegelse. Mer om dette her. (Deadlink)