001    package ps1;
002    
003    import javax.swing.*;
004    import java.awt.*;
005    // import com.borland.jbcl.layout.*;
006    import javax.swing.border.*;
007    import java.awt.event.*;
008    
009    /**
010     * <B>CalculatorFrame</b> is part of the graphical calculator that utilizes all
011     * of the other classes in package ps1. CalculatorFrame contains the main()
012     * function which starts the calculator.
013     */
014    
015    public final class CalculatorFrame extends JFrame {
016        JPanel jPanel1 = new JPanel();
017    
018        JPanel jPanel2 = new JPanel();
019    
020        JPanel jPanel3 = new JPanel();
021    
022        JPanel jPanel4 = new JPanel();
023    
024        JPanel jPanel5 = new JPanel();
025    
026        JPanel jPanel6 = new JPanel();
027    
028        JPanel jPanel8 = new JPanel();
029    
030        Border border1;
031    
032        JLabel jLabel5 = new JLabel();
033    
034        JLabel jLabel6 = new JLabel();
035    
036        JTextField jTextField1 = new JTextField();
037    
038        JTextField jTextField2 = new JTextField();
039    
040        JButton jButton_exp = new JButton();
041    
042        JButton jButton_div = new JButton();
043    
044        JButton jButton_mul = new JButton();
045    
046        JButton jButton_7 = new JButton();
047    
048        JButton jButton_8 = new JButton();
049    
050        JButton jButton_9 = new JButton();
051    
052        JButton jButton_4 = new JButton();
053    
054        JButton jButton_5 = new JButton();
055    
056        JButton jButton_6 = new JButton();
057    
058        JButton jButton_1 = new JButton();
059    
060        JButton jButton_2 = new JButton();
061    
062        JButton jButton_3 = new JButton();
063    
064        JButton jButton_0 = new JButton();
065    
066        JButton jButton_x = new JButton();
067    
068        JButton jButton_Enter = new JButton();
069    
070        JButton jButton_plus = new JButton();
071    
072        JButton jButton_minus = new JButton();
073    
074        JButton jButton_swap = new JButton();
075    
076        JButton jButton_pop = new JButton();
077    
078        JButton jButton_dup = new JButton();
079    
080        JButton jButton_int = new JButton();
081    
082        JButton jButton_dif = new JButton();
083    
084        JTextArea jTextArea_Current = new JTextArea();
085    
086        JTextArea jTextArea_Stack_3 = new JTextArea();
087    
088        JTextArea jTextArea_Stack_2 = new JTextArea();
089    
090        JTextArea jTextArea_Stack_1 = new JTextArea();
091    
092        JTextArea jTextArea_Stack_0 = new JTextArea();
093    
094        BorderLayout borderLayout1 = new BorderLayout();
095    
096        PolyGraph pg = null;
097    
098        RatPolyStack stack = null;
099    
100        Border border2;
101    
102        Border border3;
103    
104        Border border4;
105    
106        Border border5;
107    
108        JPanel jPanel7 = new JPanel();
109    
110        JButton jButton_stack_mul = new JButton();
111    
112        JButton jButton_stack_div = new JButton();
113    
114        JButton jButton_stack_add = new JButton();
115    
116        JButton jButton_stack_sub = new JButton();
117    
118        JButton jButton_Clear = new JButton();
119    
120        // Serializable classes are supposed to have this
121        private static final long serialVersionUID = 42L;
122    
123        public CalculatorFrame() {
124            try {
125                jbInit();
126                // exit the application when this window is closed
127                addWindowListener(new WindowAdapter() {
128                    public void windowClosing(WindowEvent e) {
129                        setVisible(false);
130                        dispose();
131                        System.exit(0);
132                    }
133                });
134            } catch (Exception e) {
135                e.printStackTrace();
136            }
137        }
138    
139        private void jbInit() throws Exception {
140            border1 = BorderFactory
141                    .createBevelBorder(BevelBorder.LOWERED, Color.white,
142                            Color.white, Color.white, new Color(124, 124, 124));
143            border2 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
144                    Color.red, Color.white, new Color(178, 178, 178), new Color(
145                            124, 124, 124));
146            border3 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
147                    Color.blue, Color.white, new Color(178, 178, 178), new Color(
148                            124, 124, 124));
149            border4 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
150                    Color.green, Color.white, new Color(178, 178, 178), new Color(
151                            124, 124, 124));
152            border5 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
153                    Color.orange, Color.white, new Color(178, 178, 178), new Color(
154                            124, 124, 124));
155            jPanel1.setLayout(null);
156            jPanel1.setBackground(Color.gray);
157            jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
158            jPanel2.setBorder(BorderFactory.createRaisedBevelBorder());
159            jPanel2.setBounds(new Rectangle(21, 21, 330, 371));
160            jPanel2.setLayout(borderLayout1);
161            jPanel3.setBorder(BorderFactory.createRaisedBevelBorder());
162            jPanel3.setBounds(new Rectangle(366, 23, 259, 219));
163            jPanel3.setLayout(null);
164            jPanel4.setBorder(BorderFactory.createRaisedBevelBorder());
165            jPanel4.setBounds(new Rectangle(365, 258, 258, 132));
166            jPanel4.setLayout(null);
167            jPanel5.setBorder(BorderFactory.createRaisedBevelBorder());
168            jPanel5.setBounds(new Rectangle(21, 410, 167, 90));
169            jPanel5.setLayout(null);
170            jPanel6.setBorder(BorderFactory.createRaisedBevelBorder());
171            jPanel6.setBounds(new Rectangle(197, 410, 196, 275));
172            jPanel6.setLayout(null);
173            jPanel8.setBorder(BorderFactory.createRaisedBevelBorder());
174            jPanel8.setBounds(new Rectangle(21, 510, 167, 90));
175            jPanel8.setLayout(null);
176            jLabel5.setText("X max");
177            jLabel5.setBounds(new Rectangle(8, 47, 34, 25));
178            jLabel6.setBounds(new Rectangle(10, 10, 34, 24));
179            jLabel6.setText("X min");
180            jTextField1.setText("-1.0");
181            jTextField1.setBounds(new Rectangle(50, 15, 104, 22));
182            jTextField1.addActionListener(new java.awt.event.ActionListener() {
183                public void actionPerformed(ActionEvent e) {
184                    jTextField1_actionPerformed(e);
185                }
186            });
187            jTextField2.setBounds(new Rectangle(49, 51, 104, 22));
188            jTextField2.addActionListener(new java.awt.event.ActionListener() {
189                public void actionPerformed(ActionEvent e) {
190                    jTextField2_actionPerformed(e);
191                }
192            });
193            jTextField2.setText("1.0");
194            jButton_exp.setFont(new java.awt.Font("Dialog", 0, 18));
195            jButton_exp.setMargin(new Insets(2, 2, 2, 2));
196            jButton_exp.setText("^");
197            jButton_exp.setBounds(new Rectangle(9, 10, 41, 44));
198            jButton_exp.addActionListener(new java.awt.event.ActionListener() {
199                public void actionPerformed(ActionEvent e) {
200                    jButton_exp_actionPerformed(e);
201                }
202            });
203    
204            jButton_int.setBounds(new Rectangle(10, 7, 146, 35));
205            jButton_int.setText("Integrate");
206            jButton_int.setFont(new java.awt.Font("Dialog", 0, 18));
207            jButton_int.setMargin(new Insets(2, 2, 2, 2));
208            jButton_int.addActionListener(new java.awt.event.ActionListener() {
209                public void actionPerformed(ActionEvent e) {
210                    jButton_int_actionPerformed(e);
211                }
212            });
213    
214            jButton_dif.setBounds(new Rectangle(10, 47, 146, 36));
215            jButton_dif.setText("Differentiate");
216            jButton_dif.setFont(new java.awt.Font("Dialog", 0, 18));
217            jButton_dif.setMargin(new Insets(2, 2, 2, 2));
218            jButton_dif.addActionListener(new java.awt.event.ActionListener() {
219                public void actionPerformed(ActionEvent e) {
220                    jButton_dif_actionPerformed(e);
221                }
222            });
223    
224            jButton_div.setBounds(new Rectangle(103, 10, 41, 44));
225            jButton_div.addActionListener(new java.awt.event.ActionListener() {
226                public void actionPerformed(ActionEvent e) {
227                    jButton_div_actionPerformed(e);
228                }
229            });
230            jButton_div.setText("/");
231            jButton_div.setFont(new java.awt.Font("Dialog", 0, 18));
232            jButton_div.setMargin(new Insets(2, 2, 2, 2));
233            jButton_mul.setFont(new java.awt.Font("Dialog", 0, 18));
234            jButton_mul.setMargin(new Insets(2, 2, 2, 2));
235            jButton_mul.setText("*");
236            jButton_mul.setBounds(new Rectangle(55, 10, 41, 44));
237            jButton_mul.addActionListener(new java.awt.event.ActionListener() {
238                public void actionPerformed(ActionEvent e) {
239                    jButton_mul_actionPerformed(e);
240                }
241            });
242            jButton_7.setBounds(new Rectangle(9, 60, 41, 44));
243            jButton_7.addActionListener(new java.awt.event.ActionListener() {
244                public void actionPerformed(ActionEvent e) {
245                    jButton_7_actionPerformed(e);
246                }
247            });
248            jButton_7.setFont(new java.awt.Font("Dialog", 1, 18));
249            jButton_7.setHorizontalTextPosition(SwingConstants.CENTER);
250            jButton_7.setMargin(new Insets(2, 2, 2, 2));
251            jButton_7.setText("7");
252            jButton_8.setText("8");
253            jButton_8.setHorizontalTextPosition(SwingConstants.CENTER);
254            jButton_8.setMargin(new Insets(2, 2, 2, 2));
255            jButton_8.setFont(new java.awt.Font("Dialog", 1, 18));
256            jButton_8.setBounds(new Rectangle(55, 60, 41, 44));
257            jButton_8.addActionListener(new java.awt.event.ActionListener() {
258                public void actionPerformed(ActionEvent e) {
259                    jButton_8_actionPerformed(e);
260                }
261            });
262            jButton_9.setBounds(new Rectangle(103, 60, 41, 44));
263            jButton_9.addActionListener(new java.awt.event.ActionListener() {
264                public void actionPerformed(ActionEvent e) {
265                    jButton_9_actionPerformed(e);
266                }
267            });
268            jButton_9.setFont(new java.awt.Font("Dialog", 1, 18));
269            jButton_9.setHorizontalTextPosition(SwingConstants.CENTER);
270            jButton_9.setMargin(new Insets(2, 2, 2, 2));
271            jButton_9.setText("9");
272            jButton_4.setText("4");
273            jButton_4.setHorizontalTextPosition(SwingConstants.CENTER);
274            jButton_4.setMargin(new Insets(2, 2, 2, 2));
275            jButton_4.setFont(new java.awt.Font("Dialog", 1, 18));
276            jButton_4.setBounds(new Rectangle(9, 111, 41, 44));
277            jButton_4.addActionListener(new java.awt.event.ActionListener() {
278                public void actionPerformed(ActionEvent e) {
279                    jButton_4_actionPerformed(e);
280                }
281            });
282            jButton_5.setBounds(new Rectangle(55, 111, 41, 44));
283            jButton_5.addActionListener(new java.awt.event.ActionListener() {
284                public void actionPerformed(ActionEvent e) {
285                    jButton_5_actionPerformed(e);
286                }
287            });
288            jButton_5.setFont(new java.awt.Font("Dialog", 1, 18));
289            jButton_5.setHorizontalTextPosition(SwingConstants.CENTER);
290            jButton_5.setMargin(new Insets(2, 2, 2, 2));
291            jButton_5.setText("5");
292            jButton_6.setText("6");
293            jButton_6.setHorizontalTextPosition(SwingConstants.CENTER);
294            jButton_6.setMargin(new Insets(2, 2, 2, 2));
295            jButton_6.setFont(new java.awt.Font("Dialog", 1, 18));
296            jButton_6.setBounds(new Rectangle(103, 111, 41, 44));
297            jButton_6.addActionListener(new java.awt.event.ActionListener() {
298                public void actionPerformed(ActionEvent e) {
299                    jButton_6_actionPerformed(e);
300                }
301            });
302            jButton_1.setBounds(new Rectangle(9, 163, 41, 44));
303            jButton_1.addActionListener(new java.awt.event.ActionListener() {
304                public void actionPerformed(ActionEvent e) {
305                    jButton_1_actionPerformed(e);
306                }
307            });
308            jButton_1.setFont(new java.awt.Font("Dialog", 1, 18));
309            jButton_1.setHorizontalTextPosition(SwingConstants.CENTER);
310            jButton_1.setMargin(new Insets(2, 2, 2, 2));
311            jButton_1.setText("1");
312            jButton_2.setText("2");
313            jButton_2.setHorizontalTextPosition(SwingConstants.CENTER);
314            jButton_2.setMargin(new Insets(2, 2, 2, 2));
315            jButton_2.setFont(new java.awt.Font("Dialog", 1, 18));
316            jButton_2.setBounds(new Rectangle(55, 163, 41, 44));
317            jButton_2.addActionListener(new java.awt.event.ActionListener() {
318                public void actionPerformed(ActionEvent e) {
319                    jButton_2_actionPerformed(e);
320                }
321            });
322            jButton_3.setBounds(new Rectangle(103, 163, 41, 44));
323            jButton_3.addActionListener(new java.awt.event.ActionListener() {
324                public void actionPerformed(ActionEvent e) {
325                    jButton_3_actionPerformed(e);
326                }
327            });
328            jButton_3.setFont(new java.awt.Font("Dialog", 1, 18));
329            jButton_3.setHorizontalTextPosition(SwingConstants.CENTER);
330            jButton_3.setMargin(new Insets(2, 2, 2, 2));
331            jButton_3.setText("3");
332            jButton_0.setText("0");
333            jButton_0.setHorizontalTextPosition(SwingConstants.CENTER);
334            jButton_0.setMargin(new Insets(2, 2, 2, 2));
335            jButton_0.setFont(new java.awt.Font("Dialog", 1, 18));
336            jButton_0.setBounds(new Rectangle(9, 218, 89, 44));
337            jButton_0.addActionListener(new java.awt.event.ActionListener() {
338                public void actionPerformed(ActionEvent e) {
339                    jButton_0_actionPerformed(e);
340                }
341            });
342            jButton_x.setText("x");
343            jButton_x.setHorizontalTextPosition(SwingConstants.CENTER);
344            jButton_x.setMargin(new Insets(2, 2, 2, 2));
345            jButton_x.setFont(new java.awt.Font("Dialog", 1, 18));
346            jButton_x.setBounds(new Rectangle(103, 218, 41, 44));
347            jButton_x.addActionListener(new java.awt.event.ActionListener() {
348                public void actionPerformed(ActionEvent e) {
349                    jButton_x_actionPerformed(e);
350                }
351            });
352            jButton_Enter.setBounds(new Rectangle(8, 171, 77, 44));
353            jButton_Enter.addActionListener(new java.awt.event.ActionListener() {
354                public void actionPerformed(ActionEvent e) {
355                    jButton_Enter_actionPerformed(e);
356                }
357            });
358            jButton_Enter.setFont(new java.awt.Font("Dialog", 1, 18));
359            jButton_Enter.setHorizontalTextPosition(SwingConstants.CENTER);
360            jButton_Enter.setMargin(new Insets(2, 2, 2, 2));
361            jButton_Enter.setText("Enter");
362            jButton_plus.setBounds(new Rectangle(149, 10, 41, 44));
363            jButton_plus.addActionListener(new java.awt.event.ActionListener() {
364                public void actionPerformed(ActionEvent e) {
365                    jButton_plus_actionPerformed(e);
366                }
367            });
368            jButton_plus.setFont(new java.awt.Font("Dialog", 1, 18));
369            jButton_plus.setHorizontalTextPosition(SwingConstants.CENTER);
370            jButton_plus.setMargin(new Insets(2, 2, 2, 2));
371            jButton_plus.setText("+");
372            jButton_minus.setText("-");
373            jButton_minus.setHorizontalTextPosition(SwingConstants.CENTER);
374            jButton_minus.setMargin(new Insets(2, 2, 2, 2));
375            jButton_minus.setFont(new java.awt.Font("Dialog", 1, 18));
376            jButton_minus.setBounds(new Rectangle(149, 61, 41, 44));
377            jButton_minus.addActionListener(new java.awt.event.ActionListener() {
378                public void actionPerformed(ActionEvent e) {
379                    jButton_minus_actionPerformed(e);
380                }
381            });
382            jButton_swap.setText("Swap");
383            jButton_swap.setHorizontalTextPosition(SwingConstants.CENTER);
384            jButton_swap.setMargin(new Insets(2, 2, 2, 2));
385            jButton_swap.setFont(new java.awt.Font("Dialog", 1, 18));
386            jButton_swap.setBounds(new Rectangle(8, 8, 75, 44));
387            jButton_swap.addActionListener(new java.awt.event.ActionListener() {
388                public void actionPerformed(ActionEvent e) {
389                    jButton_swap_actionPerformed(e);
390                }
391            });
392            jButton_pop.setBounds(new Rectangle(8, 63, 75, 44));
393            jButton_pop.addActionListener(new java.awt.event.ActionListener() {
394                public void actionPerformed(ActionEvent e) {
395                    jButton_pop_actionPerformed(e);
396                }
397            });
398            jButton_pop.setFont(new java.awt.Font("Dialog", 1, 18));
399            jButton_pop.setHorizontalTextPosition(SwingConstants.CENTER);
400            jButton_pop.setMargin(new Insets(2, 2, 2, 2));
401            jButton_pop.setText("Pop");
402            jButton_dup.setText("Dup");
403            jButton_dup.setHorizontalTextPosition(SwingConstants.CENTER);
404            jButton_dup.setMargin(new Insets(2, 2, 2, 2));
405            jButton_dup.setFont(new java.awt.Font("Dialog", 1, 18));
406            jButton_dup.setBounds(new Rectangle(8, 118, 76, 44));
407            jButton_dup.addActionListener(new java.awt.event.ActionListener() {
408                public void actionPerformed(ActionEvent e) {
409                    jButton_dup_actionPerformed(e);
410                }
411            });
412            jTextArea_Current.setLineWrap(true);
413            jTextArea_Current.setBorder(BorderFactory.createLoweredBevelBorder());
414            jTextArea_Current.setBounds(new Rectangle(8, 11, 239, 111));
415            jTextArea_Stack_3.setLineWrap(true);
416            jTextArea_Stack_3.setBorder(border5);
417            jTextArea_Stack_3.setEditable(false);
418            jTextArea_Stack_3.setBounds(new Rectangle(8, 10, 241, 40));
419            jTextArea_Stack_2.setBounds(new Rectangle(8, 57, 241, 40));
420            jTextArea_Stack_2.setLineWrap(true);
421            jTextArea_Stack_2.setBorder(border4);
422            jTextArea_Stack_2.setEditable(false);
423            jTextArea_Stack_1.setLineWrap(true);
424            jTextArea_Stack_1.setBorder(border3);
425            jTextArea_Stack_1.setEditable(false);
426            jTextArea_Stack_1.setBounds(new Rectangle(8, 105, 241, 40));
427            jTextArea_Stack_0.setLineWrap(true);
428            jTextArea_Stack_0.setBorder(border2);
429            jTextArea_Stack_0.setEditable(false);
430            jTextArea_Stack_0.setBounds(new Rectangle(8, 154, 241, 40));
431            jPanel7.setBorder(BorderFactory.createRaisedBevelBorder());
432            jPanel7.setBounds(new Rectangle(403, 411, 199, 283));
433            jPanel7.setLayout(null);
434            jButton_stack_mul
435                    .addActionListener(new java.awt.event.ActionListener() {
436                        public void actionPerformed(ActionEvent e) {
437                            jButton_stack_mul_actionPerformed(e);
438                        }
439                    });
440            jButton_stack_mul.setBounds(new Rectangle(105, 118, 75, 44));
441            jButton_stack_mul.setFont(new java.awt.Font("Dialog", 1, 18));
442            jButton_stack_mul.setMargin(new Insets(2, 2, 2, 2));
443            jButton_stack_mul.setHorizontalTextPosition(SwingConstants.CENTER);
444            jButton_stack_mul.setText("Mul");
445            jButton_stack_div.setText("Div");
446            jButton_stack_div.setHorizontalTextPosition(SwingConstants.CENTER);
447            jButton_stack_div.setMargin(new Insets(2, 2, 2, 2));
448            jButton_stack_div.setFont(new java.awt.Font("Dialog", 1, 18));
449            jButton_stack_div.setBounds(new Rectangle(105, 171, 75, 44));
450            jButton_stack_div
451                    .addActionListener(new java.awt.event.ActionListener() {
452                        public void actionPerformed(ActionEvent e) {
453                            jButton_stack_div_actionPerformed(e);
454                        }
455                    });
456            jButton_stack_add.setText("Add");
457            jButton_stack_add.setHorizontalTextPosition(SwingConstants.CENTER);
458            jButton_stack_add.setMargin(new Insets(2, 2, 2, 2));
459            jButton_stack_add.setFont(new java.awt.Font("Dialog", 1, 18));
460            jButton_stack_add.setBounds(new Rectangle(105, 8, 75, 44));
461            jButton_stack_add
462                    .addActionListener(new java.awt.event.ActionListener() {
463                        public void actionPerformed(ActionEvent e) {
464                            jButton_stack_add_actionPerformed(e);
465                        }
466                    });
467            jButton_stack_sub.setText("Sub");
468            jButton_stack_sub.setHorizontalTextPosition(SwingConstants.CENTER);
469            jButton_stack_sub.setMargin(new Insets(2, 2, 2, 2));
470            jButton_stack_sub.setFont(new java.awt.Font("Dialog", 1, 18));
471            jButton_stack_sub.setBounds(new Rectangle(105, 63, 75, 44));
472            jButton_stack_sub
473                    .addActionListener(new java.awt.event.ActionListener() {
474                        public void actionPerformed(ActionEvent e) {
475                            jButton_stack_sub_actionPerformed(e);
476                        }
477                    });
478            jButton_Clear.setText("Clear");
479            jButton_Clear.setMargin(new Insets(2, 2, 2, 2));
480            jButton_Clear.setHorizontalTextPosition(SwingConstants.CENTER);
481            jButton_Clear.setFont(new java.awt.Font("Dialog", 1, 18));
482            jButton_Clear.addActionListener(new java.awt.event.ActionListener() {
483                public void actionPerformed(ActionEvent e) {
484                    jButton_Clear_actionPerformed(e);
485                }
486            });
487            jButton_Clear.setBounds(new Rectangle(105, 225, 77, 44));
488            this.getContentPane().add(jPanel1, BorderLayout.CENTER);
489            jPanel1.add(jPanel2, null);
490            jPanel1.add(jPanel3, null);
491            jPanel3.add(jTextArea_Stack_3, null);
492            jPanel3.add(jTextArea_Stack_2, null);
493            jPanel3.add(jTextArea_Stack_0, null);
494            jPanel3.add(jTextArea_Stack_1, null);
495            jPanel1.add(jPanel4, null);
496            jPanel4.add(jTextArea_Current, null);
497            jPanel1.add(jPanel5, null);
498            jPanel1.add(jPanel8, null);
499            jPanel5.add(jLabel6, null);
500            jPanel5.add(jLabel5, null);
501            jPanel5.add(jTextField1, null);
502            jPanel5.add(jTextField2, null);
503            jPanel8.add(jButton_int, null);
504            jPanel8.add(jButton_dif, null);
505            jPanel1.add(jPanel6, null);
506            jPanel6.add(jButton_exp, null);
507            jPanel6.add(jButton_8, null);
508            jPanel6.add(jButton_9, null);
509            jPanel6.add(jButton_4, null);
510            jPanel6.add(jButton_5, null);
511            jPanel6.add(jButton_6, null);
512            jPanel6.add(jButton_3, null);
513            jPanel6.add(jButton_0, null);
514            jPanel6.add(jButton_x, null);
515            jPanel6.add(jButton_div, null);
516            jPanel6.add(jButton_plus, null);
517            jPanel6.add(jButton_mul, null);
518            jPanel6.add(jButton_7, null);
519            jPanel6.add(jButton_2, null);
520            jPanel6.add(jButton_1, null);
521            jPanel6.add(jButton_minus, null);
522            jPanel1.add(jPanel7, null);
523            jPanel7.add(jButton_pop, null);
524            jPanel7.add(jButton_dup, null);
525            jPanel7.add(jButton_Enter, null);
526            jPanel7.add(jButton_swap, null);
527            jPanel7.add(jButton_stack_div, null);
528            jPanel7.add(jButton_stack_mul, null);
529            jPanel7.add(jButton_stack_add, null);
530            jPanel7.add(jButton_stack_sub, null);
531            jPanel7.add(jButton_Clear, null);
532    
533            pg = new PolyGraph(this);
534            // pg.setBackground(Color.white);
535            jPanel2.add(pg, "Center");
536        }
537    
538        /** Main method */
539        public static void main(String[] args) {
540            try {
541                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
542            } catch (Exception e) {
543                e.printStackTrace();
544            }
545    
546            CalculatorFrame frame = new CalculatorFrame();
547    
548            // Validate frames that have preset sizes
549            frame.validate();
550    
551            // Center the window
552            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
553    
554            frame.setSize(new Dimension(670, 730));
555            frame.setTitle("Polynomial Calculator");
556    
557            Dimension frameSize = frame.getSize();
558    
559            if (frameSize.height > screenSize.height) {
560                frameSize.height = screenSize.height;
561            }
562            if (frameSize.width > screenSize.width) {
563                frameSize.width = screenSize.width;
564            }
565            frame.setLocation((screenSize.width - frameSize.width) / 2,
566                    (screenSize.height - frameSize.height) / 2);
567            frame.setVisible(true);
568        }
569    
570        boolean startNewEq = false;
571    
572        void appendToCurrentText(String textToAdd) {
573            if (startNewEq) {
574                jTextArea_Current.setText("");
575                startNewEq = false;
576            }
577            String currentText = jTextArea_Current.getText();
578            jTextArea_Current.setText(currentText + textToAdd);
579        }
580    
581        void jButton_1_actionPerformed(ActionEvent e) {
582            appendToCurrentText("1");
583        }
584    
585        void jButton_2_actionPerformed(ActionEvent e) {
586            appendToCurrentText("2");
587        }
588    
589        void jButton_3_actionPerformed(ActionEvent e) {
590            appendToCurrentText("3");
591        }
592    
593        void jButton_4_actionPerformed(ActionEvent e) {
594            appendToCurrentText("4");
595        }
596    
597        void jButton_5_actionPerformed(ActionEvent e) {
598            appendToCurrentText("5");
599        }
600    
601        void jButton_6_actionPerformed(ActionEvent e) {
602            appendToCurrentText("6");
603        }
604    
605        void jButton_7_actionPerformed(ActionEvent e) {
606            appendToCurrentText("7");
607        }
608    
609        void jButton_8_actionPerformed(ActionEvent e) {
610            appendToCurrentText("8");
611        }
612    
613        void jButton_9_actionPerformed(ActionEvent e) {
614            appendToCurrentText("9");
615        }
616    
617        void jButton_exp_actionPerformed(ActionEvent e) {
618            if (startNewEq == true)
619                startNewEq = false;
620            appendToCurrentText("^");
621        }
622    
623        void jButton_mul_actionPerformed(ActionEvent e) {
624            if (startNewEq == true)
625                startNewEq = false;
626            appendToCurrentText("*");
627        }
628    
629        void jButton_div_actionPerformed(ActionEvent e) {
630            if (startNewEq == true)
631                startNewEq = false;
632            appendToCurrentText("/");
633        }
634    
635        void jButton_plus_actionPerformed(ActionEvent e) {
636            if (startNewEq == true)
637                startNewEq = false;
638            appendToCurrentText("+");
639        }
640    
641        void jButton_minus_actionPerformed(ActionEvent e) {
642            if (startNewEq == true)
643                startNewEq = false;
644            appendToCurrentText("-");
645        }
646    
647        void jButton_0_actionPerformed(ActionEvent e) {
648            appendToCurrentText("0");
649        }
650    
651        void jButton_x_actionPerformed(ActionEvent e) {
652            appendToCurrentText("x");
653        }
654    
655        void jButton_swap_actionPerformed(ActionEvent e) {
656            try {
657                if (stack != null)
658                    if (stack.size() > 1)
659                        stack.swap();
660                // Update displays (so that they display new stack contents).
661                updateStackDisplay();
662                updateGraph();
663            } catch (Exception e1) {
664                e1.printStackTrace();
665                return;
666            }
667        }
668    
669        void jButton_pop_actionPerformed(ActionEvent e) {
670            try {
671                if (stack != null) {
672                    if (stack.size() > 0) {
673                        RatPoly popped = stack.pop();
674                        jTextArea_Current.setText(popped.toString());
675                        startNewEq = true;
676                    }
677                }
678                // Update displays (so that they display new stack contents).
679                updateStackDisplay();
680                updateGraph();
681            } catch (Exception e1) {
682                e1.printStackTrace();
683                return;
684            }
685        }
686    
687        void jButton_dup_actionPerformed(ActionEvent e) {
688            try {
689                if (stack != null)
690                    if (stack.size() > 0)
691                        stack.dup();
692                // Update displays (so that they display new stack contents).
693                updateStackDisplay();
694                updateGraph();
695            } catch (Exception e1) {
696                e1.printStackTrace();
697                return;
698            }
699        }
700    
701        void jButton_Enter_actionPerformed(ActionEvent e) {
702            String currentText = jTextArea_Current.getText();
703            RatPoly parsedRatPoly;
704    
705            startNewEq = true;
706            jTextArea_Current.setText("");
707    
708            // Exception handler used here since some of this calls what will
709            // ultimately be student-written code.
710            try {
711                // Create stack if necessary
712                if (stack == null)
713                    stack = new RatPolyStack();
714    
715                // Parse text to get new RatPoly and push it onto the stack.
716                parsedRatPoly = RatPoly.valueOf(currentText);
717                stack.push(parsedRatPoly);
718    
719                // Update displays (so that they display new stack contents).
720                updateStackDisplay();
721                updateGraph();
722            } catch (Exception e1) {
723                // Provide more informative message here.
724                jTextArea_Current.setText(currentText);
725                e1.printStackTrace();
726                return;
727            }
728    
729        }
730    
731        void updateStackDisplay() {
732            // First, clear all the text areas for the stack display.
733            jTextArea_Stack_0.setText("");
734            jTextArea_Stack_1.setText("");
735            jTextArea_Stack_2.setText("");
736            jTextArea_Stack_3.setText("");
737    
738            RatPoly currentRatPoly;
739            String tempString;
740    
741            if (stack != null) {
742    
743                // Now fill in new information base on what's in stack.
744                // Note that size of stack must be checked.
745                if (stack.size() > 0) {
746                    currentRatPoly = stack.getNthFromTop(0);
747                    tempString = currentRatPoly.toString();
748                    jTextArea_Stack_0.setText(tempString);
749                }
750    
751                if (stack.size() > 1) {
752                    currentRatPoly = stack.getNthFromTop(1);
753                    tempString = currentRatPoly.toString();
754                    jTextArea_Stack_1.setText(tempString);
755                }
756    
757                if (stack.size() > 2) {
758                    currentRatPoly = stack.getNthFromTop(2);
759                    tempString = currentRatPoly.toString();
760                    jTextArea_Stack_2.setText(tempString);
761                }
762    
763                if (stack.size() > 3) {
764                    currentRatPoly = stack.getNthFromTop(3);
765                    tempString = currentRatPoly.toString();
766                    jTextArea_Stack_3.setText(tempString);
767                }
768                // Consider abstracting this better! This would require
769                // putting the text areas into an array.
770    
771            }
772    
773        }
774    
775        void updateGraph() {
776            pg.repaint();
777        }
778    
779        void jTextField1_actionPerformed(ActionEvent e) {
780            updateGraph();
781        }
782    
783        void jTextField2_actionPerformed(ActionEvent e) {
784            updateGraph();
785        }
786    
787        void jButton_stack_mul_actionPerformed(ActionEvent e) {
788            try {
789                if (stack != null)
790                    if (stack.size() > 1)
791                        stack.mul();
792                // Update displays (so that they display new stack contents).
793                updateStackDisplay();
794                updateGraph();
795            } catch (Exception e1) {
796                e1.printStackTrace();
797                return;
798            }
799        }
800    
801        void jButton_stack_div_actionPerformed(ActionEvent e) {
802            try {
803                if (stack != null)
804                    if (stack.size() > 1)
805                        stack.div();
806                // Update displays (so that they display new stack contents).
807                updateStackDisplay();
808                updateGraph();
809            } catch (Exception e1) {
810                e1.printStackTrace();
811                return;
812            }
813        }
814    
815        void jButton_int_actionPerformed(ActionEvent e) {
816            try {
817                // System.out.println("Integrate Button Clicked");
818                if (stack != null)
819                    stack.integrate();
820                updateStackDisplay();
821                updateGraph();
822            } catch (Exception e1) {
823                e1.printStackTrace();
824                return;
825            }
826        }
827    
828        void jButton_dif_actionPerformed(ActionEvent e) {
829            try {
830                // System.out.println("Differentiate Button Clicked");
831                if (stack != null)
832                    stack.differentiate();
833                updateStackDisplay();
834                updateGraph();
835            } catch (Exception e1) {
836                e1.printStackTrace();
837                return;
838            }
839        }
840    
841        void jButton_stack_add_actionPerformed(ActionEvent e) {
842            try {
843                if (stack != null)
844                    if (stack.size() > 1)
845                        stack.add();
846                // Update displays (so that they display new stack contents).
847                updateStackDisplay();
848                updateGraph();
849            } catch (Exception e1) {
850                e1.printStackTrace();
851                return;
852            }
853        }
854    
855        void jButton_stack_sub_actionPerformed(ActionEvent e) {
856            try {
857                if (stack != null)
858                    if (stack.size() > 1)
859                        stack.sub();
860                // Update displays (so that they display new stack contents).
861                updateStackDisplay();
862                updateGraph();
863            } catch (Exception e1) {
864                e1.printStackTrace();
865                return;
866            }
867        }
868    
869        void jButton_Clear_actionPerformed(ActionEvent e) {
870            try {
871                if (stack != null)
872                    if (stack.size() > 0)
873                        stack.clear();
874                // Update displays (so that they display new stack contents).
875                updateStackDisplay();
876                updateGraph();
877            } catch (Exception e1) {
878                e1.printStackTrace();
879                return;
880            }
881        }
882    
883    }