Hey everybody! So my problem is the very last part, getting the results of my calculation. So what i've done is created a stack with my very own stack class. The = button is suppose to display the result but i get a runtime error. Please help me out. Oh i also created an array of chars. I used those chars and placed it into a method so that way i can get the results.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Stack;
/**
*
* @author Giovanni M
*/
public class JCalculator implements ActionListener {
JFrame jfrm;
JFrame jfrm2;
JTextField txt;
JLabel results;
String str= "";
Stack operands = new Stack();
JCalculator(){
jfrm = new JFrame("JCalc");
jfrm.getContentPane().setLayout(new GridLayout(0,1));
jfrm.setSize(210,210);
results = new JLabel("",SwingConstants.RIGHT);
jfrm.getContentPane().add(results);
jfrm.setLocation(400,300);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton[] calbut= new JButton[14];
String []but = {"7","8","9","/","4","5","6","*","1","2","3","-","0","C"
};
JButton equal = new JButton("=");
JButton add = new JButton("+");
JPanel jbutton = new JPanel();
jbutton.setLayout(new GridLayout(4,3));
for(int i=0; i< but.length;i++){
jbutton.add(calbut[i] = new JButton(but[i]));
//jfrm.getContentPane().add(calbut[i]);
calbut[i].addActionListener(this);
}
jbutton.add(equal);
jbutton.add(add);
equal.addActionListener(this);
add.addActionListener(this);
jfrm.getContentPane().add(jbutton);
/*JMenu j = new JMenu ("C",KeyEvent.VK_C);
j.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));*/
jfrm.setVisible(true);
}
public void actionPerformed(ActionEvent ae){
char[] a = new char[0];
int used = 0;
if(used == a.length){
char[] newa= new char[a.length + 1];
for(int i = 0; i <used; i++) newa[i]= a[i];
a= newa;
}
if(ae.getActionCommand().equals("1")){
str = results.getText();
results.setText(str + "1");
}
if(ae.getActionCommand().equals("2")){
str = results.getText();
results.setText(str + "2");
}
if(ae.getActionCommand().equals("3")){
str = results.getText();
results.setText(str + "3");
}
if(ae.getActionCommand().equals("4")){
str = results.getText();
results.setText(str + "4");
}
if(ae.getActionCommand().equals("5")){
str = results.getText();
results.setText(str + "5");
}
if(ae.getActionCommand().equals("6")){
str = results.getText();
results.setText(str + "6");
}
if(ae.getActionCommand().equals("7")){
str = results.getText();
results.setText(str + "7");
}
if(ae.getActionCommand().equals("8")){
str = results.getText();
results.setText(str + "8");
}
if(ae.getActionCommand().equals("9")){
str = results.getText();
results.setText(str + "9");
}
if(ae.getActionCommand().equals("0")){
str = results.getText();
results.setText(str + "0");
//operands.push(0);
}
if(ae.getActionCommand().equals("+")){
str = results.getText();
double operand = Double.parseDouble(str);
operands.push(operand);
results.setText("");
a[used]= '+';
used++;
}
if(ae.getActionCommand().equals("-")){
str = results.getText();
double operand = Double.parseDouble(str);
operands.push(operand);
results.setText("");
a[used]= '+';
used++;
}
if(ae.getActionCommand().equals("/")){
str = results.getText();
double operand = Double.parseDouble(str);
operands.push(operand);
results.setText("");
a[used]= '+';
used++;
}
if(ae.getActionCommand().equals("*")){
str = results.getText();
double operand = Double.parseDouble(str);
operands.push(operand);
results.setText("");
a[used]= '*';
used++;
}
if(ae.getActionCommand().equals("=")){
for(int i = 0; i< used; i++){
performBinaryOp(a[i]);
}
str = (String) operands.pop();
results.setText(str);
}
}
public void performBinaryOp(char nextOperation) {
double leftOperand, rightOperand;
Double result = new Double(0);
rightOperand = (double) operands.pop();
leftOperand = (double)operands.pop();
switch (nextOperation) {
case '+':
result = new Double(leftOperand + rightOperand);
break;
case '-':
result = new Double(leftOperand - rightOperand);
break;
case '*':
result = new Double(leftOperand * rightOperand);
break;
case '/':
result = new Double(leftOperand / rightOperand);
break;
}
operands.push(result);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JCalculator();
}
});
}
}