//Import av nödvändiga klasser import java.awt.*; import java.applet.*; import javax.swing.*; /** * MINT - Uppgift 1e * En JApplet som visar hoppande text på bildskärmen. * * @author Blanca Larkeson */ public class CrazyText extends JApplet implements Runnable { private TextYta textYta; private Thread thread = null; //Initiering av appleten public void init() { setBackground(new Color(0, 0, 153)); this.setSize(450, 200); textYta = new TextYta(); this.getContentPane().add(textYta, "Center"); if (thread == null) { thread = new Thread(this);//ny tråd skapas thread.start();//tråden startas } } //Appleten körs i en tråd //Metoden sleep styr i vilken takt grafiken ska flytta sig public void run() { Thread aktuell = Thread.currentThread(); while (thread == aktuell) { textYta.repaint(); try { thread.sleep(200);//tråden får sova i 200 ms }catch(InterruptedException ie){ stop(); } } } //Tråden stoppas helt public void stop() { thread = null; } //En inre klass som ritar upp panelen och använder FontMetrics för //att precisionsstyra bokstäverna class TextYta extends JPanel { private Font font; private FontMetrics fm;//mått för fonter private Dimension dim;//2-D dimension private int x, y;//koordinater som slumpas fram och ritas upp private int SFAKTOR = 12;//förflyttning i antal pixlar private int xFaktor, yFaktor;//teckendimensioner private int[] posX, posY;//positionskoordinater private char[] chars = {'G','o','i','n','´', ' ', 'C','r','a','z','y','?'}; //Konstruktor public TextYta() { super(); this.setSize(450, 200); setBackground(new Color(0, 0, 99)); font = new Font("Gill Sans", Font.PLAIN, 60); posX = new int[chars.length]; posY = new int[chars.length]; } //Tecknens dimensioner och placering läses av och ny beräknas //Tecknen ritas ut med hjälp av klassen Graphics public void paintComponent (Graphics g) { super.paintComponent(g); g.setColor(new Color(255,102,204));//Fontfärg g.setFont(font); fm = g.getFontMetrics(font);//mått för fonten hämtas dim = getSize();//höjd och bredd för visningsfönstret hämtas int strWidth = fm.stringWidth(chars.toString());//höjd och bredd för texten hämtas //Textens dimensioner i x-led xFaktor = (dim.width / 2) - (strWidth / 2); //Textens dimensioner i y-led yFaktor = 110 - font.getSize(); //Tecknens position for (int i=0; i