ali11 -1 Light Poster

First i create simple claculator.but now I am trying to change it to RPN calculator by using stack.Can some one help me because I don't know alot about stack.here is my codes so far.

import java.util.Stack;
import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;
import java.util.Scanner;


public class CalcGUIPanel extends JPanel
{



private Stack  s = new Stack();
 //=============================================== instance variables

 //--\- Component referenced during execution

 private JTextField displayField; // display result / input.

 //--\- Variables representing state of the calculator

 private boolean startNumber = true; // true: num key next

 private int resultValue = 0; // result so far

 private String previousOp = "="; // previous operation

 //========================================= static (class) variables

 private static final Font BIGGER_FONT =

 new Font("monspaced", Font.PLAIN, 20);

 //====================================================== constructor

 public CalcGUIPanel()
 {

 //--\- Display field

 displayField = new JTextField();


 //--\- Clear button

 JButton clearButton = new JButton("CLEAR");

 clearButton.setFont(BIGGER_FONT);

 clearButton.addActionListener(new ClearListener());

 //--\- One listener for all numeric keys.

 ActionListener numListener = new NumListener();

 //--\- Layout numeric keys in a grid. Generate the buttons

 // in a loop from the chars in a string.

 String buttonOrder = "789456123 0 ";

 JPanel buttonPanel = new JPanel(new GridLayout(5, 3));

 for (int i = 0; i < buttonOrder.length(); i++) {

 String keyTop = buttonOrder.substring(i, i+1);

 if (keyTop.equals(" ")) {

 buttonPanel.add(new JLabel(""));

 } else {

 JButton b = new JButton(keyTop);

 b.addActionListener(numListener);
 s.push("0");
  s.push("1");
  s.push("2");
  s.push("3");
  s.push("4");
  s.push("5");
  s.push("6");
  s.push("7");
  s.push("8");
 s.push("9");

 b.setFont(BIGGER_FONT);

 buttonPanel.add(b);

 }

 }

 //--\- One ActionListener to use for all operator buttons.

 ActionListener opListener = new OpListener();

 //--\- Create panel with gridlayout to hold operator buttons.

 // Use array of button names to create buttons in a loop.

 JPanel opPanel = new JPanel(new GridLayout(5, 1));

 String[] opOrder = {"+", "-", "*", "/", "enter"};

 for (int i = 0; i < opOrder.length; i++) {

 JButton b = new JButton(opOrder[i]);

 b.addActionListener(opListener);

 s.push("+");
  s.push("-");
  s.push("*");
  s.push("/");
  s.push("enter");


 b.setFont(BIGGER_FONT);

 opPanel.add(b);

 }

 //--\- Layout the top-level panel.

 this.setLayout(new BorderLayout());

 this.add(displayField, BorderLayout.NORTH );

 this.add(buttonPanel , BorderLayout.CENTER);

 this.add(opPanel , BorderLayout.EAST );

 this.add(clearButton , BorderLayout.SOUTH );

 }//end constructor

 //====================================================== action_clear

 /*\* Called by Clear btn action listener and elsewhere.*/

 private void action_clear() {

 startNumber = true;

 displayField.setText("0");

 resultValue = 0;

 previousOp = "=";

 }

 // inner listener class OpListener

 /*\* Listener for all op buttons. \*/

 class OpListener implements ActionListener {

 public void actionPerformed(ActionEvent e) {

 // The calculator is always in one of two states.

 // 1. A number must be entered \-\- this operator is wrong.

 // 2. An operator must be entered \-\- we're ok.

  {

 startNumber = true; // Next thing must be a number

 try {

 // Get value from display field, convert, do prev op

 // If this is the first op, \_previousOp will be =.

 String displayText = displayField.getText();

 int currentValue = Integer.parseInt(displayText);

 if (previousOp.equals("=")) {

 resultValue = currentValue;

 } else if (previousOp.equals("+")) {

 resultValue += currentValue;
 s.push(resultValue);

 } else if (previousOp.equals("-")) {

 resultValue -= currentValue;
 s.push(resultValue);

 } else if (previousOp.equals("*")) {

 resultValue *= currentValue;
 s.push(resultValue);

 } else if (previousOp.equals("/")) {

 resultValue /= currentValue;
 s.push(resultValue);

 }

 displayField.setText(""+resultValue);

 } catch (NumberFormatException ex) {

 action_clear();

 displayField.setText("Error");

 }

 //--\- set \_previousOp for the next operator.

 previousOp = e.getActionCommand();

 }//endif \_startNumber

 }//endmethod

 }//end class

 //////////////////////////////////// inner listener class ClearListener

 // Action listener for numeric keys

 class NumListener implements ActionListener {

 public void actionPerformed(ActionEvent e) {

 String digit = e.getActionCommand(); // Get text from button

 if (startNumber) {

 // This is the first digit, clear field and set

 displayField.setText(digit);

 startNumber = false;

 } else {

 // Add this digit to the end of the display field

 displayField.setText(displayField.getText() + digit);

 }

 }

 }//end class

 //inner listener class ClearListener

 class ClearListener implements ActionListener {

 public void actionPerformed(ActionEvent e) {

 action_clear();

 }

 }

 }
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.