import Java.applet.*; import java.awt.*; import java.io.*; import java.net.URL; import java.util.*;
public class Typewriter4 extends Applet implements Runnable {
AudioClip hit, cr, ding ; boolean alreadyRun = false, soundOn = false, loop = false; Color bgColor = Color.lightGray, textColor = Color.black ; Font font ; Image offScreen, background ; int width, height, currentline = 0, currentword = 0, currentletter = 0, depth = 0, margin = 0, cycles = 0, step = 0, pause = 0, speed = 0, update = 0, linecount = 0 ; long lastread = 0; MediaTracker mt ; String soundactivation, text, textfile, target ; Thread woohoo = null; URL hotlink = null; Vector lines = null;
public Typewriter4() {
alreadyRun = false; soundOn = false; loop = true; soundactivation = "enter";
}
public void buildLines() {
lines = new Vector(); FontMetrics fontmetrics = offScreen.getGraphics().getFontMetrics(); StringTokenizer strTok = new StringTokenizer(text, "\n") ; while (strTok.hasMoreTokens()) {
StringTokenizer strTok1 = new StringTokenizer(strTok.nextToken()); int wordcount = strTok1.countTokens(); String[] words = new String[wordcount]; for(int i = 0; i < wordcount; i++) words[i] = strTok1.nextToken();
String s = "" ; for(int j = 0; j < wordcount; j++) { s = s != null ? s + words[j] + " " : words[0]; if(fontmetrics.stringWidth(s) > width - margin * 2) { lines.addElement(s.substring(0, s.lastIndexOf(" ", s.lastIndexOf(" ") - 1))); s = words[j] + " "; } }
lines.addElement(s); linecount = lines.size(); }
depth = height - fontmetrics.getHeight() / 2; }
public void checkTextfile() { loop = true; text = ""; try { DataInputStream datainputstream = new DataInputStream((new URL(getDocumentBase(), textfile)).openStream()); boolean flag = true; while(flag) { String s = datainputstream.readLine(); if(s == null) flag = false; else text = text + s + "\n"; }
datainputstream.close(); lastread = (new Long((new Date()).getTime())).longValue(); return; } catch(Exception exception) { System.out.println("OOOHH--" + exception.toString()); } }
public void init() { mt = new MediaTracker(this); lastread = 0L; width = getSize().width; height = getSize().height; offScreen = createImage(width, height);
String param ; if ((param = getParameter("BACKGROUND")) != null) { try { background = getImage(new URL(getDocumentBase(), param)); } catch(Exception e) { } if(background != null) mt.addImage(background, 0); }
if ((param = getParameter("BGCOLOR")) != null) bgColor = new Color(Integer.parseInt(param, 16)) ;
if ((param = getParameter("TEXTCOLOR")) != null) textColor = new Color(Integer.parseInt(param, 16)) ;
String fontName = "Helvetica" ; if ((param = getParameter("FONTNAME")) != null) fontName = param ; int fontSize = 12 ; if ((param = getParameter("FONTSIZE")) != null) fontSize = Integer.parseInt(param) ; int fontStyle = Font.PLAIN ; if ((param = getParameter("FONTSTYLE")) != null) { param = param.toUpperCase() ; if (param.indexOf("BOLD") != -1) fontStyle |= Font.BOLD ; if (param.indexOf("ITALIC") != -1) fontStyle |= Font.ITALIC ; } font = new Font(fontName, fontStyle, fontSize);
param = getParameter("CYCLES"); if(param == null || param.equalsIgnoreCase("infinite")) { cycles = 1; step = 0; } else { cycles = Integer.parseInt(param); step = 1; }
param = getParameter("MARGIN"); margin = param == null ? width / 10 : Integer.parseInt(param);
param = getParameter("PAUSE"); pause = param == null ? 2000 : Integer.parseInt(param);
param = getParameter("SOUNDACTIVATION"); soundactivation = param == null ? "enter" : param.toLowerCase();
soundOn = soundactivation.equals("auto");
if((param = getParameter("SOUND.KEYSTROKE")) != null) try { hit = getAudioClip(new URL(getDocumentBase(), param)); } catch(Exception e) { }
if((param = getParameter("SOUND.RETURN")) != null) try { cr = getAudioClip(new URL(getDocumentBase(), param)); } catch(Exception e) { }
if((param = getParameter("SOUND.BELL")) != null) try { ding = getAudioClip(new URL(getDocumentBase(), param)); } catch(Exception _ex) { }
param = getParameter("SPEED"); speed = param == null ? 100 : Math.max(10, Integer.parseInt(param));
param = getParameter("TARGET"); target = param == null ? "_self" : param;
if((param = getParameter("URL")) != null) try { hotlink = new URL(getDocumentBase(), param); } catch(Exception e) { }
param = getParameter("TEXT"); text = param == null ? "This is a test... \nthis is a test..." : param; text = text.replace('\\', '\n');
textfile = getParameter("TEXTFILE") ;
param = getParameter("UPDATE"); update = param == null ? 15 : Integer.parseInt(param);
buildLines(); try { mt.waitForID(0); return; } catch(InterruptedException _ex) { return; } }
public void run() { currentline = 0; for(int i = 0; i < cycles; i += step) { long l = (new Long((new Date()).getTime())).longValue(); if(l - lastread > (long)(update * 60000) && textfile != null) { checkTextfile(); buildLines(); } for(int j = 0; j < linecount; j++) { currentletter = 1; String s = (String)lines.elementAt(j); for(int k = 0; k < s.length(); k++) { if(soundOn && hit != null) hit.play(); if(k == s.length() && soundOn && cr != null) cr.play(); repaint(); int i1 = 75 + (int)(Math.random() * 100D); try { Thread.sleep((i1 * speed) / 100); } catch(InterruptedException interruptedexception) { System.out.println("BB: " + interruptedexception.toString()); } currentletter++; }
currentletter = 0; currentline++; alreadyRun = false; }
currentline = currentline % linecount; try { Thread.sleep(pause); } catch(InterruptedException interruptedexception) { System.out.println("AA: " + interruptedexception.toString()); } }
}
public void paintBuffer(Graphics g) { if(background != null) { g.drawImage(background, 0, 0, this); } else { g.setColor(bgColor); g.fillRect(0, 0, width, height); } g.setColor(textColor); g.setFont(font); FontMetrics fontmetrics = g.getFontMetrics(); for(int i = 0; i < currentline; i++) g.drawString( (String)lines.elementAt(currentline - i - 1), margin, depth - (i + 1) * fontmetrics.getHeight() );
String s = (String)lines.elementAt(currentline); String s1 = currentletter >= s.length() ? s : s.substring(0, currentletter); if(fontmetrics.stringWidth(s1) > (8 * width) / 10 && !alreadyRun && soundOn) { alreadyRun = true; if(ding != null) ding.play(); } g.drawString(s1, margin, depth); }
public void paint(Graphics g) { paintBuffer(offScreen.getGraphics()); g.drawImage(offScreen, 0, 0, this); }
public void update(Graphics g) { paint(g); }
public void start() { if(woohoo == null) { woohoo = new Thread(this); woohoo.start(); } }
public void stop() { woohoo.stop(); woohoo = null; }
public boolean mouseEnter(Event event, int i, int j) { if(hotlink != null) showStatus("Link to " + hotlink.toString()); if(soundactivation.equals("enter")) soundOn = true; return true; }
public boolean mouseExit(Event event, int i, int j) { if(soundactivation.equals("enter")) soundOn = false; return true; }
public boolean mouseDown(Event event, int i, int j) { try { getAppletContext().showDocument(hotlink, target); } catch(Exception e) { } return true; }
}
(责任编辑:admin) |