Would you like to make this site your homepage? It's fast and easy... 
    
     
     Yes, Please make this my home page! 
     
 
     
     
    
     
Java Project - Calculator
This calculator application was built together with the calculator 
applications written in vb  java/applet.
  They all look and operate similarly, however, I've only 
just corrected a "banker's rounding" discrepancy in both this and the 
java/applet programs. At the time of writing (30 May 2003) there appear to be no 
side-effects from the changes made.
Try the java/applet version here (written without swing components)
                                                               
use mouse or keyboard
                                         Shortcut keys Cancel - C, Clear All - A, Clr List - L
Click to see versions in    
vb   
java/applet
 
Java/Swing Code
import javax.swing.*;
import java.awt.*;
import 
java.awt.event.*;
import java.text.*;
 
class Calculator extends JFrame implements ActionListener, 
ItemListener,
                                
KeyListener, MouseListener, FocusListener
{
  JList list;
  
DefaultListModel myListModel;
  JScrollPane listScroll;
  
JRadioButton radioBtn[] = new JRadioButton[6];
  ButtonGroup 
radioGrp;
  JLabel radioLbl[] = new JLabel[7];
  JButton btn[] = 
new JButton[20];
  JTextField txtFld;
 
  boolean calculated;
  String lastEntry;
  String 
currentTotal;
  int lastOperator =       1;   //1 for +, 2 for -, 3 
for =,4 for x, 5 for ÷
  int decimalPlaces = 2;
  DecimalFormat 
df;
 
  public static void main(String args[])
  
{
    Calculator calc = new Calculator();
  }
 
  public Calculator()
  {
    
super("Calculator");
    
setSize(600,350);
    
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
buildGUI();
    pack();
    
setResizable(false);
    
setVisible(true);
    
setDecimalPlaces();
    clearAll();
    
setTheFocus();
  }
 
  private void cancel()
  {
    
txtFld.setText(currentTotal);
    calculated = 
true;
    setTheFocus();
  }
 
  private void clearAll()
  {
    
addToJList("<Clr>  ");
    
txtFld.setText(df.format(Double.parseDouble("0")));
    
calculated = true;
    lastEntry = 
df.format(Double.parseDouble("0"));
    currentTotal = 
df.format(Double.parseDouble("0"));
    
setTheFocus();
  }
 
  private void clearList()
  {
    
myListModel.clear();
    addToJList("<Clr>  
");
    setTheFocus();
  }
 
  private void setDecimalPlaces()
  {
    
String decimals[] = 
{"0","0.0","0.00","0.000","0.0000","0.00000"};
    df = new 
DecimalFormat(decimals[decimalPlaces]);
  }
 
  private void setTheFocus()
  {
    
txtFld.setCaretPosition(txtFld.getText().length());
    
txtFld.grabFocus();
  }
 
  private void addToJList(String number)
  
{
    int extra = 0;
    if(number.length() 
> 5) extra = number.length()/2-1;
    if(number.length() 
> 7) extra += (number.length()-7)/2;
    for(int i = 0; i 
< 55-number.length()-extra; i++)
    
{
      number = " " + number;
    
}
 
    myListModel.addElement(number);
    
list.setModel(myListModel);
    
list.setSelectedIndex(myListModel.getSize()-1);
    
list.ensureIndexIsVisible(myListModel.getSize()-1);
    
setTheFocus();
  
}
//------------------------------------------VALIDATE/KEYBOARD 
ACTIONS
  private boolean validKey(char keyPressed)
  {
 
    boolean valid = false;
 
    if(keyPressed == '0' || keyPressed == '1' || keyPressed 
== '2' ||
       keyPressed == '3' || 
keyPressed == '4' || keyPressed == '5' 
||
       keyPressed == '6' || keyPressed == 
'7' || keyPressed == '8' ||
       keyPressed 
== '9' || keyPressed == '.')
    
{
      valid = true;
 
      
if(calculated)
      
{
        
txtFld.setText("");
        calculated = 
false;
      }
      
if((keyPressed == '.' && txtFld.getText().indexOf(".") > -1) 
||
        ! 
checkLength())
      
{
        valid = 
false;
      }
    
}
    else if(keyPressed == '+') 
addNumber();
    else if(keyPressed ==       '-') 
subtractNumber();
    else if(keyPressed == '*') 
multiplyNumber(false);
    else if(keyPressed == '/') 
divideNumber(false);
    else if(keyPressed == 
KeyEvent.VK_ENTER) equals();
    else if(keyPressed == 'C' || 
keyPressed == 'c') cancel();
    else if(keyPressed == 'A' || 
keyPressed == 'a') clearAll();
    else if(keyPressed == 'L' 
|| keyPressed == 'l') clearList();
    return valid;
  
}
 
  private boolean checkLength()
  {
    
boolean OK = true;
    if((txtFld.getText().indexOf(".") > 
-1 &&
        
txtFld.getText().length() > 12) ||
      
(txtFld.getText().indexOf(".") < 0 
&&
        
txtFld.getText().length() > 11))
    
{
       OK = false;
    
}
    return OK;
  
}
//--------------------------------------------------ACTIONS FOR + - * / 
=
  private void addNumber()
  {
    double 
decNumber = 
Math.abs(Double.parseDouble(
            
calculated? lastEntry:txtFld.getText()));
    String formattedNumber =  
  df.format(decNumber);
    currentTotal = 
df.format(Double.parseDouble(currentTotal)+decNumber);
    
txtFld.setText(currentTotal);
    addToJList(formattedNumber + 
" +");
    lastEntry = formattedNumber;
    
calculated = true;
    lastOperator = 1;
    
setTheFocus();
  }
 
  private void subtractNumber()
  {
    
double decNumber = 
Math.abs(Double.parseDouble(
            
calculated? lastEntry:txtFld.getText()));
    String formattedNumber =  
  df.format(decNumber);
    currentTotal = 
df.format(Double.parseDouble(currentTotal)-decNumber);
    
txtFld.setText(currentTotal);
    addToJList(formattedNumber + 
" -");
    lastEntry = formattedNumber;
    
calculated = true;
    lastOperator = 2;
    
setTheFocus();
  }
 
  private void multiplyNumber(boolean fromEqualsOperater)
  
{
    boolean zeroNumber = false;
    double decNumber =  
  Double.parseDouble(txtFld.getText());
    String 
formattedNumber = String.valueOf(decNumber);
    
if(lastOperator < 4)
    
{
      currentTotal = lastEntry = 
formattedNumber;
    }
    else 
if(calculated)
    {
      currentTotal = 
  df.format(Double.parseDouble(currentTotal) 
*
                                  
Double.parseDouble(lastEntry));
    }
    
else if(lastOperator == 5)
    
{
      currentTotal = 
df.format(((long)((Double.parseDouble(currentTotal) / decNumber) 
*
                        
Math.pow(10,decimalPlaces) + 
0.5))/Math.pow(10,decimalPlaces));
    }
    
else
    {
      currentTotal = 
df.format(((long)((Double.parseDouble(currentTotal) * decNumber) 
*
                        
Math.pow(10,decimalPlaces) + 
0.5))/Math.pow(10,decimalPlaces));
    }
 
    txtFld.setText(currentTotal);
    
if((int) decNumber - decNumber == 0)
    
{
      formattedNumber = 
formattedNumber.substring(0,formattedNumber.lastIndexOf("."));
      
zeroNumber = true;
    }
    if(! 
fromEqualsOperater)
    {
      
addToJList(formattedNumber + " x");
    
}
    else if(zeroNumber)
    
{
      addToJList(formattedNumber + " 
");
    }
    else
    
{
      addToJList(formattedNumber + "  
");
    }
    calculated = 
true;
    lastOperator = 4;
    
setTheFocus();
  }
 
  private void divideNumber(boolean fromEqualsOperater)
  
{
    boolean zeroNumber = false;
    double decNumber =  
  Double.parseDouble(txtFld.getText());
    String 
formattedNumber = String.valueOf(decNumber);
    
if(lastOperator < 4)
    
{
      currentTotal = lastEntry = 
formattedNumber;
    }
    else 
if(calculated)
    {
      currentTotal = 
  df.format(Double.parseDouble(currentTotal) 
/
                                  
Double.parseDouble(lastEntry));
    }
    
else if(lastOperator == 4)
    
{
      currentTotal = 
df.format(((long)((Double.parseDouble(currentTotal) * decNumber) 
*
                         
Math.pow(10,decimalPlaces) + 
0.5))/Math.pow(10,decimalPlaces));
    }
    
else
    {
      currentTotal = 
df.format(((long)((Double.parseDouble(currentTotal) / decNumber) 
*
                        
Math.pow(10,decimalPlaces) + 
0.5))/Math.pow(10,decimalPlaces));
    }
 
    txtFld.setText(currentTotal);
    
if((int) decNumber - decNumber == 0)
    
{
      formattedNumber = 
formattedNumber.substring(0,formattedNumber.lastIndexOf("."));
      
zeroNumber = true;
    }
    if(! 
fromEqualsOperater)
    {
      
addToJList(formattedNumber + " ÷");
    
}
    else if(zeroNumber)
    
{
      addToJList(formattedNumber + " 
");
    }
    else
    
{
      addToJList(formattedNumber + "  
");
    }
    calculated = 
true;
    lastOperator = 5;
    
setTheFocus();
  }
 
  private void equals()
  {
    
if(lastOperator != 3)
    {
      
if(! calculated && lastOperator < 3) 
addNumber();
      if(! calculated && 
lastOperator == 4) multiplyNumber(true);
      if(! 
calculated && lastOperator == 5) 
divideNumber(true);
      addToJList(currentTotal + 
" =");
      addToJList("...  
");
      lastEntry = 
currentTotal;
      currentTotal = 
df.format(0.0);
      calculated = 
true;
      lastOperator = 
3;
      setTheFocus();
    
}
    else
    
{
      clearAll();
    
}
  }
//----------------------------------------------------KEYPAD 
ACTIONS
  public void actionPerformed(ActionEvent ae)
  
{
    for(int i=0; i<=11; i++)
    
{
      if(ae.getSource() == 
btn[i])
      
{
        
if(calculated)
        
{
          
txtFld.setText("");
          
calculated = false;
        
}
        if(ae.getSource() == btn[11] 
&& txtFld.getText().indexOf(".") > -1) 
break;
        if(checkLength()) 
txtFld.setText(txtFld.getText()+btn[i].getText());
        
break;
      }
    }
 
    if(ae.getSource() == btn[12]) 
multiplyNumber(false);
    else if(ae.getSource() == btn[13]) 
divideNumber(false);
    else if(ae.getSource() == btn[14]) 
subtractNumber();
    else if(ae.getSource() == btn[15]) 
addNumber();
    else if(ae.getSource() == btn[19]) 
equals();
    else if(ae.getSource() ==       btn[16]) 
cancel();
    else if(ae.getSource() == btn[17]) 
clearAll();
    else if(ae.getSource() == btn[18]) 
clearList();
    setTheFocus();
  }
 
  public void itemStateChanged(ItemEvent ie){}
  public void 
keyTyped(KeyEvent kb){}
  public void keyPressed(KeyEvent 
kb){}
  public void keyReleased(KeyEvent kb){}
  public void 
focusGained(FocusEvent fe){}
  public void focusLost(FocusEvent 
fe){}
//------------------------------------------------MOUSE 
ACTIONS
  public void mouseClicked(MouseEvent me)
  
{
    for(int i=0; i<radioBtn.length; 
i++)
    {
      if(me.getSource() ==  
 radioBtn[i])
      
{
        
radioBtn[i].setSelected(true);
        decimalPlaces = 
  i;
        
setDecimalPlaces();
        
clearAll();
        
break;
      }
    
}
    setTheFocus();
  }
 
  public void mousePressed(MouseEvent me)
  
{
    setTheFocus();
  }
 
  public void mouseReleased(MouseEvent me)
  
{
    setTheFocus();
  }
 
  public void mouseEntered(MouseEvent me){}
  public void 
mouseExited(MouseEvent 
me){}
//-----------------------------------------------------------------------
  
private void 
buildGUI()                    
//BUILD THE GUI
  {
    Container cp = 
getContentPane();
    cp.setLayout(new BorderLayout());
 
    Panel leftPanel = new 
Panel();         //ADD 
JLIST/SCOLLPANE
    
leftPanel.addMouseListener(this);
    list = new 
JList();
    list.setFont(new Font("Courier 
New",Font.PLAIN,12));
    
list.addMouseListener(this);
    myListModel = new 
DefaultListModel();
    
list.setVisibleRowCount(14);
    listScroll = new JScrollPane 
(list);
    leftPanel.add(listScroll);
    
cp.add(leftPanel,BorderLayout.WEST);
 
    Panel rightPanel = new Panel();
    
rightPanel.setLayout(new BorderLayout());
    
rightPanel.addMouseListener(this);
 
    txtFld  = new 
JTextField("0.00");              
//ADD TEXTFIELD
    
txtFld.setHorizontalAlignment(JTextField.RIGHT);
    
txtFld.setFont(new Font("Helvetica",Font.BOLD, 30));
    
txtFld.addKeyListener(this);
    txtFld.addKeyListener(new 
KeyAdapter()
    {
      public 
void keyTyped(KeyEvent ke)
      
{
        char keyChar = 
ke.getKeyChar();
        if(! 
validKey(keyChar)) ke.consume();
      
}
    });
    
txtFld.addFocusListener(this);
    
txtFld.addMouseListener(this);
    
txtFld.hasFocus();
    
rightPanel.add(txtFld,BorderLayout.NORTH);
 
    radioGrp = new 
ButtonGroup();            
//ADD OPTIONBUTTONS
    Panel decimals =       new 
Panel();
    decimals.setLayout(new 
FlowLayout());
    
decimals.addMouseListener(this);
    for(int i=0; i< 
radioBtn.length; i++)
    {
      
radioBtn[i] = new JRadioButton();
      
radioBtn[i].addItemListener(this);
      
radioBtn[i].addMouseListener(this);
      
radioGrp.add(radioBtn[i]);
      radioLbl[i] = new 
JLabel(String.valueOf(i));
    }
    
radioBtn[2].setSelected(true);
    radioLbl[6] = new 
JLabel("Decimals       ");
    
decimals.add(radioLbl[6]);
    for(int i = 0; i < 
radioBtn.length; i++)
    {
      
decimals.add(radioLbl[i]);
      
decimals.add(radioBtn[i]);
    }
    
rightPanel.add(decimals,BorderLayout.CENTER);
 
    Panel numPad = new 
Panel();                   
//ADD KEYPAD
    numPad.setLayout(new 
GridLayout(5,4));
    for(int i = 0; i < btn.length; 
i++)
    {
      btn[i] = new 
JButton();
      
btn[i].addActionListener(this);
      
btn[i].setFont(new Font("Serif",Font.BOLD, 
18));
      if(i<10) 
btn[i].setText(String.valueOf(i));
      else if(i 
== 10) btn[i].setText("00");
      else if(i == 11) 
btn[i].setText(".");
      else if(i == 12) 
btn[i].setText("x");
      else if(i == 13) 
btn[i].setText("÷");
      else if(i == 14) 
btn[i].setText("-");
      else if(i == 15) 
btn[i].setText("+");
      else if(i == 16) 
btn[i].setText("Cancel");
      else if(i == 17) 
btn[i].setText("Clr All");
      else if(i == 18) 
btn[i].setText("CIr List");
      else if(i == 19) 
btn[i].setText("=");
    }
    
btn[12].setFont(new Font("Serif",Font.PLAIN, 18));
    
btn[16].setFont(new Font("Serif",Font.BOLD, 11));
    
btn[17].setFont(new Font("Serif",Font.BOLD, 11));
    
btn[18].setFont(new Font("Serif",Font.BOLD, 11));
    
btn[16].setMnemonic(KeyEvent.VK_C);
    
btn[17].setMnemonic(KeyEvent.VK_A);
    
btn[18].setMnemonic(KeyEvent.VK_L);
    
numPad.add(btn[16]);
    
numPad.add(btn[17]);
    
numPad.add(btn[18]);
    
numPad.add(btn[12]);
    
numPad.add(btn[7]);
    
numPad.add(btn[8]);
    
numPad.add(btn[9]);
    
numPad.add(btn[13]);
    
numPad.add(btn[4]);
    
numPad.add(btn[5]);
    
numPad.add(btn[6]);
    
numPad.add(btn[14]);
    
numPad.add(btn[1]);
    
numPad.add(btn[2]);
    
numPad.add(btn[3]);
    
numPad.add(btn[15]);
    
numPad.add(btn[0]);
    
numPad.add(btn[10]);
    
numPad.add(btn[11]);
    
numPad.add(btn[19]);
    
rightPanel.add(numPad,BorderLayout.SOUTH);
 
    
cp.add(rightPanel,BorderLayout.EAST);
    
setContentPane(cp);
  }
 
  public void setVisible(boolean visible)   //CENTER 
SCREEN
  {
    if(visible)
    
{
      Dimension dim = 
Toolkit.getDefaultToolkit().getScreenSize();
      
setLocation((dim.width - getWidth())/2, (dim.height - 
getHeight())/2);
    }
    
super.setVisible(visible);
  }
}
back   
top   
main page   
vb snippets page      
java snippets page     
vbscript snippets page   
email    
Page last modified