Note that there are some explanatory texts on larger screens.

plurals
  1. POCalculator GUI ActionPerformed method, and wrapping around another class
    primarykey
    data
    text
    <p>I am trying to wrap a Calculator GUI over a class that I built to calculate values in a different way (not the normal way, in reverse Polish notation).</p> <p>I just wanted to know two things:</p> <p>1) How do I write my actionPerformed method so that when you click on a button or operation, it shows up in the display</p> <p>2) How do I go about using the GUI with the calculation method (like how to make it so that when you press all the numbers or operators on the GUI, it registers in my calculation class). Basically how to wrap the GUI over it?</p> <p>**Edit, I edited my code, but when it compiles it gives me a null pointer exception, how come? </p> <p>My GUI Class so far:</p> <pre><code>import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; public class GUI extends JFrame implements ActionListener { JPanel buttonPanel, topPanel, operationPanel; JTextField display; doMath math = new doMath(); JButton Num1; JButton Num2; JButton Num3; JButton Num4; JButton Num5; JButton Num6; JButton Num7; JButton Num8; JButton Num9; JButton Num0; JButton Add; JButton Sub; JButton Mult; JButton Div; JButton Eq; JButton Clr; public GUI() { super("Calculator"); setSize(400,400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel mainPanel = new JPanel(); mainPanel.setLayout(new GridLayout (2,1)); buttonPanel = new JPanel(); buttonPanel.setLayout(new GridLayout(4, 4)); buttonPanel.add(Num1 = new JButton("1")); buttonPanel.add(Num2 = new JButton("2")); buttonPanel.add(Num3 = new JButton("3")); buttonPanel.add(Num4 = new JButton("4")); buttonPanel.add(Num5 = new JButton("5")); buttonPanel.add(Num6 = new JButton("6")); buttonPanel.add(Num7 = new JButton("7")); buttonPanel.add(Num8 = new JButton("8")); buttonPanel.add(Num9 = new JButton("9")); buttonPanel.add(Num0 = new JButton("0")); buttonPanel.add(Clr = new JButton("C")); buttonPanel.add(Eq = new JButton("=")); buttonPanel.add(Add = new JButton("+")); buttonPanel.add(Sub = new JButton("-")); buttonPanel.add(Mult = new JButton("*")); buttonPanel.add(Div = new JButton("/")); Num1.addActionListener(this); Num2.addActionListener(this); Num3.addActionListener(this); Num4.addActionListener(this); Num5.addActionListener(this); Num6.addActionListener(this); Num7.addActionListener(this); Num8.addActionListener(this); Num9.addActionListener(this); Num0.addActionListener(this); Clr.addActionListener(this); Eq.addActionListener(this); Add.addActionListener(this); Sub.addActionListener(this); Mult.addActionListener(this); Div.addActionListener(this); topPanel = new JPanel(); topPanel.setLayout(new FlowLayout()); topPanel.add(new JTextField(20)); //jtfResult.setHorizontalAlignment(JTextField.RIGHT); // jtfResult.setEditable(false); add(mainPanel); mainPanel.add(topPanel, BorderLayout.NORTH); mainPanel.add(buttonPanel, BorderLayout.SOUTH); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource() == Num1) { s += "1"; display.setText(s); } if(e.getSource() == Num2) { s += "2"; display.setText(s); } if(e.getSource() == Num3) { s += "3"; display.setText(s); } if(e.getSource() == Num4) { s += "4"; display.setText(s); } if(e.getSource() == Num5) { s += "5"; display.setText(s); } if(e.getSource() == Num6) { s += "6"; display.setText(s); } if(e.getSource() == Num7) { s += "7"; display.setText(s); } if(e.getSource() == Num8) { s += "8"; display.setText(s); } if(e.getSource() == Num9) { s += "9"; display.setText(s); } if(e.getSource() == Num0) { s += "0"; display.setText(s); } if(e.getSource() == Add) { s += "+"; display.setText(s); } if(e.getSource() == Sub) { s += "-"; display.setText(s); } if(e.getSource() == Mult) { s += "*"; display.setText(s); } if(e.getSource() == Div) { s += "/"; display.setText(s); } if(e.getSource() == Eq) { String result = "" + math.doMath1(s); display.setText(result); } } } </code></pre> <p>My calculation class (works as intended to, just need to know how to wrap my GUI over it):</p> <pre><code>public class doMath { Stack stack = new Stack(); String next = ""; public doMath() { } public int doMath1(String expr) { while( expr.length() &gt;0) //for(int i = 0; i &lt; expr.length(); i++) { if(expr.length() == 0) return 0; if(expr.indexOf(" ")&gt;0) { next = expr.substring(0,expr.indexOf(" ")); if(next.equals("+")) stack.push(stack.pop() + stack.pop()); else if(next.equals("-")) { int x = stack.pop(); stack.push(stack.pop()- x); } else if(next.equals("*")) stack.push(stack.pop() * stack.pop()); else if(next.equals("/")) { int x = stack.pop(); stack.push(stack.pop()/ stack.pop()); } else stack.push(new Integer(Integer.parseInt(next))); expr = expr.substring(expr.indexOf(" ")+1); } } return stack.pop(); } } </code></pre> <p><strong>Errors:</strong></p> <pre><code> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at GUI.actionPerformed(GUI.java:126) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.plaf.basic.BasicButtonListener. mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:5517) at javax.swing.JComponent.processMouseEvent(JComponent.java:3129) at java.awt.Component.processEvent(Component.java:5282) at java.awt.Container.processEvent(Container.java:1966) at java.awt.Component.dispatchEventImpl(Component.java:3984) at java.awt.Container.dispatchEventImpl(Container.java:2024) at java.awt.Component.dispatchEvent(Component.java:3819) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) at java.awt.Container.dispatchEventImpl(Container.java:2010) at java.awt.Window.dispatchEventImpl(Window.java:1791) at java.awt.Component.dispatchEvent(Component.java:3819) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy (EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload