/* KeyboardApplet class accepts user input text displays statistics on typing text with qwerty and dvorak keyboards loads keyboard image used for qwerty and dvorak keyboards author: JAM (Jon A. Maxwell) email: jmaxwell@acm.vt.edu date: Mar 20 1998 */ import java.awt.*; import java.applet.*; public class KeyboardApplet extends Applet { TextArea text = new TextArea(5, 80); Button calc = new Button("Calculate"); Keyboard dvorak, qwerty; KeyStats dvorakStats, qwertyStats; String dvorakKeymap[] = { "`1234567890[]\\" , "~!@#$%^&*(){}|", " ',.pyfgcrl/=" , " \"<>PYFGCRL?+", " aoeuidhtns-\n" , " AOEUIDHTNS_\n", " ;qjkxbmwvz" , " :QJKXBMWVZ", " " , "" }; // setup applet gui, keyboards public void init() { // load images Image qwertyImage = null; Image dvorakImage = null; try { qwertyImage = Toolkit.getDefaultToolkit().getImage( getClass().getClassLoader().getResource("keyboard.jpg")); dvorakImage = qwertyImage; } catch (Exception ex) { } // qwerty, dvorak keyboard qwerty = new Keyboard(qwertyImage); dvorak = new Keyboard(dvorakImage); for (int i=0; i < dvorakKeymap.length; i+=2) { dvorak.setRow(i/2,Keyboard.LOWERCASE, dvorakKeymap[i]); dvorak.setRow(i/2,Keyboard.UPPERCASE, dvorakKeymap[i+1]); } // stats dvorakStats = new KeyStats(); dvorakStats.calculate("", dvorak); qwertyStats = new KeyStats(); qwertyStats.calculate("", qwerty); // gui this.setBackground(new Color(240,240,240)); resize(620,500); // I know, I know, GridbagLayout... or something // textPanel: text area and calculate button Panel calcPanel = new Panel(); calcPanel.setLayout( new FlowLayout() ); calcPanel.add(calc); // Panel textPanel = new Panel(); textPanel.setLayout( new BorderLayout() ); textPanel.add("Center",text); textPanel.add("South",calcPanel); // dvorakStatsPanel: dvorak label and dvorakStats Panel dvorakStatsPanel = new Panel(); Label dvorakLabel = new Label("Dvorak", Label.LEFT); dvorakLabel.setFont(new Font("Dialog", Font.BOLD, 16)); dvorakStatsPanel.setLayout( new BorderLayout() ); dvorakStatsPanel.add("Center", dvorakStats); dvorakStatsPanel.add("North", dvorakLabel); // qwertyStatsPanel: qwerty label and qwertyStats Panel qwertyStatsPanel = new Panel(); Label qwertyLabel = new Label("Qwerty", Label.LEFT); qwertyLabel.setFont(new Font("Dialog", Font.BOLD, 16)); qwertyStatsPanel.setLayout( new BorderLayout() ); qwertyStatsPanel.add("Center", qwertyStats); qwertyStatsPanel.add("North", qwertyLabel); // dvorakPanel: dvorakStatsPanel and dvorak keyboard Panel dvorakPanel = new Panel(); dvorakPanel.setLayout( new BorderLayout() ); dvorakPanel.add("North", dvorakStatsPanel); dvorakPanel.add("Center",dvorak); // qwertyPanel: qwertyStatsPanel and qwerty keyboard Panel qwertyPanel = new Panel(); qwertyPanel.setLayout( new BorderLayout() ); qwertyPanel.add("North", qwertyStatsPanel); qwertyPanel.add("Center",qwerty); // displayPanel: dvorakPanel and qwertyPanel Panel displayPanel = new Panel(); displayPanel.setLayout( new BorderLayout() ); displayPanel.add("West",dvorakPanel); displayPanel.add("East",qwertyPanel); // this panel: textPanel and displayPanel setLayout( new BorderLayout() ); add("Center",textPanel); add("South",displayPanel); } // calculate public boolean handleEvent(Event event) { if (event.id == Event.ACTION_EVENT && event.target == calc) { calc.disable(); dvorakStats.calculate(text.getText(), dvorak); qwertyStats.calculate(text.getText(), qwerty); calc.enable(); return true; } return super.handleEvent(event); } }