How To Create A Calculator In Java
In This Java Tutorial we will See How To Make A Calculator With Swith To Do The Basic Operations (+, -, /, *) And Clear Text Number By Number And Reset To Make Another Calc Using Java And Netbeans Editor .
Part 1
Part 2
Part 3
Project Source Code:
package javaapplication2;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
/**
*
* @author 1bestcsharp.blogspot.com
*/
public class JAVA_CALCULATOR extends javax.swing.JFrame {
/**
* Creates new form JAVA_CALCULATOR
*/
float num1 = 0, num2 = 0,oprClickCount = 0;
String opr;
boolean isOprClick = false, isEqualClick = false;
public JAVA_CALCULATOR() {
initComponents();
addAction();
}
// create action when the user click
public ActionListener createAction(JButton button){
ActionListener acLis = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// if the button is not an operation (is number include '.')
if(!isOperator(button))
{
if(isOprClick)// if an opration is clicked
{
num1 = Float.valueOf(jTextField1.getText());
jTextField1.setText("");
}
if(!jTextField1.getText().contains(".")){ //if the text dont contain '.'
if(jTextField1.getText().equals("0") && !button.getText().equals(".")){
// if jtext contain only 0 clear text
// and the button pressed is not '.'
jTextField1.setText(button.getText());
isOprClick = false;
}
else
{
jTextField1.setText(jTextField1.getText()+button.getText());
isOprClick = false;
}
}
else if(!button.getText().equals(".")){
jTextField1.setText(jTextField1.getText()+button.getText());
isOprClick = false;
}
}
else{// if the button is an operation [+ - * / =]
if(oprClickCount == 0)// if an operation is clicked for the first time
{
oprClickCount++;
// convert the textField to float and set it into num1
num1 = Float.valueOf(jTextField1.getText());
opr = button.getText();
isOprClick = true;
}else{
if(!button.getText().equals("="))// if the operation is not '='
{
if(!isEqualClick)
{
num2 = Float.valueOf(jTextField1.getText());
jTextField1.setText(Float.toString(calc(opr, num1, num2)));
opr = button.getText();
num2 = Float.valueOf(jTextField1.getText());
isOprClick = true;
isEqualClick = false;
}else{
isEqualClick = false;
opr = button.getText();
}
}
else{
num2 = Float.valueOf(jTextField1.getText());
jTextField1.setText(Float.toString(calc(opr, num1, num2)));
num1 = Float.valueOf(jTextField1.getText());
isOprClick = true;
isEqualClick = true;
}
}
}
}
};
return acLis;
}
// calc two numbers and return the result
public float calc(String op, float n1, float n2)
{
float result = 0;
switch(op){
case "+":
result = n1 + n2;
break;
case "-":
result = n1 - n2;
break;
case "*":
result = n1 * n2;
break;
case "/":
if(n2 != 0)
result = n1 / n2;
break;
default:
break;
}
return result;
}
// check if the button is an operator
public boolean isOperator(JButton button)
{
String buttonText = button.getText();
if(buttonText.equals("+") || buttonText.equals("-") ||
buttonText.equals("*") || buttonText.equals("/") ||
buttonText.equals("="))
{
return true;
}
else{
return false;
}
}
// add action to all buttons
public void addAction(){
Component[] components = jPanel1.getComponents();
for(Component component : components){
if(component instanceof JButton){
JButton button = (JButton) component;
button.addActionListener(createAction(button));
}
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
jButton7 = new javax.swing.JButton();
jButton8 = new javax.swing.JButton();
jButton9 = new javax.swing.JButton();
jButton10 = new javax.swing.JButton();
jButton11 = new javax.swing.JButton();
jButton12 = new javax.swing.JButton();
jButton13 = new javax.swing.JButton();
jButton14 = new javax.swing.JButton();
jButton15 = new javax.swing.JButton();
jButton16 = new javax.swing.JButton();
jButton17 = new javax.swing.JButton();
jButton18 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(153, 153, 153));
jTextField1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jTextField1.setText("0");
jButton1.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton1.setText("+");
jButton2.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton2.setText("-");
jButton3.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton3.setText("*");
jButton4.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton4.setText("/");
jButton5.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton5.setText("0");
jButton6.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton6.setText("1");
jButton7.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton7.setText("2");
jButton8.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton8.setText("3");
jButton9.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton9.setText("4");
jButton10.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton10.setText("5");
jButton11.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton11.setText("6");
jButton12.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton12.setText("7");
jButton13.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton13.setText("8");
jButton14.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton14.setText("9");
jButton15.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton15.setText(".");
jButton16.setFont(new java.awt.Font("Tahoma", 0, 36)); // NOI18N
jButton16.setText("=");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jButton13, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton14, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton15, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton16, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jButton9, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton10, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton11, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton12, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton8, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField1)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(24, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton8, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton9, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton10, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton11, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton12, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton13, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton14, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton15, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton16, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jButton17.setBackground(new java.awt.Color(51, 102, 255));
jButton17.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jButton17.setForeground(new java.awt.Color(255, 255, 255));
jButton17.setText("reset");
jButton17.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton17ActionPerformed(evt);
}
});
jButton18.setBackground(new java.awt.Color(255, 102, 0));
jButton18.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jButton18.setForeground(new java.awt.Color(255, 255, 255));
jButton18.setText("clear");
jButton18.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton18ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(jButton17, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton18, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(24, 24, 24))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton17, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton18, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 14, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton17ActionPerformed(java.awt.event.ActionEvent evt) {
num1 = 0;
num2 = 0;
oprClickCount = 0;
opr = "";
isOprClick = false;
isEqualClick = false;
jTextField1.setText("0");
}
private void jButton18ActionPerformed(java.awt.event.ActionEvent evt) {
if(jTextField1.getText().length() > 0)
{
String txt = jTextField1.getText();
String txtMinus = txt.substring(0, txt.length() - 1);
jTextField1.setText(txtMinus);
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JAVA_CALCULATOR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JAVA_CALCULATOR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JAVA_CALCULATOR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JAVA_CALCULATOR.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JAVA_CALCULATOR().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton10;
private javax.swing.JButton jButton11;
private javax.swing.JButton jButton12;
private javax.swing.JButton jButton13;
private javax.swing.JButton jButton14;
private javax.swing.JButton jButton15;
private javax.swing.JButton jButton16;
private javax.swing.JButton jButton17;
private javax.swing.JButton jButton18;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JButton jButton7;
private javax.swing.JButton jButton8;
private javax.swing.JButton jButton9;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}
OUTPUT:
More Java Projects:
More Java Projects:
Download Projects Source Code