A Java Calculator
calculator.java
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.datatransfer.*;
public class calculator extends Applet
{
public void init()
{
calf calWindow = new calf("Java Calculator");
calWindow.setSize(200, 250);
calWindow.setVisible(true);
calWindow.setResizable(false);
}
}
class calf extends Frame implements WindowListener, ActionListener,
KeyListener
{
String command, copy, arg, chg, txt;
double result;
String number = "123456789.0";
String operator = "/*-+=";
CopyPaste cp;
Menu Menu1;
MenuBar Menubar1;
MenuItem menuitem1, menuitem2, menuitem3;
TextField entrytext;
Button numbut []; //Number buttons
Button combut []; //Command buttons
Panel companel, numpanel;
public static void main(String[] arguments)
{
calf calWindow = new calf("Java Calculator");
calWindow.setSize(200, 250);
calWindow.setVisible(true);
}
public calf(String title)
{
super(title);
addWindowListener(this);
addKeyListener(this);
cp = new CopyPaste();
//cp.clip = getToolkit().getSystemClipboard();
setBackground(Color.blue);
setLayout(new GridLayout(1, 1));
Menubar1 = new MenuBar();
Menu1 = new Menu("Edit");
menuitem1 = new MenuItem("&Copy");
Menu1.add(menuitem1);
menuitem1.addActionListener(this);
menuitem2 = new MenuItem("&Paste");
Menu1.add(menuitem2);
menuitem2.addActionListener(this);
menuitem3 = new MenuItem("&Exit");
Menu1.add(menuitem3);
menuitem3.addActionListener(this);
Menubar1.add(Menu1);
setMenuBar(Menubar1);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
setLayout(gridbag);
constraints.weighty = 1;
constraints.weightx = 1;
//constraints.fill = GridBagConstraints.BOTH;
Font bigFont = new Font("Courier",Font.BOLD,
14);
entrytext = new TextField(20);
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(entrytext,constraints);
add(entrytext);
entrytext.setFont(bigFont);
entrytext.setEditable(false);
entrytext.setForeground(Color.black);
entrytext.setBackground(Color.white);
entrytext.addKeyListener(this);
entrytext.requestFocus();
constraints.weighty = 1;
constraints.weightx = 1;
companel = new Panel();
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(companel,constraints);
/*
Command GridLayout
---------------------
| Back | CE | C
|
---------------------
*/
companel.setLayout(new GridLayout(1,3,5,5));
// Create the buttons
Font comsFont = new Font("Arial",Font.BOLD,
12);
String[] coms = { "Back","CE","C"
};
combut = new Button[3];
for
(int i=0; i<=2; i++)
{
combut[i] = new
Button(coms[i]);
companel.add(combut[i]);
combut[i].addActionListener(this);
combut[i].setFont(comsFont);
combut[i].addKeyListener(this);
}
add(companel);
companel.addKeyListener(this);
constraints.weighty = 4;
constraints.weightx = 1;
numpanel = new Panel();
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(numpanel,constraints);
/*
Number GridLayout
---------------------
| 7 | 8 | 9 | / |sqr|
---------------------
| 4 | 5 | 6 | * | % |
---------------------
| 1 | 2 | 3 | - |1/x|
---------------------
| 0 |+/-| . | + | = |
---------------------
*/
numpanel.setLayout(new GridLayout(4,5,3,3));
// Create the buttons
String[] nums = { "7","8","9","/","sqrt",
"4","5","6","*","%",
"1","2","3","-","1/x",
"0","+/-",".","+","="
};
numbut = new Button[20];
for (int i=0; i<=19; i++)
{
numbut[i] = new
Button(nums[i]);
numpanel.add(numbut[i]);
numbut[i].addActionListener(this);
numbut[i].addKeyListener(this);
if(operator.indexOf(nums[i]) > -1)
{
numbut[i].setForeground(Color.red);
}
else
{
numbut[i].setForeground(Color.blue);
}
}
add(numpanel);
numpanel.addKeyListener(this);
//initialize global variables.
command = "+";
copy = "";
chg = "N";
txt = "";
arg = "";
result = 0;
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand() == "&Exit")
{
setVisible(false);
System.exit(0);
}
else if (e.getActionCommand() == "&Copy")
{
String txt = entrytext.getText();
if (txt != null)
{
cp.doCopy(txt);
}
}
else if (e.getActionCommand() == "&Paste")
{
cp.doPaste();
if (cp.ctxt != null)
{
entrytext.setText(cp.ctxt);
}
}
else if (e.getActionCommand() == "Back")
back_space();
else if (e.getActionCommand() == "CE") entrytext.setText("");
else if (e.getActionCommand() == "C")
{
result = 0;
command = "+";
entrytext.setText("");
}
else
{
arg = e.getActionCommand();
txt = entrytext.getText();
if(number.indexOf(arg) > -1)
{
if (chg == "Y") txt = "";
txt = txt + arg;
entrytext.setText(txt);
chg = "N";
}
else check_entry();
}
}
public void keyPressed(KeyEvent k){}
public void keyReleased(KeyEvent k)
{
int ikey = k.getKeyCode();
if (ikey == 127) entrytext.setText("");
}
public void keyTyped(KeyEvent k)
{
int ikey = k.getKeyChar();
if (ikey == 8) back_space();
else if (ikey == 10)
{
arg = "=";
txt = entrytext.getText();
display_ans();
}
else
{
txt = entrytext.getText();
char ckey = (char) ikey;
arg = String.valueOf(ckey);
if(number.indexOf(arg) > -1)
{
if (chg == "Y") txt = "";
txt = txt + arg;
entrytext.setText(txt);
chg = "N";
}
else check_entry();
}
}
public void back_space()
{
txt = entrytext.getText();
int l = txt.length();
if (l > 0)
{
txt = txt.substring(0,l-1);
entrytext.setText(txt);
}
}
public void display_ans()
{
entrytext.setText(compute_tot(txt,command));
chg = "Y";
command = "+";
result = 0;
}
public void check_entry()
{
if(arg.equals("=")) display_ans();
else if(arg.equals("%"))
{
entrytext.setText(compute_tot(txt,arg));
chg = "Y";
}
else if(operator.indexOf(arg) > -1)
{
entrytext.setText(compute_tot(txt,command));
command = arg;
chg = "Y";
}
else if(arg == "sqrt")
{
entrytext.setText(compute_tot(txt,arg));
chg = "Y";
command = "";
}
else if(arg == "+/-")
{
Double tnum = Double.valueOf(txt);
double num = tnum.doubleValue();
num = num * -1;
entrytext.setText(String.valueOf(num));
chg = "Y";
}
else if(arg == "1/x")
{
entrytext.setText(compute_tot(txt,arg));
chg = "Y";
}
}
String compute_tot(String t, String c)
{
Double tnum = Double.valueOf(t);
double num = tnum.doubleValue();
if (c.equals("+")) result = result + num;
else if (c.equals("-")) result = result
- num;
else if (c.equals("*")) result = result
* num;
else if (c.equals("/")) result = result
/ num;
else if (c.equals("%")) result = num / 100;
else if (c.equals("+/-")) result = num *
-1;
else if (c.equals("1/x")) result = 1.000
/ num;
else if (c.equals("sqrt")) result = Math.sqrt(num);
return String.valueOf(result);
}
public void windowClosing(WindowEvent we)
{
setVisible(false);
System.exit(0);
}
public void windowClosed(WindowEvent we) {}
public void windowDeiconified(WindowEvent we)
{}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
public void windowActivated(WindowEvent we) {}
public void windowDeactivated(WindowEvent we)
{}
}
class CopyPaste implements ClipboardOwner
{
Clipboard clip;
String ctxt;
CopyPaste()
{
clip = new Clipboard("clip");
ctxt = null;
}
void doCopy(String txt)
{
StringSelection
trans = new StringSelection(txt);
clip.setContents(trans,
this);
}
void doPaste()
{
ctxt = null;
Transferable
toPaste = clip.getContents(this);
if (toPaste
!= null)
{
try
{
ctxt = (String)toPaste.getTransferData(
DataFlavor.stringFlavor);
}
catch (Exception e)
{
System.out.println("Error -- " + e.toString());
}
}
}
public void lostOwnership(Clipboard
clip,
Transferable
contents) {
}
}
Related:
Java Books
Java Certification,
Programming, JavaBean and Object Oriented Reference Books
Return to : Java
Programming Hints and Tips
All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
All product names are trademarks of their respective
companies.
The site www.erpgreat.com is not affiliated with or endorsed
by any company listed at this site.
Every effort is made to ensure the content integrity.
Information used on this site is at your own risk.
The content on this site may not be reproduced
or redistributed without the express written permission of
www.erpgreat.com or the content authors.
|