Hur irriterande det ibland kan vara för en användare att tvingas titta på en hoppande text har diskuterats. Detta tänkte vi inte ta ställning till här utan istället bara titta på hur man kodar upp detta i Java. I det första exemplet så är detta gjort med enbart AWT-komponenter vilket ger ett lättare flimmer när bokstäverna byter positioner. Vid andra typer av animeringar syns detta mer tydligt och därför använder man ofta en teknik som på svenska kallas för dubbelbuffring.
Det andra exempeläpplet här nedanför har löst dubbelbuffringen genom att använda Swing-komponenter där detta finns inbyggt.
För att få denna uppgift godkänd så ska du göra ett fungerande äpple med den hoppande texten inlagd i Swing-komponenter där utskriften av bokstäverna sker i en egen tråd. Om du behöver lite hjälp för att komma igång så ta en titt på appleten NervousText som också brukar ingå som ett exempel i de flesta JDK. Här i Uppgift2f ska vi styra bokstäverna med lite mera precision. Detta gör vi med klassen FontMetrics i en for-loop:
for(int i = 0; i < text.length(); i++)
Instansen av FontMetrics heter fm och chars är en char[].
positioner[i] = fm.charsWidth(chars, 0 , i);
När vi på detta sätt vet hur mycket plats varje enskild bokstav tar i X-led så kan vi sedan flytta om dem med en ny for-loop enligt:
for(int i = 0; i < text.length(); i++){
Förändringen i Y-led görs på liknande sätt men med
x = (int)(Math.random()*SFAKTOR) + xFaktor + positioner[i];
...
fm.getAscent()
SFAKTOR
är en konstant som innehåller det antal pixlar som styr hur stor förflyttning som slumpas fram. Math.Randrom()
returnerar ett flyttal så typa därför om till ett heltal.
Arrayen med tecken ritas ut genom metoden drawChars(...)
. En viktig generell teknik för animationer i Java är att man skapar en extra tråd som med metoden sleep(millisekunder)
styr i vilken takt grafiken ska flytta sig.