import java.awt.*; import java.applet.*; import java.lang.*; public class huetr extends Applet { // an das Rechenwerk zu uebergebende Funktion public keybox keyBuffer; // vom Rechenwerk uebergebener Displayinhalt public displaybox displayBuffer; // Tasten fsButton cTaste; fsButton ceTaste; fsButton lgTaste; fsButton invTaste; fsButton prozTaste; fsButton klAufTaste; fsButton klZuTaste; fsButton geteilt; fsButton asinTaste; fsButton sinTaste; fsButton lnTaste; fsButton yHochxTaste; fsButton sieben; fsButton acht; fsButton neun; fsButton mal; fsButton acosTaste; fsButton cosTaste; fsButton eTaste; fsButton sqrt; fsButton vier; fsButton fuenf; fsButton sechs; fsButton minus; fsButton atanTaste; fsButton tanTaste; fsButton piTaste; fsButton sqr; fsButton eins; fsButton zwei; fsButton drei; fsButton plus; fsButton stoTaste; fsButton sumTaste; fsButton rclTaste; fsButton expTaste; fsButton nix; fsButton punkt; fsButton vorzeichenwechsel; fsButton gleich; fsButton huetr; // Display (wird durch ein TextField realisiert) TextField display; Taschenrechner Rechenwerk; // Initialisieren des "HandelsUEblichenTaschenRechners" public void init() { super.init(); displayBuffer = new displaybox(); displayBuffer.memFlag = false; displayBuffer.errFlag = false; displayBuffer.display=0; keyBuffer = new keybox(); keyBuffer.key = ""; keyBuffer.used = false; Rechenwerk = new Taschenrechner(this); Rechenwerk.start(); // Panel initialisieren und Layoutmanager setzen, fuer jede Tastenreihe neu Panel keys = new Panel(); keys.setLayout(new FlowLayout(FlowLayout.LEFT,1,1)); this.setLayout(new FlowLayout(FlowLayout.CENTER,1,1)); // Display initialisieren und in Panel einfuegen display = new TextField(14); display.setEditable(false); // Wert ist nicht editierbar display.setFont(new Font("Courier",Font.PLAIN,14)); this.add(display); // Buttons initialisieren und einfuegen cTaste = new fsButton("AC"); cTaste.setBackground(Color.blue); cTaste.setForeground(Color.lightGray); keys.add(cTaste); ceTaste = new fsButton("CE"); ceTaste.setBackground(Color.blue); ceTaste.setForeground(Color.lightGray); keys.add(ceTaste); lgTaste = new fsButton("lg"); lgTaste.setForeground(Color.blue); keys.add(lgTaste); invTaste = new fsButton("1/X"); invTaste.setForeground(Color.blue); keys.add(invTaste); prozTaste = new fsButton("%"); prozTaste.setForeground(Color.blue); keys.add(prozTaste); klAufTaste = new fsButton("("); keys.add(klAufTaste); klZuTaste = new fsButton(")"); keys.add(klZuTaste); geteilt = new fsButton("/"); geteilt.setForeground(Color.red); keys.add(geteilt); this.add(keys); //Tasten in Panel einfuegen //naechste Reihe, als neues Panel realisiert keys = new Panel(); keys.setLayout(new FlowLayout(FlowLayout.LEFT,1,1)); asinTaste = new fsButton("ASIN"); asinTaste.setForeground(Color.blue); keys.add(asinTaste); sinTaste = new fsButton("SIN"); sinTaste.setForeground(Color.blue); keys.add(sinTaste); lnTaste = new fsButton("ln"); lnTaste.setForeground(Color.blue); keys.add(lnTaste); yHochxTaste = new fsButton("y^x"); yHochxTaste.setForeground(Color.blue); keys.add(yHochxTaste); sieben = new fsButton("7"); keys.add(sieben); acht = new fsButton("8"); keys.add(acht); neun = new fsButton("9"); keys.add(neun); mal = new fsButton("*"); mal.setForeground(Color.red); keys.add(mal); this.add(keys); //dritte Reihe keys = new Panel(); keys.setLayout(new FlowLayout(FlowLayout.LEFT,1,1)); acosTaste = new fsButton("ACOS"); acosTaste.setForeground(Color.blue); keys.add(acosTaste); cosTaste = new fsButton("COS"); cosTaste.setForeground(Color.blue); keys.add(cosTaste); eTaste = new fsButton("e"); eTaste.setForeground(Color.blue); keys.add(eTaste); sqrt = new fsButton("SQRT"); sqrt.setForeground(Color.blue); keys.add(sqrt); vier = new fsButton("4"); keys.add(vier); fuenf = new fsButton("5"); keys.add(fuenf); sechs = new fsButton("6"); keys.add(sechs); minus = new fsButton("-"); minus.setForeground(Color.red); keys.add(minus); this.add(keys); //vierte Reihe keys = new Panel(); keys.setLayout(new FlowLayout(FlowLayout.LEFT,1,1)); atanTaste = new fsButton("ATAN"); atanTaste.setForeground(Color.blue); keys.add(atanTaste); tanTaste = new fsButton("TAN"); tanTaste.setForeground(Color.blue); keys.add(tanTaste); piTaste = new fsButton("Pi"); piTaste.setForeground(Color.blue); keys.add(piTaste); sqr = new fsButton("SQR"); sqr.setForeground(Color.blue); keys.add(sqr); eins = new fsButton("1"); keys.add(eins); zwei = new fsButton("2"); keys.add(zwei); drei = new fsButton("3"); keys.add(drei); plus = new fsButton("+"); plus.setForeground(Color.red); keys.add(plus); this.add(keys); //letzte Zeile keys = new Panel(); keys.setLayout(new FlowLayout(FlowLayout.LEFT,1,1)); stoTaste = new fsButton("STO"); stoTaste.setBackground(Color.orange); keys.add(stoTaste); sumTaste = new fsButton("SUM"); sumTaste.setBackground(Color.orange); keys.add(sumTaste); rclTaste = new fsButton("RCL"); rclTaste.setBackground(Color.orange); keys.add(rclTaste); expTaste = new fsButton("EXP"); expTaste.setForeground(Color.blue); keys.add(expTaste); nix = new fsButton("0"); keys.add(nix); punkt = new fsButton("."); keys.add(punkt); vorzeichenwechsel = new fsButton("+/-"); keys.add(vorzeichenwechsel); gleich = new fsButton("="); gleich.setForeground(Color.red); keys.add(gleich); this.add(keys); } //Bearbeiten von Tastatur- und Mausereignissen und // Funktion an Rechenwerk weiterleiten. public synchronized boolean handleEvent(Event e) { if (e.target == Rechenwerk) { updateDisplay(); } else synchronized(keyBuffer) { if (!keyBuffer.used) { if (((e.id == Event.ACTION_EVENT) && (e.target == cTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 99))) { keyBuffer.key= new String("AC"); keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == ceTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 67))) { keyBuffer.key= new String("CE"); keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == lgTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 76))) { keyBuffer.key= new String("LG"); keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == invTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 105))) { keyBuffer.key= new String("1/X"); keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == prozTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 37))) { keyBuffer.key="%"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == klAufTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 40 ))) { keyBuffer.key="("; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == klZuTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 41))) { keyBuffer.key=")"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == geteilt)) || ((e.id == Event.KEY_PRESS) && (e.key == 47))) { keyBuffer.key="/"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == asinTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 72))) { keyBuffer.key="ASIN"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sinTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 104))) { keyBuffer.key="SIN"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == lnTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 108))) { keyBuffer.key="LN"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == yHochxTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 94))) { keyBuffer.key="X^Y"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sieben)) || ((e.id == Event.KEY_PRESS) && (e.key == 55))) { keyBuffer.key="7"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == acht)) || ((e.id == Event.KEY_PRESS) && (e.key == 56))) { keyBuffer.key="8"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == neun)) || ((e.id == Event.KEY_PRESS) && (e.key == 57))) { keyBuffer.key="9"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == mal)) || ((e.id == Event.KEY_PRESS) && (e.key == 42))) { keyBuffer.key="*"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == acosTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 74))) { keyBuffer.key="ACOS"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == cosTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 106))) { keyBuffer.key="COS"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == eTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 101))) { keyBuffer.key="E"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sqrt)) || ((e.id == Event.KEY_PRESS) && (e.key == 84))) { keyBuffer.key="SQRT"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == vier)) || ((e.id == Event.KEY_PRESS) && (e.key == 52))) { keyBuffer.key="4"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == fuenf)) || ((e.id == Event.KEY_PRESS) && (e.key == 53))) { keyBuffer.key="5"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sechs)) || ((e.id == Event.KEY_PRESS) && (e.key == 54))) { keyBuffer.key="6"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == minus)) || ((e.id == Event.KEY_PRESS) && (e.key == 45))) { keyBuffer.key="-"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == atanTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 75))) { keyBuffer.key="ATAN"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == tanTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 107 ))) { keyBuffer.key="TAN"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == piTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 80))) { keyBuffer.key="PI"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sqr)) || ((e.id == Event.KEY_PRESS) && (e.key == 82))) { keyBuffer.key="SQR"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == eins)) || ((e.id == Event.KEY_PRESS) && (e.key == 49))) { keyBuffer.key="1"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == zwei)) || ((e.id == Event.KEY_PRESS) && (e.key == 50))) { keyBuffer.key="2"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == drei)) || ((e.id == Event.KEY_PRESS) && (e.key == 51))) { keyBuffer.key="3"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == plus)) || ((e.id == Event.KEY_PRESS) && (e.key == 43))) { keyBuffer.key="+"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == stoTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 83))) { keyBuffer.key="STO"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == sumTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 115))) { keyBuffer.key="SUM"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == rclTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 114))) { keyBuffer.key="RCL"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == expTaste)) || ((e.id == Event.KEY_PRESS) && (e.key == 69))) { keyBuffer.key="EXP"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == nix)) || ((e.id == Event.KEY_PRESS) && (e.key == 48))) { keyBuffer.key="0"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == punkt)) || ((e.id == Event.KEY_PRESS) && (e.key == 46))) { keyBuffer.key="."; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == vorzeichenwechsel)) || ((e.id == Event.KEY_PRESS) && (e.key == 35))) { keyBuffer.key="+/-"; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } else if (((e.id == Event.ACTION_EVENT) && (e.target == gleich)) || ((e.id == Event.KEY_PRESS) && (e.key == 61))) { keyBuffer.key="="; keyBuffer.used=true; synchronized(Rechenwerk) {Rechenwerk.notify();}; return true; } } } return false; } // Applet zeichnen public void paint(Graphics g) { updateDisplay(); } // darzustellenden Wert in einen String umwandeln // und rechtsbuendig orientieren. Sofern das Errorflag // gesetzt ist, wird "Error" im Display angezeigt. Wenn // der Speicher einen Wert ungleich Null annimmt, wird // zusaetzlich "M" linksbuendig angezeigt. public void updateDisplay() { if (displayBuffer.errFlag==true) display.setText("Error"); else { String tmp = new String(); if (displayBuffer.memFlag) tmp = tmp.concat("M "); String strDisplay = new String(String.valueOf(displayBuffer.display)); for (int mh = strDisplay.length(); mh < 12; mh++) tmp = tmp.concat(" "); tmp = tmp.concat(strDisplay); display.setText(tmp); } } }