package vp; import java.awt.*; public class Rystetekst extends Component implements Runnable { private String tekst = "rystetekst"; public void setTekst(String t) { tekst = t; foretrukneStørrelse = null; } public String getTekst() { return tekst; } Dimension foretrukneStørrelse = null; public Dimension getPreferredSize() { if (foretrukneStørrelse == null) try { FontMetrics fm = getFontMetrics(getFont()); int tbr = fm.stringWidth(tekst); // tekstbredde int thø = fm.getHeight(); // teksthøjde foretrukneStørrelse = new Dimension(tbr + 10, thø + 10); // lidt ekstra } catch (Exception e) { e.printStackTrace(); foretrukneStørrelse = new Dimension(150,50); } return foretrukneStørrelse; } public Rystetekst() { // hvis ikke i designfase så start en tråd der tager sig af opdateringen if (!java.beans.Beans.isDesignTime()) { Thread tråd = new Thread(this); tråd.setDaemon(true); // systemet skal ikke vente på at tråden stopper tråd.start(); // ny vil ny tråd starte nede i run()-metoden } } /** sørger for at kalde repaint() regelmæssigt */ public void run() { try { while (true) { Thread.sleep(100); // vent 1/10 sekund repaint(); // gentegn komponenten } } catch (Exception e) {} } public void paint(Graphics g) { // tegn tekst på tilfældig x- og y-koordinat g.drawString(tekst, (int)(Math.random()*10), getHeight()-(int)(Math.random()*10)); } }