SwingCalculator
Hi I am doing a calculator as the standard one from Microsoft but it doesn't work the same.
When i input a number and then press an operator button, press a number and then if i want to press a operator button again it doesn't display the result and in fact doesn't work. Here my code does anyone have an idea.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
publicclass SwingCalculatorextends JFrameimplements ActionListener{
private JTextField ioArea, curArea;
private Component curComponent;
private JPopupMenu Menu;
private JButton plusButton, minusButton, timesButton, divideButton, equalButton, clearButton, exitButton , deleteButton, dotButton;
private JButton Button0, Button1 , Button2 , Button3 , Button4 , Button5 , Button6 , Button7 , Button8 , Button9;
private JButton saButton;
private JMenuBar menubar;
private JMenu choicesMenu;
private JMenuItem copyItem, cutItem, pasteItem, deleteItem, exitItem;
private DecimalFormat dfmt =new DecimalFormat("#0.###############################");
privatedouble n1 = 0;
privatedouble n2 = 0;
class MyListenerextends WindowAdapter{
publicvoid windowClosing(WindowEvent event){
System.exit(0);
}
}
class MyMouseextends MouseAdapter{
publicvoid mouseReleased(MouseEvent mEvent){
if (mEvent.isPopupTrigger());
{
curComponent = mEvent.getComponent();
ioArea = (JTextField) curComponent;// for cut, copy and paste method
}
}
}// end class MyMouse
SwingCalculator(){
setTitle("MS CALCULATOR");
addWindowListener(new MyListener());
ioArea =new JTextField();
ioArea.setBorder(BorderFactory.createTitledBorder("Input number"));
ioArea.setToolTipText("Enter numbers here");
ioArea.setHorizontalAlignment(JTextField.RIGHT);
ioArea.setEditable(false);
ioArea.setBackground(Color.white);
MyMouse handleMouse =new MyMouse();
ioArea.addMouseListener(handleMouse);
// define buttons and assign listeners
plusButton =new JButton("+");
minusButton =new JButton("-");
timesButton =new JButton("*");
divideButton =new JButton("/");
equalButton =new JButton("=");
dotButton =new JButton(".");
Button0 =new JButton("0");
Button1 =new JButton("1");
Button2 =new JButton("2");
Button3 =new JButton("3");
Button4 =new JButton("4");
Button5 =new JButton("5");
Button6 =new JButton("6");
Button7 =new JButton("7");
Button8 =new JButton("8");
Button9 =new JButton("9");
saButton =new JButton("SA");
clearButton =new JButton("AC");
clearButton.setForeground(Color.red);
clearButton.setMnemonic(KeyEvent.VK_A);
deleteButton =new JButton("C");
deleteButton.setMnemonic(KeyEvent.VK_C);
deleteButton.setForeground(Color.red);
exitButton =new JButton("Exit");
exitButton.setMnemonic(KeyEvent.VK_E);
exitButton.setForeground(Color.red);
plusButton.addActionListener(this);
minusButton.addActionListener(this);
timesButton.addActionListener(this);
divideButton.addActionListener(this);
equalButton.addActionListener(this);
saButton.addActionListener(this);
Button0.addActionListener(this);
Button1.addActionListener(this);
Button2.addActionListener(this);
Button3.addActionListener(this);
Button4.addActionListener(this);
Button5.addActionListener(this);
Button6.addActionListener(this);
Button7.addActionListener(this);
Button8.addActionListener(this);
Button9.addActionListener(this);
clearButton.addActionListener(this);
deleteButton.addActionListener(this);
exitButton.addActionListener(this);
dotButton.addActionListener(this);
menubar =new JMenuBar();
choicesMenu =new JMenu("Edit");
copyItem =new JMenuItem("Copy");
cutItem =new JMenuItem("Cut");
pasteItem =new JMenuItem("Paste");
exitItem =new JMenuItem("Exit");
deleteItem =new JMenuItem("Delete");
choicesMenu.add(copyItem);
choicesMenu.add(cutItem);
choicesMenu.add(pasteItem);
choicesMenu.add(deleteItem);
choicesMenu.addSeparator();
choicesMenu.add(exitItem);
copyItem.addActionListener(this);
cutItem.addActionListener(this);
pasteItem.addActionListener(this);
deleteItem.addActionListener(this);
exitItem.addActionListener(this);
plusButton.setToolTipText("PlusButton");
minusButton.setToolTipText("MinusButton");
timesButton.setToolTipText("TimesButton");
divideButton.setToolTipText("DivideButton");
saButton.setToolTipText("Select All");
// set up panels, layout mangers add components
JPanel mainPanel =new JPanel();
mainPanel.setLayout(new BorderLayout());
JPanel ioPanel =new JPanel();
ioPanel.setLayout(new GridLayout(1,1));
JPanel butPanel =new JPanel();
butPanel.setLayout(new GridLayout(5,4,5,5));
ioPanel.add(ioArea);
Font spe =new Font("Arial", Font.PLAIN, 16);
plusButton.setFont(spe);
timesButton.setFont(spe);
clearButton.setFont(spe);
minusButton.setFont(spe);
divideButton.setFont(spe);
exitButton.setFont(spe);
deleteButton.setFont(spe);
dotButton.setFont(spe);
butPanel.add(saButton);
butPanel.add(clearButton);
butPanel.add(deleteButton);
butPanel.add(exitButton);
butPanel.add(Button7);
butPanel.add(Button8);
butPanel.add(Button9);
butPanel.add(divideButton);
butPanel.add(Button4);
butPanel.add(Button5);
butPanel.add(Button6);
butPanel.add(timesButton);
butPanel.add(Button1);
butPanel.add(Button2);
butPanel.add(Button3);
butPanel.add(minusButton);
butPanel.add(Button0);
butPanel.add(dotButton);
butPanel.add(equalButton);
butPanel.add(plusButton);
menubar.add(choicesMenu);
setJMenuBar(menubar);
mainPanel.add(ioPanel,BorderLayout.NORTH);
mainPanel.add(butPanel,BorderLayout.SOUTH);
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(mainPanel);
}catch (Exception e){
System.out.println(e);
}
// add panel to the frame
getContentPane().add(mainPanel);
pack();
setVisible(true);
}// end contructor
publicstaticvoid main(String[] args){
SwingCalculator mycalculator =new SwingCalculator();
mycalculator.setResizable(false);// set the window resizable
}
char operation =' ';
double tanswer;
boolean enter =false;
publicvoid actionPerformed(ActionEvent event){
String answer;
if(event.getSource() == Button0){
if(enter){
ioArea.setText(dfmt.format(0));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(0));
}
}elseif(event.getSource() == Button1){
if(enter){
ioArea.setText(dfmt.format(1));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(1));
}
}elseif(event.getSource() == Button2){
if(enter){
ioArea.setText(dfmt.format(2));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(2));
}
}elseif(event.getSource() == Button3){
if(enter){
ioArea.setText(dfmt.format(3));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(3));
}
}elseif(event.getSource() == Button4){
if(enter){
ioArea.setText(dfmt.format(4));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(4));
}
}elseif(event.getSource() == Button5){
if(enter){
ioArea.setText(dfmt.format(5));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(5));
}
}elseif(event.getSource() == Button6){
if(enter){
ioArea.setText(dfmt.format(6));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(6));
}
}elseif(event.getSource() == Button7){
if(enter){
ioArea.setText(dfmt.format(7));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(7));
}
}elseif(event.getSource() == Button8){
if(enter){
ioArea.setText(dfmt.format(8));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(8));
}
}elseif(event.getSource() == Button9){
if(enter){
ioArea.setText(dfmt.format(9));
enter =false;
}else{
ioArea.setText(ioArea.getText() + dfmt.format(9));
}
}elseif(event.getSource() == dotButton){
if(enter){
ioArea.setText(".");
enter =false;
}else{
ioArea.setText(ioArea.getText() +".");
}
}elseif(event.getSource() == saButton){
ioArea.requestFocus();
ioArea.selectAll();
}if(event.getSource() == plusButton){
operation ='p';
String s1 = ioArea.getText();
enter =false;
try{
n1 = Double.parseDouble(s1);
}
catch(NumberFormatException err){
ioArea.setText("Error converting number");
}
ioArea.setText(" ");
}elseif(event.getSource() == minusButton){
operation ='m';
String s1 = ioArea.getText();
enter =false;
try{
n1 = Double.parseDouble(s1);
}
catch(NumberFormatException err){
ioArea.setText("Error converting number");
}
ioArea.setText(" ");
}elseif(event.getSource() == timesButton){
operation ='t';
String s1 = ioArea.getText();
enter =false;
try{
n1 = Double.parseDouble(s1);
}
catch(NumberFormatException err){
ioArea.setText("Error converting number");
}
ioArea.setText(" ");
}elseif(event.getSource() == divideButton){
operation ='d';
String s1 = ioArea.getText();
enter =false;
try{
n1 = Double.parseDouble(s1);
}
catch(NumberFormatException err){
ioArea.setText("Error converting number");
}
ioArea.setText(" ");
}if(event.getSource() == equalButton){
String s2 = ioArea.getText();
enter =true;
try{
n2 = Double.parseDouble(s2);
}
catch (NumberFormatException err){
ioArea.setText("Error");
}
if (operation =='p'){
tanswer = n1 + n2;
ioArea.setText(dfmt.format(tanswer));
}elseif(operation =='m'){
tanswer = n1 - n2;
ioArea.setText(dfmt.format(tanswer));
}elseif(operation =='t'){
tanswer = n1 * n2;
ioArea.setText(dfmt.format(tanswer));
}elseif(operation =='d'){
if(n2 == 0){
ioArea.setText("Divide by zero");
}else{
tanswer = n1 / n2;
ioArea.setText(dfmt.format(tanswer));
}
}
}elseif(event.getSource() == clearButton){
ioArea.setText("");
}elseif(event.getSource() == deleteButton){
n1 = 0;
n2 = 0;
ioArea.setText("");
}elseif(event.getSource() == exitButton){
int returnvalue = JOptionPane.showConfirmDialog(this,"Are you sure?","Exit application", JOptionPane.YES_NO_OPTION);
if (returnvalue == JOptionPane.YES_OPTION)
System.exit(0);
else
return;
}elseif(event.getSource() == exitItem){
int returnvalue = JOptionPane.showConfirmDialog(this,"Are you sure?","Exit application", JOptionPane.YES_NO_OPTION);
if (returnvalue == JOptionPane.YES_OPTION)
System.exit(0);
else
return;
}elseif(event.getSource() == copyItem){
ioArea.setEditable(true);
ioArea.copy();
ioArea.setEditable(false);
}elseif(event.getSource() == cutItem){
ioArea.setEditable(true);
ioArea.cut();
ioArea.setEditable(false);
}elseif(event.getSource() == pasteItem){
ioArea.setEditable(true);
ioArea.paste();
ioArea.setEditable(false);
}elseif(event.getSource() == deleteItem){
ioArea.setText("");
}
}
}// end class

