Swing error

Hello Experts,

I have a problem with the main method of a swing calculator
It returns :
java.lang.IllegalArgumentException: adding container's parent to itself
      at java.awt.Container.addImpl(Container.java:1005)
      at java.awt.Container.add(Container.java:928)
      at javax.swing.JFrame.addImpl(JFrame.java:480)
      at java.awt.Container.add(Container.java:351)
      at Calculator.main(Calculator.java:29)
java.lang.IllegalArgumentException: adding container's parent to itself
      at java.awt.Container.addImpl(Container.java:1005)
      at java.awt.Container.add(Container.java:928)
      at javax.swing.JFrame.addImpl(JFrame.java:480)
      at java.awt.Container.add(Container.java:351)
      at Calculator.main(Calculator.java:29)
java.lang.IllegalArgumentException: adding container's parent to itself
      at java.awt.Container.addImpl(Container.java:1005)
      at java.awt.Container.add(Container.java:928)
      at javax.swing.JFrame.addImpl(JFrame.java:480)
      at java.awt.Container.add(Container.java:351)
      at Calculator.main(Calculator.java:29)


Can you give a look to it and tell me how to fix it  ???

Thanks in advance!
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.*;
 
public class Calculator extends JFrame implements ActionListener 
{
    public static final int Width = 500;
    public static final int Height = 500;
    
    private TextField Board;
    private JButton jbo0, jbo1, jbo2, jbo3, jbo4, jbo5, jbo6, jbo7, jbo8, jbo9, 
                    jboAddition, jboSubtraction, jboMultiplication, jboDivision,
                    jboDot, jboLp, jboRp, jboClear, jboResult; 
                   
                    
    public static void main(String args[])
  {
    JFrame applet = new Calculator();
    JFrame frame = new JFrame();
    frame.add(frame);
    frame.setSize(Width,Height);
    frame.show();
  }
    public void Calc()
    {
  
        //Numbers
        
        JButton jbo0 = new JButton("0");
        jbo0.addActionListener(this);
        jbo1 = new JButton("1");
        add(jbo1);
        jbo1.addActionListener(this);
        jbo2 = new JButton("2");
        add(jbo2);
        jbo2.addActionListener(this);
        jbo3 = new JButton("3");
        add(jbo3);
        jbo3.addActionListener(this);
        jbo4 = new JButton("4");
        add(jbo4);
        jbo4.addActionListener(this);
        jbo5 = new JButton("5");
        add(jbo5);
        jbo5.addActionListener(this);
        jbo6 = new JButton("6");
        add(jbo6);
        jbo6.addActionListener(this);
        jbo7 = new JButton("7");
        add(jbo7);
        jbo7.addActionListener(this);
        jbo8 = new JButton("8");
        add(jbo8);
        jbo8.addActionListener(this);
        jbo9 = new JButton("9");
        add(jbo9);
        jbo9.addActionListener(this);
        
        //Math Operations
        
        jboAddition = new JButton("+");
        add(jboAddition);
        jboAddition.addActionListener(this);
        jboSubtraction = new JButton("-");
        add(jboSubtraction);
        jboSubtraction.addActionListener(this);
        jboMultiplication = new JButton("*");
        add(jboMultiplication);
        jboMultiplication.addActionListener(this);
        jboDivision = new JButton("/");
        add(jboDivision);
        jboDivision.addActionListener(this);
        
        //Result etc..
        
        jboDot = new JButton(".");
        add(jboDot);
        jboDot.addActionListener(this);
        jboLp = new JButton("(");
        add(jboLp);
        jboLp.addActionListener(this);
        jboRp = new JButton(")");
        add(jboRp);
        jboRp.addActionListener(this);
        jboClear = new JButton("C");
        add(jboClear);
        jboClear.addActionListener(this);
        jboResult = new JButton("=");
        add(jboResult);
        jboResult.addActionListener(this);
        
    }
    
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JButton)
        {
            JButton buClicked = (JButton) e.getSource();
            if (buClicked == jboClear) boardClear();
            else if (buClicked == jboResult) Calculate();
        }
        else
        {
            Calculate();
        }
    }
    
    public void UserInput(JButton buClicked)
    {
        String input;
        input = Board.getText();
        if (buClicked == jbo0)
        {
            Board.setText(input + "0");
        }
        if (buClicked == jbo1)
        {
            Board.setText(input + "1");
        }
        if (buClicked == jbo2)
        {
            Board.setText(input + "2");
        }
        if (buClicked == jbo3)
        {
            Board.setText(input + "3");
        }
        if (buClicked == jbo4)
        {
            Board.setText(input + "4");
        }
        if (buClicked == jbo5)
        {
            Board.setText(input + "5");
        }
        if (buClicked == jbo6)
        {
            Board.setText(input + "6");
        }
        if (buClicked == jbo7)
        {
            Board.setText(input + "7");
        }
        if (buClicked == jbo8)
        {
            Board.setText(input + "8");
        }
        if (buClicked == jbo9)
        {
            Board.setText(input + "9");
        }
        if (buClicked == jboAddition)
        {
            Board.setText(input + "+");
        }
        if (buClicked == jboSubtraction)
        {
            Board.setText(input + "-");
        }
        if (buClicked == jboMultiplication)
        {
            Board.setText(input + "*");
        }
        if (buClicked == jboDivision)
        {
            Board.setText(input + "/");
        }
        if (buClicked == jboDot)
        {
            Board.setText(input + ".");
        }
        if (buClicked == jboLp)
        {
            Board.setText(input + "(");
        }
        if (buClicked == jboRp)
        {
            Board.setText(input + ")");
        }
    }
    
     private void boardClear()
    {
        Board.setText("");
    }
    
    public void Calculate()
    {
        int counter;
        int numParenthesis = 0;
        int lenInput;
        String calc;
        String Answer = "";
        char NumOther;
        
        calc = Board.getText();
        lenInput = calc.length();
        
        for (counter = 0; counter < lenInput; counter++)
        {
            NumOther = calc.charAt(counter);
            if (NumOther == ')')
            {
                numParenthesis--;
            }
            if (NumOther == '(')
            {
                numParenthesis++;
            }
            if ((NumOther < '(') || (NumOther > '9') || (NumOther == '.'))
            {
                Board.setText("Error");
            }
            if (NumOther == '.' && (counter + 1 < calc.length()))
            {
                for (int k = counter + 1; (k < calc.length()) && ((Character.isDigit(calc.charAt(k))) || ((calc.charAt(k))) == '.'); k++)
                {
                    if (calc.charAt(k) == '.')
                    {
                        Board.setText("Error");
                    }
                }
            }
        }
        if (numParenthesis != 0)
        {
            Board.setText("Error");
        }
        else
        {
            Answer = Calculate2(calc);
            Board.setText(Answer);
        }
    }
 
        
    private String CalculatorImp(String oper1, String oper2, char Oper)
    {
        Double op1, op2;
        double ops1, ops2;
        double ans = 0;
        String result;
        
        op1 = new Double (oper1);
        op2 = new Double (oper2);
        ops1 = op1.doubleValue();
        ops2 = op2.doubleValue();
        
        if (Oper == '+')
        {
            ans = ops1 + ops2;
        }
        if (Oper == '-')
        {
            ans = ops1 - ops2;
        }
        if (Oper == '*')
        {
            ans = ops1 * ops2 ;
        }
        if (Oper == '/')
        {
            ans = ops1/ops2;
        }
        
        result = Double.toString(ans);
        return result;
    }
 
        
    
    private String Calculate2(String process)
    {
        String answer = process;
        String op1 = "";
        String op2 = "";
        char userinput;
        int index = 0;
        int indexL = 0;
        int indexR = 0;
        int numInput = answer.length();
        int numPar = 0;
        int matchPar = 0;
        int indexOp1 = 0;
        int indexOp2 = 0;
        
        if (answer  != "Error")
        {
            for (index = 0; index < numInput; index++)
            {
                userinput = answer.charAt(index);
                
                if (userinput  == '(')
                {
                    if (matchPar == 0)
                    {
                        indexOp1 = index;
                    }
                    matchPar++;
                    numPar++;
                }
                if (userinput == ')')
                {
                    matchPar--;
                    if (matchPar ==0)
                    {
                        indexOp2 = index;
                    }
                }
            }
            if (indexOp1 + 1 == indexOp2)
            {
                Board.setText("Error");
            }
            if (answer == "Error"  && numPar > 0)
            {
                if (indexOp1 == 0)
                {
                    if (indexOp2 == (numInput - 1))
                    {
                        if (indexOp1 != indexOp2)
                        {
                            answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        }
                    }
                }
                else if (indexOp1 == 0 && indexOp2 > 0)
                {
                    if ((Character.isDigit(answer.charAt(indexOp2 + 1))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if ((indexOp1 > 0) && (indexOp2 > 0) && (indexOp2 != numInput - 1))
                {
                    if (((Character.isDigit(answer.charAt(indexOp2 + 1 ))) ||  (Character.isDigit(answer.charAt(indexOp1 - 1 ))) ))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if (indexOp2 == numInput - 1 && indexOp1 > 0)
                {
                    if (((Character.isDigit(answer.charAt(indexOp1 - 1)))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
            }
            if (numPar == 0)
            {
                if (answer != "Error")
                {
                    if (!(Character.isDigit(answer.charAt(0))))
                    {
                        if (answer.charAt(0) != '-')
                        {
                            if (!(Character.isDigit(answer.charAt(answer.length() - 1))))
                            {
                                Board.setText("Error");
                            }
                        }
                    }
                }
            }
            
            for (index = 0; index < answer.length() && (answer == "Error"); index++)
            {
                userinput = answer.charAt(index);
                
                if (userinput == '*' || userinput == '/')
                {
                    if (!(Character.isDigit(answer.charAt(index-1))) || (!(Character.isDigit(answer.charAt(index + 1)))))
                    {
                        if (answer.charAt(index + 1) != '-')
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer.charAt(index + 1) == '-')
                    {
                        if (!(Character.isDigit(answer.charAt(index + 2))))
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer == "Error")
                    {
                        indexL = index - 1;
                        
                        if (indexL > 2)
                        {
                            if ((answer.charAt(indexL - 1)) == '-')
                            {
                                if ((answer.charAt(indexL - 2)) == 'E')
                                {
                                    indexL = indexL -2;
                                }
                            }
                        }
                            while ((indexL  > 0) && ((Character.isDigit(answer.charAt(indexL - 2)) || ((answer.charAt(indexL - 1)) == '.') || ((answer.charAt(indexL - 1)) == 'E' ))))
                            {
                                indexL--;
                            }
                            if (indexL == 1)
                            {
                                if ((answer.charAt(indexL - 1)) == '-')
                                {
                                    indexL--;
                                }
                            }
                            if (indexL > 2)
                            {
                                if (((answer.charAt(indexL - 1)) == '-') && !(Character.isDigit(answer.charAt(indexL - 2))))
                                    {
                                        indexL--;
                                    }
                            }
                            op2 = answer.substring(index + 1, indexR + 1);
                          
                            }
                        }
                    }
                }
                
                
                for (index = 0; index < answer.length() && (answer != "Error"); index++)
                {
                    if (index == 0)
                    {
                        index = 1;
                    }
                }
                if (index > 0)
                {
                   
                        if (answer.charAt(index + 1) == '-')
                        {
                            index = index + 2;
                        }
                   
                }
                
                userinput = answer.charAt(index);
                
                if ((userinput == '+') || (userinput == '-'))
                {
                    if (!(Character.isDigit(answer.charAt(index - 1))))
                    {
                        Board.setText("Error");
                    }
                    if (!(Character.isDigit(answer.charAt(index + 1))))
                    {
                        Board.setText("Error");
                    }
                    if ((answer.charAt(index+1) == '-') && (!(Character.isDigit(answer.charAt(index+2)))))
                    {
                        Board.setText("Error");
                    }
                    if (answer != "Error")
                    {
                        indexL = 0;
                        op1 = answer.substring(indexL , index);
                        indexR = index + 1;
                        while((indexR < answer.length()-1) && ((Character.isDigit(answer.charAt(indexR + 1))) || ((answer.charAt(indexR + 1)) == '.') || ((answer.charAt(indexR + 1)) == 'E')))
                        {
                            indexR++;
                            if (indexR < answer.length() - 2)
                            {
                               
                                    if ((answer.charAt(indexR + 1)) == '-')
                                    {
                                        indexR++;
                                    }
                              
                            }
                        }
                        op2 = answer.substring(index + 1, indexR + 1);
                        answer = CalculatorImp(op1, op2, userinput ) + answer.substring(indexR + 1);
                        index = 0;
                    }
                }
            
        
        return answer;
    }
 
}

Open in new window

perdoname_Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ksivananthCommented:
try this,

public static void main(String args[])
  {
    JFrame applet = new Calculator();
    applet.setSize(Width,Height);
    applet.show();
  }
0
ramiseesniblicCommented:
frame.add(frame)

Adding to itself
0
ramiseesniblicCommented:
There are multiple errors in the code.

Are you using an IDE to write it?
0
Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Ryan_KemptCommented:
The problem exists on line 29 where you try to add frame to frame.

frame.add(frame);

I would change quite a bit structurally (like adding a panel that you've imported but never decided to use!);

JFrame outputFrame = new JFrame();
Container outputPane = outputFrame.getContentPane();
outputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
outputFrame.setSize(Width, Height);
outputPane.setLayout(new GridLayout (3, 3));

Panel panel1 = new Panel();
outputPane.add(panel1);

//panel1.add(allyourstuff);
//panel1.add(moreofyourstuff);

outputFrame.setVisible(true);
0
perdoname_Author Commented:
Oh thanks!
but when im trying to add a button to panel it returns an error : "non static variable jbo0 cannot be referenced from a static context".

panel1.add(jbo0);

 public static void main(String args[])
  {
    JFrame outputFrame = new JFrame();
    Container outputPane = outputFrame.getContentPane();
    outputFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    outputFrame.setSize(Width, Height);
    outputPane.setLayout(new GridLayout (3, 3));

    Panel panel1 = new Panel();
    outputPane.add(panel1);
    panel1.add(jbo0);

//panel1.add(allyourstuff);
//panel1.add(moreofyourstuff);

outputFrame.setVisible(true);
  }


Can you tell me why's that happening ? / How can this be solved ?

Thanks in advance!!
0
ramiseesniblicCommented:
It is becuase you are trying to add it in the static main method.

You really need to add the buttons in the objects constructor.
0
ramiseesniblicCommented:
Try changing the method "public void Calc()" to "public Calculator()"
0
ramiseesniblicCommented:
Therefore:


public static void main(String args[]) {
		JFrame outputFrame = new Calculator();
		outputFrame.setVisible(true);
	}
 
	public Calculator() {
 
		Container outputPane = this.getContentPane();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(Width, Height);
		outputPane.setLayout(new GridLayout(3, 3));
 
		Panel panel1 = new Panel();
		outputPane.add(panel1);
 
		// Numbers
		setLayout(new FlowLayout());
		JButton jbo0 = new JButton("0");
		jbo0.addActionListener(this);
		add(jbo0);
		jbo1 = new JButton("1");
		add(jbo1);
		jbo1.addActionListener(this);
		jbo2 = new JButton("2");
		add(jbo2);
		jbo2.addActionListener(this);
		jbo3 = new JButton("3");
		add(jbo3);
		jbo3.addActionListener(this);
		jbo4 = new JButton("4");
		add(jbo4);
		jbo4.addActionListener(this);
		jbo5 = new JButton("5");
		add(jbo5);
		jbo5.addActionListener(this);
		jbo6 = new JButton("6");
		add(jbo6);
		jbo6.addActionListener(this);
		jbo7 = new JButton("7");
		add(jbo7);
		jbo7.addActionListener(this);
		jbo8 = new JButton("8");
		add(jbo8);
		jbo8.addActionListener(this);
		jbo9 = new JButton("9");
		add(jbo9);
		jbo9.addActionListener(this);
 
		// Math Operations
 
		jboAddition = new JButton("+");
		add(jboAddition);
		jboAddition.addActionListener(this);
		jboSubtraction = new JButton("-");
		add(jboSubtraction);
		jboSubtraction.addActionListener(this);
		jboMultiplication = new JButton("*");
		add(jboMultiplication);
		jboMultiplication.addActionListener(this);
		jboDivision = new JButton("/");
		add(jboDivision);
		jboDivision.addActionListener(this);
 
		// Result etc..
 
		jboDot = new JButton(".");
		add(jboDot);
		jboDot.addActionListener(this);
		jboLp = new JButton("(");
		add(jboLp);
		jboLp.addActionListener(this);
		jboRp = new JButton(")");
		add(jboRp);
		jboRp.addActionListener(this);
		jboClear = new JButton("C");
		add(jboClear);
		jboClear.addActionListener(this);
		jboResult = new JButton("=");
		add(jboResult);
		jboResult.addActionListener(this);
 
	}

Open in new window

0
ramiseesniblicCommented:
Mistake in above....

Prefix occurances of  "add" with "outputPane."  
e.g. outputPane.add(jbo0);

sorry
0
perdoname_Author Commented:
thanks but now i get an error : cannot find symbol variable outputFrame
on that line : "        Container outputPane = outputFrame.getContentPane();"

Why's that happening ?
0
ramiseesniblicCommented:
Sorry..  Having bad day.

Container outputPane = this.getContentPane();

Open in new window

0
perdoname_Author Commented:
Thanks!
But why do i get an empty window instead of a calculator? [ i mean after running the main method]

Thanks in advance!

import java.awt.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener
{
    public static final int Width = 500;
    public static final int Height = 500;
   
    private TextField Board;
    private JButton jbo0, jbo1, jbo2, jbo3, jbo4, jbo5, jbo6, jbo7, jbo8, jbo9,
                    jboAddition, jboSubtraction, jboMultiplication, jboDivision,
                    jboDot, jboLp, jboRp, jboClear, jboResult;
                   
   /*                
    public static void main(String args[])
  {
    JFrame applet = new Calculator();
    JFrame frame = new JFrame();
    frame.add(frame);
    frame.setSize(Width,Height);
    frame.show();
  }
  */
 
 public static void main(String args[])
  {
    JFrame outputFrame = new Calculator();
   

//panel1.add(allyourstuff);
//panel1.add(moreofyourstuff);

    outputFrame.setVisible(true);
  }
    public void Calculator()
    {
        Container outputPane = this.getContentPane();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(Width, Height);
        outputPane.setLayout(new GridLayout (3, 3));

        Panel panel1 = new Panel();

        //panel1.add(jbo0);
 
        //Numbers
        setLayout(new FlowLayout());
        setFont(new Font("Helvetica", Font.PLAIN, 8));

        JButton jbo0 = new JButton("0");
        jbo0.addActionListener(this);
        outputPane.add(jbo0);
        jbo1 = new JButton("1");
        outputPane.add(jbo1);
        jbo1.addActionListener(this);
        jbo2 = new JButton("2");
        outputPane.add(jbo2);
        jbo2.addActionListener(this);
        jbo3 = new JButton("3");
        outputPane.add(jbo3);
        jbo3.addActionListener(this);
        jbo4 = new JButton("4");
        outputPane.add(jbo4);
        jbo4.addActionListener(this);
        jbo5 = new JButton("5");
        outputPane.add(jbo5);
        jbo5.addActionListener(this);
        jbo6 = new JButton("6");
        outputPane.add(jbo6);
        jbo6.addActionListener(this);
        jbo7 = new JButton("7");
        outputPane.add(jbo7);
        jbo7.addActionListener(this);
        jbo8 = new JButton("8");
        outputPane.add(jbo8);
        jbo8.addActionListener(this);
        jbo9 = new JButton("9");
        outputPane.add(jbo9);
        jbo9.addActionListener(this);
       
        //Math Operations
       
        jboAddition = new JButton("+");
        outputPane.add(jboAddition);
        jboAddition.addActionListener(this);
        jboSubtraction = new JButton("-");
        outputPane.add(jboSubtraction);
        jboSubtraction.addActionListener(this);
        jboMultiplication = new JButton("*");
        outputPane.add(jboMultiplication);
        jboMultiplication.addActionListener(this);
        jboDivision = new JButton("/");
        outputPane.add(jboDivision);
        jboDivision.addActionListener(this);
       
        //Result etc..
       
        jboDot = new JButton(".");
        outputPane.add(jboDot);
        jboDot.addActionListener(this);
        jboLp = new JButton("(");
        outputPane.add(jboLp);
        jboLp.addActionListener(this);
        jboRp = new JButton(")");
        outputPane.add(jboRp);
        jboRp.addActionListener(this);
        jboClear = new JButton("C");
        outputPane.add(jboClear);
        jboClear.addActionListener(this);
        jboResult = new JButton("=");
        outputPane.add(jboResult);
        jboResult.addActionListener(this);
       
    }
   
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JButton)
        {
            JButton buClicked = (JButton) e.getSource();
            if (buClicked == jboClear) boardClear();
            else if (buClicked == jboResult) Calculate();
        }
        else
        {
            Calculate();
        }
    }
   
    public void UserInput(JButton buClicked)
    {
        String input;
        input = Board.getText();
        if (buClicked == jbo0)
        {
            Board.setText(input + "0");
        }
        if (buClicked == jbo1)
        {
            Board.setText(input + "1");
        }
        if (buClicked == jbo2)
        {
            Board.setText(input + "2");
        }
        if (buClicked == jbo3)
        {
            Board.setText(input + "3");
        }
        if (buClicked == jbo4)
        {
            Board.setText(input + "4");
        }
        if (buClicked == jbo5)
        {
            Board.setText(input + "5");
        }
        if (buClicked == jbo6)
        {
            Board.setText(input + "6");
        }
        if (buClicked == jbo7)
        {
            Board.setText(input + "7");
        }
        if (buClicked == jbo8)
        {
            Board.setText(input + "8");
        }
        if (buClicked == jbo9)
        {
            Board.setText(input + "9");
        }
        if (buClicked == jboAddition)
        {
            Board.setText(input + "+");
        }
        if (buClicked == jboSubtraction)
        {
            Board.setText(input + "-");
        }
        if (buClicked == jboMultiplication)
        {
            Board.setText(input + "*");
        }
        if (buClicked == jboDivision)
        {
            Board.setText(input + "/");
        }
        if (buClicked == jboDot)
        {
            Board.setText(input + ".");
        }
        if (buClicked == jboLp)
        {
            Board.setText(input + "(");
        }
        if (buClicked == jboRp)
        {
            Board.setText(input + ")");
        }
    }
   
     private void boardClear()
    {
        Board.setText("");
    }
   
    public void Calculate()
    {
        int counter;
        int numParenthesis = 0;
        int lenInput;
        String calc;
        String Answer = "";
        char NumOther;
       
        calc = Board.getText();
        lenInput = calc.length();
       
        for (counter = 0; counter < lenInput; counter++)
        {
            NumOther = calc.charAt(counter);
            if (NumOther == ')')
            {
                numParenthesis--;
            }
            if (NumOther == '(')
            {
                numParenthesis++;
            }
            if ((NumOther < '(') || (NumOther > '9') || (NumOther == '.'))
            {
                Board.setText("Error");
            }
            if (NumOther == '.' && (counter + 1 < calc.length()))
            {
                for (int k = counter + 1; (k < calc.length()) && ((Character.isDigit(calc.charAt(k))) || ((calc.charAt(k))) == '.'); k++)
                {
                    if (calc.charAt(k) == '.')
                    {
                        Board.setText("Error");
                    }
                }
            }
        }
        if (numParenthesis != 0)
        {
            Board.setText("Error");
        }
        else
        {
            Answer = Calculate2(calc);
            Board.setText(Answer);
        }
    }

       
    private String CalculatorImp(String oper1, String oper2, char Oper)
    {
        Double op1, op2;
        double ops1, ops2;
        double ans = 0;
        String result;
       
        op1 = new Double (oper1);
        op2 = new Double (oper2);
        ops1 = op1.doubleValue();
        ops2 = op2.doubleValue();
       
        if (Oper == '+')
        {
            ans = ops1 + ops2;
        }
        if (Oper == '-')
        {
            ans = ops1 - ops2;
        }
        if (Oper == '*')
        {
            ans = ops1 * ops2 ;
        }
        if (Oper == '/')
        {
            ans = ops1/ops2;
        }
       
        result = Double.toString(ans);
        return result;
    }

       
   
    private String Calculate2(String process)
    {
        String answer = process;
        String op1 = "";
        String op2 = "";
        char userinput;
        int index = 0;
        int indexL = 0;
        int indexR = 0;
        int numInput = answer.length();
        int numPar = 0;
        int matchPar = 0;
        int indexOp1 = 0;
        int indexOp2 = 0;
       
        if (answer  != "Error")
        {
            for (index = 0; index < numInput; index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput  == '(')
                {
                    if (matchPar == 0)
                    {
                        indexOp1 = index;
                    }
                    matchPar++;
                    numPar++;
                }
                if (userinput == ')')
                {
                    matchPar--;
                    if (matchPar ==0)
                    {
                        indexOp2 = index;
                    }
                }
            }
            if (indexOp1 + 1 == indexOp2)
            {
                Board.setText("Error");
            }
            if (answer == "Error"  && numPar > 0)
            {
                if (indexOp1 == 0)
                {
                    if (indexOp2 == (numInput - 1))
                    {
                        if (indexOp1 != indexOp2)
                        {
                            answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        }
                    }
                }
                else if (indexOp1 == 0 && indexOp2 > 0)
                {
                    if ((Character.isDigit(answer.charAt(indexOp2 + 1))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if ((indexOp1 > 0) && (indexOp2 > 0) && (indexOp2 != numInput - 1))
                {
                    if (((Character.isDigit(answer.charAt(indexOp2 + 1 ))) ||  (Character.isDigit(answer.charAt(indexOp1 - 1 ))) ))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if (indexOp2 == numInput - 1 && indexOp1 > 0)
                {
                    if (((Character.isDigit(answer.charAt(indexOp1 - 1)))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
            }
            if (numPar == 0)
            {
                if (answer != "Error")
                {
                    if (!(Character.isDigit(answer.charAt(0))))
                    {
                        if (answer.charAt(0) != '-')
                        {
                            if (!(Character.isDigit(answer.charAt(answer.length() - 1))))
                            {
                                Board.setText("Error");
                            }
                        }
                    }
                }
            }
           
            for (index = 0; index < answer.length() && (answer == "Error"); index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput == '*' || userinput == '/')
                {
                    if (!(Character.isDigit(answer.charAt(index-1))) || (!(Character.isDigit(answer.charAt(index + 1)))))
                    {
                        if (answer.charAt(index + 1) != '-')
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer.charAt(index + 1) == '-')
                    {
                        if (!(Character.isDigit(answer.charAt(index + 2))))
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer == "Error")
                    {
                        indexL = index - 1;
                       
                        if (indexL > 2)
                        {
                            if ((answer.charAt(indexL - 1)) == '-')
                            {
                                if ((answer.charAt(indexL - 2)) == 'E')
                                {
                                    indexL = indexL -2;
                                }
                            }
                        }
                            while ((indexL  > 0) && ((Character.isDigit(answer.charAt(indexL - 2)) || ((answer.charAt(indexL - 1)) == '.') || ((answer.charAt(indexL - 1)) == 'E' ))))
                            {
                                indexL--;
                            }
                            if (indexL == 1)
                            {
                                if ((answer.charAt(indexL - 1)) == '-')
                                {
                                    indexL--;
                                }
                            }
                            if (indexL > 2)
                            {
                                if (((answer.charAt(indexL - 1)) == '-') && !(Character.isDigit(answer.charAt(indexL - 2))))
                                    {
                                        indexL--;
                                    }
                            }
                            op2 = answer.substring(index + 1, indexR + 1);
                         
                            }
                        }
                    }
                }
               
               
                for (index = 0; index < answer.length() && (answer != "Error"); index++)
                {
                    if (index == 0)
                    {
                        index = 1;
                    }
                }
                if (index > 0)
                {
                   
                        if (answer.charAt(index + 1) == '-')
                        {
                            index = index + 2;
                        }
                   
                }
               
                userinput = answer.charAt(index);
               
                if ((userinput == '+') || (userinput == '-'))
                {
                    if (!(Character.isDigit(answer.charAt(index - 1))))
                    {
                        Board.setText("Error");
                    }
                    if (!(Character.isDigit(answer.charAt(index + 1))))
                    {
                        Board.setText("Error");
                    }
                    if ((answer.charAt(index+1) == '-') && (!(Character.isDigit(answer.charAt(index+2)))))
                    {
                         Board.setText("Error");
                    }
                    if (answer != "Error")
                    {
                        indexL = 0;
                        op1 = answer.substring(indexL , index);
                        indexR = index + 1;
                        while((indexR < answer.length()-1) && ((Character.isDigit(answer.charAt(indexR + 1))) || ((answer.charAt(indexR + 1)) == '.') || ((answer.charAt(indexR + 1)) == 'E')))
                        {
                            indexR++;
                            if (indexR < answer.length() - 2)
                            {
                               
                                    if ((answer.charAt(indexR + 1)) == '-')
                                    {
                                        indexR++;
                                    }
                             
                            }
                        }
                        op2 = answer.substring(index + 1, indexR + 1);
                        answer = CalculatorImp(op1, op2, userinput ) + answer.substring(indexR + 1);
                        index = 0;
                    }
                }
           
       
        return answer;
    }

}
0
ramiseesniblicCommented:
Add:

outputPane.add(panel1);

under:

Panel panel1 = new Panel();


This will add the new panel to the content pane.
0
ramiseesniblicCommented:
Ignore me on that one...
0
ramiseesniblicCommented:
Take the void modifier out of the Calculator()

That is the constructor.

0
ramiseesniblicCommented:
Can you also add the following line into the contructor:
this.setDefaultCloseOperation( EXIT_ON_CLOSE );

Open in new window

0
perdoname_Author Commented:
Up to now i can see just the buttons
I mean i cant see the the input line of the calculator :S


import java.awt.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener
{
    public static final int Width = 500;
    public static final int Height = 500;
   
    private TextField Board;
    private JButton jbo0, jbo1, jbo2, jbo3, jbo4, jbo5, jbo6, jbo7, jbo8, jbo9,
                    jboAddition, jboSubtraction, jboMultiplication, jboDivision,
                    jboDot, jboLp, jboRp, jboClear, jboResult;
                   
   /*                
    public static void main(String args[])
  {
    JFrame applet = new Calculator();
    JFrame frame = new JFrame();
    frame.add(frame);
    frame.setSize(Width,Height);
    frame.show();
  }
  */
 
 public static void main(String args[])
  {
    JFrame outputFrame = new Calculator();
   

//panel1.add(allyourstuff);
//panel1.add(moreofyourstuff);

    outputFrame.setVisible(true);
  }
    public Calculator()
    {
        Container outputPane = this.getContentPane();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(Width, Height);
        outputPane.setLayout(new GridLayout (3, 3));

        Panel panel1 = new Panel();
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );

       // outputPane.add(panel1);

        //panel1.add(jbo0);
 
        //Numbers
        setLayout(new FlowLayout());
        setFont(new Font("Helvetica", Font.PLAIN, 8));

        JButton jbo0 = new JButton("0");
        jbo0.addActionListener(this);
        outputPane.add(jbo0);
        jbo1 = new JButton("1");
        outputPane.add(jbo1);
        jbo1.addActionListener(this);
        jbo2 = new JButton("2");
        outputPane.add(jbo2);
        jbo2.addActionListener(this);
        jbo3 = new JButton("3");
        outputPane.add(jbo3);
        jbo3.addActionListener(this);
        jbo4 = new JButton("4");
        outputPane.add(jbo4);
        jbo4.addActionListener(this);
        jbo5 = new JButton("5");
        outputPane.add(jbo5);
        jbo5.addActionListener(this);
        jbo6 = new JButton("6");
        outputPane.add(jbo6);
        jbo6.addActionListener(this);
        jbo7 = new JButton("7");
        outputPane.add(jbo7);
        jbo7.addActionListener(this);
        jbo8 = new JButton("8");
        outputPane.add(jbo8);
        jbo8.addActionListener(this);
        jbo9 = new JButton("9");
        outputPane.add(jbo9);
        jbo9.addActionListener(this);
       
        //Math Operations
       
        jboAddition = new JButton("+");
        outputPane.add(jboAddition);
        jboAddition.addActionListener(this);
        jboSubtraction = new JButton("-");
        outputPane.add(jboSubtraction);
        jboSubtraction.addActionListener(this);
        jboMultiplication = new JButton("*");
        outputPane.add(jboMultiplication);
        jboMultiplication.addActionListener(this);
        jboDivision = new JButton("/");
        outputPane.add(jboDivision);
        jboDivision.addActionListener(this);
       
        //Result etc..
       
        jboDot = new JButton(".");
        outputPane.add(jboDot);
        jboDot.addActionListener(this);
        jboLp = new JButton("(");
        outputPane.add(jboLp);
        jboLp.addActionListener(this);
        jboRp = new JButton(")");
        outputPane.add(jboRp);
        jboRp.addActionListener(this);
        jboClear = new JButton("C");
        outputPane.add(jboClear);
        jboClear.addActionListener(this);
        jboResult = new JButton("=");
        outputPane.add(jboResult);
        jboResult.addActionListener(this);
       
    }
   
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JButton)
        {
            JButton buClicked = (JButton) e.getSource();
            if (buClicked == jboClear) boardClear();
            else if (buClicked == jboResult) Calculate();
        }
        else
        {
            Calculate();
        }
    }
   
    public void UserInput(JButton buClicked)
    {
        String input;
        input = Board.getText();
        if (buClicked == jbo0)
        {
            Board.setText(input + "0");
        }
        if (buClicked == jbo1)
        {
            Board.setText(input + "1");
        }
        if (buClicked == jbo2)
        {
            Board.setText(input + "2");
        }
        if (buClicked == jbo3)
        {
            Board.setText(input + "3");
        }
        if (buClicked == jbo4)
        {
            Board.setText(input + "4");
        }
        if (buClicked == jbo5)
        {
            Board.setText(input + "5");
        }
        if (buClicked == jbo6)
        {
            Board.setText(input + "6");
        }
        if (buClicked == jbo7)
        {
            Board.setText(input + "7");
        }
        if (buClicked == jbo8)
        {
            Board.setText(input + "8");
        }
        if (buClicked == jbo9)
        {
            Board.setText(input + "9");
        }
        if (buClicked == jboAddition)
        {
            Board.setText(input + "+");
        }
        if (buClicked == jboSubtraction)
        {
            Board.setText(input + "-");
        }
        if (buClicked == jboMultiplication)
        {
            Board.setText(input + "*");
        }
        if (buClicked == jboDivision)
        {
            Board.setText(input + "/");
        }
        if (buClicked == jboDot)
        {
            Board.setText(input + ".");
        }
        if (buClicked == jboLp)
        {
            Board.setText(input + "(");
        }
        if (buClicked == jboRp)
        {
            Board.setText(input + ")");
        }
    }
   
     private void boardClear()
    {
        Board.setText("");
    }
   
    public void Calculate()
    {
        int counter;
        int numParenthesis = 0;
        int lenInput;
        String calc;
        String Answer = "";
        char NumOther;
       
        calc = Board.getText();
        lenInput = calc.length();
       
        for (counter = 0; counter < lenInput; counter++)
        {
            NumOther = calc.charAt(counter);
            if (NumOther == ')')
            {
                numParenthesis--;
            }
            if (NumOther == '(')
            {
                numParenthesis++;
            }
            if ((NumOther < '(') || (NumOther > '9') || (NumOther == '.'))
            {
                Board.setText("Error");
            }
            if (NumOther == '.' && (counter + 1 < calc.length()))
            {
                for (int k = counter + 1; (k < calc.length()) && ((Character.isDigit(calc.charAt(k))) || ((calc.charAt(k))) == '.'); k++)
                {
                    if (calc.charAt(k) == '.')
                    {
                        Board.setText("Error");
                    }
                }
            }
        }
        if (numParenthesis != 0)
        {
            Board.setText("Error");
        }
        else
        {
            Answer = Calculate2(calc);
            Board.setText(Answer);
        }
    }

       
    private String CalculatorImp(String oper1, String oper2, char Oper)
    {
        Double op1, op2;
        double ops1, ops2;
        double ans = 0;
        String result;
       
        op1 = new Double (oper1);
        op2 = new Double (oper2);
        ops1 = op1.doubleValue();
        ops2 = op2.doubleValue();
       
        if (Oper == '+')
        {
            ans = ops1 + ops2;
        }
        if (Oper == '-')
        {
            ans = ops1 - ops2;
        }
        if (Oper == '*')
        {
            ans = ops1 * ops2 ;
        }
        if (Oper == '/')
        {
            ans = ops1/ops2;
        }
       
        result = Double.toString(ans);
        return result;
    }

       
   
    private String Calculate2(String process)
    {
        String answer = process;
        String op1 = "";
        String op2 = "";
        char userinput;
        int index = 0;
        int indexL = 0;
        int indexR = 0;
        int numInput = answer.length();
        int numPar = 0;
        int matchPar = 0;
        int indexOp1 = 0;
        int indexOp2 = 0;
       
        if (answer  != "Error")
        {
            for (index = 0; index < numInput; index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput  == '(')
                {
                    if (matchPar == 0)
                    {
                        indexOp1 = index;
                    }
                    matchPar++;
                    numPar++;
                }
                if (userinput == ')')
                {
                    matchPar--;
                    if (matchPar ==0)
                    {
                        indexOp2 = index;
                    }
                }
            }
            if (indexOp1 + 1 == indexOp2)
            {
                Board.setText("Error");
            }
            if (answer == "Error"  && numPar > 0)
            {
                if (indexOp1 == 0)
                {
                    if (indexOp2 == (numInput - 1))
                    {
                        if (indexOp1 != indexOp2)
                        {
                            answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        }
                    }
                }
                else if (indexOp1 == 0 && indexOp2 > 0)
                {
                    if ((Character.isDigit(answer.charAt(indexOp2 + 1))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if ((indexOp1 > 0) && (indexOp2 > 0) && (indexOp2 != numInput - 1))
                {
                    if (((Character.isDigit(answer.charAt(indexOp2 + 1 ))) ||  (Character.isDigit(answer.charAt(indexOp1 - 1 ))) ))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if (indexOp2 == numInput - 1 && indexOp1 > 0)
                {
                    if (((Character.isDigit(answer.charAt(indexOp1 - 1)))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
            }
            if (numPar == 0)
            {
                if (answer != "Error")
                {
                    if (!(Character.isDigit(answer.charAt(0))))
                    {
                        if (answer.charAt(0) != '-')
                        {
                            if (!(Character.isDigit(answer.charAt(answer.length() - 1))))
                            {
                                Board.setText("Error");
                            }
                        }
                    }
                }
            }
           
            for (index = 0; index < answer.length() && (answer == "Error"); index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput == '*' || userinput == '/')
                {
                    if (!(Character.isDigit(answer.charAt(index-1))) || (!(Character.isDigit(answer.charAt(index + 1)))))
                    {
                        if (answer.charAt(index + 1) != '-')
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer.charAt(index + 1) == '-')
                    {
                        if (!(Character.isDigit(answer.charAt(index + 2))))
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer == "Error")
                    {
                        indexL = index - 1;
                       
                        if (indexL > 2)
                        {
                            if ((answer.charAt(indexL - 1)) == '-')
                            {
                                if ((answer.charAt(indexL - 2)) == 'E')
                                {
                                    indexL = indexL -2;
                                }
                            }
                        }
                            while ((indexL  > 0) && ((Character.isDigit(answer.charAt(indexL - 2)) || ((answer.charAt(indexL - 1)) == '.') || ((answer.charAt(indexL - 1)) == 'E' ))))
                            {
                                indexL--;
                            }
                            if (indexL == 1)
                            {
                                if ((answer.charAt(indexL - 1)) == '-')
                                {
                                    indexL--;
                                }
                            }
                            if (indexL > 2)
                            {
                                if (((answer.charAt(indexL - 1)) == '-') && !(Character.isDigit(answer.charAt(indexL - 2))))
                                    {
                                        indexL--;
                                    }
                            }
                            op2 = answer.substring(index + 1, indexR + 1);
                         
                            }
                        }
                    }
                }
               
               
                for (index = 0; index < answer.length() && (answer != "Error"); index++)
                {
                    if (index == 0)
                    {
                        index = 1;
                    }
                }
                if (index > 0)
                {
                   
                        if (answer.charAt(index + 1) == '-')
                        {
                            index = index + 2;
                        }
                   
                }
               
                userinput = answer.charAt(index);
               
                if ((userinput == '+') || (userinput == '-'))
                {
                    if (!(Character.isDigit(answer.charAt(index - 1))))
                    {
                        Board.setText("Error");
                    }
                    if (!(Character.isDigit(answer.charAt(index + 1))))
                    {
                        Board.setText("Error");
                    }
                    if ((answer.charAt(index+1) == '-') && (!(Character.isDigit(answer.charAt(index+2)))))
                    {
                         Board.setText("Error");
                    }
                    if (answer != "Error")
                    {
                        indexL = 0;
                        op1 = answer.substring(indexL , index);
                        indexR = index + 1;
                        while((indexR < answer.length()-1) && ((Character.isDigit(answer.charAt(indexR + 1))) || ((answer.charAt(indexR + 1)) == '.') || ((answer.charAt(indexR + 1)) == 'E')))
                        {
                            indexR++;
                            if (indexR < answer.length() - 2)
                            {
                               
                                    if ((answer.charAt(indexR + 1)) == '-')
                                    {
                                        indexR++;
                                    }
                             
                            }
                        }
                        op2 = answer.substring(index + 1, indexR + 1);
                        answer = CalculatorImp(op1, op2, userinput ) + answer.substring(indexR + 1);
                        index = 0;
                    }
                }
           
       
        return answer;
    }

}
0
ramiseesniblicCommented:
You have not instantiated  the JTextField or added it to the panel.

You need to do that.
0
perdoname_Author Commented:
Okay i did it :

        Panel panel1 = new Panel();
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        Board = new JTextField(50);
        outputPane.add(Board);
       // outputPane.add(panel1);

but nothing being transferred to the panel :S


0
ramiseesniblicCommented:
This is a continuation of my bad day.

The code that I posted is not adding stuff to the panel1, but adding it to the default panel of the JFrame ( outputPane ).

0
perdoname_Author Commented:
So do i have to replace the outputPane with panel1 ??
0
ramiseesniblicCommented:
You can do if you want to.  

Probably a good idea as it gives you more control over the flow.  This means that you could create additional panels with different flows on them, and add them to the contentPane.

If you want to, uncomment the line // outputPane.add(panel1); and put at the bottom of your constructor.

Change the outputPane.add() to panel1 .add()
0
perdoname_Author Commented:
But when im trying to change the outputPane.setLayout  to panel1.setLayout() i get an error and in that way the layout does not arrange the buttons

[????]

import java.awt.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener
{
    public static final int Width = 500;
    public static final int Height = 500;
   
    private JTextField Board;
    private JButton jbo0, jbo1, jbo2, jbo3, jbo4, jbo5, jbo6, jbo7, jbo8, jbo9,
                    jboAddition, jboSubtraction, jboMultiplication, jboDivision,
                    jboDot, jboLp, jboRp, jboClear, jboResult;
                   
   /*                
    public static void main(String args[])
  {
    JFrame applet = new Calculator();
    JFrame frame = new JFrame();
    frame.add(frame);
    frame.setSize(Width,Height);
    frame.show();
  }
  */
 
 public static void main(String args[])
  {
    JFrame outputFrame = new Calculator();
   

//panel1.add(allyourstuff);
//panel1.add(moreofyourstuff);

    outputFrame.setVisible(true);
  }
    public Calculator()
    {
        Container outputPane = this.getContentPane();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(Width, Height);
        outputPane.setLayout(new GridLayout (3, 3));
       
        Panel panel1 = new Panel();
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        Board = new JTextField();
        panel1.add(Board);
        outputPane.add(panel1);

        //panel1.add(jbo0);
 
        //Numbers
        setLayout(new FlowLayout());
        setFont(new Font("Helvetica", Font.PLAIN, 8));

        JButton jbo0 = new JButton("0");
        jbo0.addActionListener(this);
        panel1.add(jbo0);
        jbo1 = new JButton("1");
        panel1.add(jbo1);
        jbo1.addActionListener(this);
        jbo2 = new JButton("2");
        panel1.add(jbo2);
        jbo2.addActionListener(this);
        jbo3 = new JButton("3");
        panel1.add(jbo3);
        jbo3.addActionListener(this);
        jbo4 = new JButton("4");
        panel1.add(jbo4);
        jbo4.addActionListener(this);
        jbo5 = new JButton("5");
        panel1.add(jbo5);
        jbo5.addActionListener(this);
        jbo6 = new JButton("6");
        panel1.add(jbo6);
        jbo6.addActionListener(this);
        jbo7 = new JButton("7");
        panel1.add(jbo7);
        jbo7.addActionListener(this);
        jbo8 = new JButton("8");
        panel1.add(jbo8);
        jbo8.addActionListener(this);
        jbo9 = new JButton("9");
        panel1.add(jbo9);
        jbo9.addActionListener(this);
       
        //Math Operations
       
        jboAddition = new JButton("+");
        panel1.add(jboAddition);
        jboAddition.addActionListener(this);
        jboSubtraction = new JButton("-");
        panel1.add(jboSubtraction);
        jboSubtraction.addActionListener(this);
        jboMultiplication = new JButton("*");
        panel1.add(jboMultiplication);
        jboMultiplication.addActionListener(this);
        jboDivision = new JButton("/");
        panel1.add(jboDivision);
        jboDivision.addActionListener(this);
       
        //Result etc..
       
        jboDot = new JButton(".");
        panel1.add(jboDot);
        jboDot.addActionListener(this);
        jboLp = new JButton("(");
        panel1.add(jboLp);
        jboLp.addActionListener(this);
        jboRp = new JButton(")");
        panel1.add(jboRp);
        jboRp.addActionListener(this);
        jboClear = new JButton("C");
        panel1.add(jboClear);
        jboClear.addActionListener(this);
        jboResult = new JButton("=");
        panel1.add(jboResult);
        jboResult.addActionListener(this);
       


    }
   
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() instanceof JButton)
        {
            JButton buClicked = (JButton) e.getSource();
            if (buClicked == jboClear)
            {
                boardClear();
            }
            else if(buClicked == jboResult)
            {
                Calculate();
            }
        }
        else
        {
            Calculate();
        }
    }
   
    public void UserInput(JButton buClicked)
    {
        String input;
        input = Board.getText();
        if (buClicked == jbo0)
        {
            Board.setText(input + "0");
        }
        if (buClicked == jbo1)
        {
            Board.setText(input + "1");
        }
        if (buClicked == jbo2)
        {
            Board.setText(input + "2");
        }
        if (buClicked == jbo3)
        {
            Board.setText(input + "3");
        }
        if (buClicked == jbo4)
        {
            Board.setText(input + "4");
        }
        if (buClicked == jbo5)
        {
            Board.setText(input + "5");
        }
        if (buClicked == jbo6)
        {
            Board.setText(input + "6");
        }
        if (buClicked == jbo7)
        {
            Board.setText(input + "7");
        }
        if (buClicked == jbo8)
        {
            Board.setText(input + "8");
        }
        if (buClicked == jbo9)
        {
            Board.setText(input + "9");
        }
        if (buClicked == jboAddition)
        {
            Board.setText(input + "+");
        }
        if (buClicked == jboSubtraction)
        {
            Board.setText(input + "-");
        }
        if (buClicked == jboMultiplication)
        {
            Board.setText(input + "*");
        }
        if (buClicked == jboDivision)
        {
            Board.setText(input + "/");
        }
        if (buClicked == jboDot)
        {
            Board.setText(input + ".");
        }
        if (buClicked == jboLp)
        {
            Board.setText(input + "(");
        }
        if (buClicked == jboRp)
        {
            Board.setText(input + ")");
        }
    }
   
     private void boardClear()
    {
        Board.setText("");
    }
   
    public void Calculate()
    {
        int counter;
        int numParenthesis = 0;
        int lenInput;
        String calc;
        String Answer = "";
        char NumOther;
       
        calc = Board.getText();
        lenInput = calc.length();
       
        for (counter = 0; counter < lenInput; counter++)
        {
            NumOther = calc.charAt(counter);
            if (NumOther == ')')
            {
                numParenthesis--;
            }
            if (NumOther == '(')
            {
                numParenthesis++;
            }
            if ((NumOther < '(') || (NumOther > '9') || (NumOther == '.'))
            {
                Board.setText("Error");
            }
            if (NumOther == '.' && (counter + 1 < calc.length()))
            {
                for (int k = counter + 1; (k < calc.length()) && ((Character.isDigit(calc.charAt(k))) || ((calc.charAt(k))) == '.'); k++)
                {
                    if (calc.charAt(k) == '.')
                    {
                        Board.setText("Error");
                    }
                }
            }
        }
        if (numParenthesis != 0)
        {
            Board.setText("Error");
        }
        else
        {
            Answer = Calculate2(calc);
            Board.setText(Answer);
        }
    }

       
    private String CalculatorImp(String oper1, String oper2, char Oper)
    {
        Double op1, op2;
        double ops1, ops2;
        double ans = 0;
        String result;
       
        op1 = new Double (oper1);
        op2 = new Double (oper2);
        ops1 = op1.doubleValue();
        ops2 = op2.doubleValue();
       
        if (Oper == '+')
        {
            ans = ops1 + ops2;
        }
        if (Oper == '-')
        {
            ans = ops1 - ops2;
        }
        if (Oper == '*')
        {
            ans = ops1 * ops2 ;
        }
        if (Oper == '/')
        {
            ans = ops1/ops2;
        }
       
        result = Double.toString(ans);
        return result;
    }

       
   
    private String Calculate2(String process)
    {
        String answer = process;
        String op1 = "";
        String op2 = "";
        char userinput;
        int index = 0;
        int indexL = 0;
        int indexR = 0;
        int numInput = answer.length();
        int numPar = 0;
        int matchPar = 0;
        int indexOp1 = 0;
        int indexOp2 = 0;
       
        if (answer  != "Error")
        {
            for (index = 0; index < numInput; index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput  == '(')
                {
                    if (matchPar == 0)
                    {
                        indexOp1 = index;
                    }
                    matchPar++;
                    numPar++;
                }
                if (userinput == ')')
                {
                    matchPar--;
                    if (matchPar ==0)
                    {
                        indexOp2 = index;
                    }
                }
            }
            if (indexOp1 + 1 == indexOp2)
            {
                Board.setText("Error");
            }
            if (answer == "Error"  && numPar > 0)
            {
                if (indexOp1 == 0)
                {
                    if (indexOp2 == (numInput - 1))
                    {
                        if (indexOp1 != indexOp2)
                        {
                            answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        }
                    }
                }
                else if (indexOp1 == 0 && indexOp2 > 0)
                {
                    if ((Character.isDigit(answer.charAt(indexOp2 + 1))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if ((indexOp1 > 0) && (indexOp2 > 0) && (indexOp2 != numInput - 1))
                {
                    if (((Character.isDigit(answer.charAt(indexOp2 + 1 ))) ||  (Character.isDigit(answer.charAt(indexOp1 - 1 ))) ))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2)) + answer.substring(indexOp2 + 1);
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
                else if (indexOp2 == numInput - 1 && indexOp1 > 0)
                {
                    if (((Character.isDigit(answer.charAt(indexOp1 - 1)))))
                    {
                        Board.setText("Error");
                    }
                    else
                    {
                        answer = answer.substring(0, indexOp1) + Calculate2(answer.substring(indexOp1 + 1, indexOp2));
                        numPar--;
                        while (numPar != 0)
                        {
                            answer = Calculate2(answer);
                            numPar--;
                        }
                    }
                }
            }
            if (numPar == 0)
            {
                if (answer != "Error")
                {
                    if (!(Character.isDigit(answer.charAt(0))))
                    {
                        if (answer.charAt(0) != '-')
                        {
                            if (!(Character.isDigit(answer.charAt(answer.length() - 1))))
                            {
                                Board.setText("Error");
                            }
                        }
                    }
                }
            }
           
            for (index = 0; index < answer.length() && (answer == "Error"); index++)
            {
                userinput = answer.charAt(index);
               
                if (userinput == '*' || userinput == '/')
                {
                    if (!(Character.isDigit(answer.charAt(index-1))) || (!(Character.isDigit(answer.charAt(index + 1)))))
                    {
                        if (answer.charAt(index + 1) != '-')
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer.charAt(index + 1) == '-')
                    {
                        if (!(Character.isDigit(answer.charAt(index + 2))))
                        {
                            Board.setText("Error");
                        }
                    }
                    if (answer == "Error")
                    {
                        indexL = index - 1;
                       
                        if (indexL > 2)
                        {
                            if ((answer.charAt(indexL - 1)) == '-')
                            {
                                if ((answer.charAt(indexL - 2)) == 'E')
                                {
                                    indexL = indexL -2;
                                }
                            }
                        }
                            while ((indexL  > 0) && ((Character.isDigit(answer.charAt(indexL - 2)) || ((answer.charAt(indexL - 1)) == '.') || ((answer.charAt(indexL - 1)) == 'E' ))))
                            {
                                indexL--;
                            }
                            if (indexL == 1)
                            {
                                if ((answer.charAt(indexL - 1)) == '-')
                                {
                                    indexL--;
                                }
                            }
                            if (indexL > 2)
                            {
                                if (((answer.charAt(indexL - 1)) == '-') && !(Character.isDigit(answer.charAt(indexL - 2))))
                                    {
                                        indexL--;
                                    }
                            }
                            op2 = answer.substring(index + 1, indexR + 1);
                         
                            }
                        }
                    }
                }
               
               
                for (index = 0; index < answer.length() && (answer != "Error"); index++)
                {
                    if (index == 0)
                    {
                        index = 1;
                    }
                }
                if (index > 0)
                {
                   
                        if (answer.charAt(index + 1) == '-')
                        {
                            index = index + 2;
                        }
                   
                }
               
                userinput = answer.charAt(index);
               
                if ((userinput == '+') || (userinput == '-'))
                {
                    if (!(Character.isDigit(answer.charAt(index - 1))))
                    {
                        Board.setText("Error");
                    }
                    if (!(Character.isDigit(answer.charAt(index + 1))))
                    {
                        Board.setText("Error");
                    }
                    if ((answer.charAt(index+1) == '-') && (!(Character.isDigit(answer.charAt(index+2)))))
                    {
                         Board.setText("Error");
                    }
                    if (answer != "Error")
                    {
                        indexL = 0;
                        op1 = answer.substring(indexL , index);
                        indexR = index + 1;
                        while((indexR < answer.length()-1) && ((Character.isDigit(answer.charAt(indexR + 1))) || ((answer.charAt(indexR + 1)) == '.') || ((answer.charAt(indexR + 1)) == 'E')))
                        {
                            indexR++;
                            if (indexR < answer.length() - 2)
                            {
                               
                                    if ((answer.charAt(indexR + 1)) == '-')
                                    {
                                        indexR++;
                                    }
                             
                            }
                        }
                        op2 = answer.substring(index + 1, indexR + 1);
                        answer = CalculatorImp(op1, op2, userinput ) + answer.substring(indexR + 1);
                        index = 0;
                    }
                }
           
       
        return answer;
    }

}
0
ramiseesniblicCommented:
This is a whole new reading topic :-)

Take a look at: http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html

The setLayout takes a layout manager as an argument.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.