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