gt:         panel = new BasicPanel(backend);
context: /**
   * Created : Mar 27, 2012
   *
   * @author pquiring
   */
  
  import java.awt.*;
  import java.util.*;
  import javax.swing.*;
  
  public class CalculatorApp extends javax.swing.JFrame {
  
    public static String version = "0.4";
  
    /**
     * Creates new form CalculatorApp
     */
    public CalculatorApp() {
      initComponents();
      backend = new Backend();
      loadPanel(0);
      setPosition();
    }
  
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
      private void initComponents() {
  
          menuBar = new javax.swing.JMenuBar();
          jMenu1 = new javax.swing.JMenu();
          cut = new javax.swing.JMenuItem();
          copy = new javax.swing.JMenuItem();
          paste = new javax.swing.JMenuItem();
          jSeparator1 = new javax.swing.JPopupMenu.Separator();
          viewFormula = new javax.swing.JMenuItem();
          jSeparator2 = new javax.swing.JPopupMenu.Separator();
          quit = new javax.swing.JMenuItem();
          jMenu2 = new javax.swing.JMenu();
          basicMode = new javax.swing.JMenuItem();
          sciMode = new javax.swing.JMenuItem();
          devMode = new javax.swing.JMenuItem();
          jMenu3 = new javax.swing.JMenu();
          help = new javax.swing.JMenuItem();
          about = new javax.swing.JMenuItem();
  
          setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
          setTitle("jCalculator");
          setResizable(false);
  
          jMenu1.setText("Edit");
  
          cut.setText("Cut");
          cut.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  cutActionPerformed(evt);
              }
          });
          jMenu1.add(cut);
  
          copy.setText("Copy");
          copy.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  copyActionPerformed(evt);
              }
          });
          jMenu1.add(copy);
  
          paste.setText("Paste");
          paste.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  pasteActionPerformed(evt);
              }
          });
          jMenu1.add(paste);
          jMenu1.add(jSeparator1);
  
          viewFormula.setText("View Formula");
          viewFormula.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  viewFormulaActionPerformed(evt);
              }
          });
          jMenu1.add(viewFormula);
          jMenu1.add(jSeparator2);
  
          quit.setText("Quit");
          quit.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  quitActionPerformed(evt);
              }
          });
          jMenu1.add(quit);
  
          menuBar.add(jMenu1);
  
          jMenu2.setText("Mode");
  
          basicMode.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F2, 0));
          basicMode.setText("Basic");
          basicMode.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  basicModeActionPerformed(evt);
              }
          });
          jMenu2.add(basicMode);
  
          sciMode.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
          sciMode.setText("Scientific");
          sciMode.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  sciModeActionPerformed(evt);
              }
          });
          jMenu2.add(sciMode);
  
          devMode.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, 0));
          devMode.setText("Programmer");
          devMode.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  devModeActionPerformed(evt);
              }
          });
          jMenu2.add(devMode);
  
          menuBar.add(jMenu2);
  
          jMenu3.setText("Help");
  
          help.setText("Help");
          help.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  helpActionPerformed(evt);
              }
          });
          jMenu3.add(help);
  
          about.setText("About");
          about.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  aboutActionPerformed(evt);
              }
          });
          jMenu3.add(about);
  
          menuBar.add(jMenu3);
  
          setJMenuBar(menuBar);
  
          javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
          getContentPane().setLayout(layout);
          layout.setHorizontalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGap(0, 400, Short.MAX_VALUE)
          );
          layout.setVerticalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGap(0, 273, Short.MAX_VALUE)
          );
  
          pack();
      }// </editor-fold>//GEN-END:initComponents
  
    private void viewFormulaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewFormulaActionPerformed
      backend.endEntry();
      FormulaDialog dialog = new FormulaDialog(this, true, backend);
      backend.inDialog = true;
      dialog.setVisible(true);
      backend.inDialog = false;
      if (backend.formula.get(backend.fidx).length() > 0) {
        backend.formula.add("");
        backend.fidx++;
      }
      backend.display.setDisplay("");
    }//GEN-LAST:event_viewFormulaActionPerformed
  
    private void quitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quitActionPerformed
      System.exit(0);
    }//GEN-LAST:event_quitActionPerformed
  
    private void basicModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_basicModeActionPerformed
      loadPanel(0);
    }//GEN-LAST:event_basicModeActionPerformed
  
    private void sciModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sciModeActionPerformed
      loadPanel(1);
    }//GEN-LAST:event_sciModeActionPerformed
  
    private void devModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_devModeActionPerformed
      loadPanel(2);
    }//GEN-LAST:event_devModeActionPerformed
  
    private void cutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cutActionPerformed
      backend.display.cut();
    }//GEN-LAST:event_cutActionPerformed
  
    private void copyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyActionPerformed
      backend.display.copy();
    }//GEN-LAST:event_copyActionPerformed
  
    private void pasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteActionPerformed
      backend.paste();
    }//GEN-LAST:event_pasteActionPerformed
  
    private void aboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutActionPerformed
      backend.about();
    }//GEN-LAST:event_aboutActionPerformed
  
    private void helpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpActionPerformed
      try {
        Runtime.getRuntime().exec("jhelp jcalc");
      } catch (Exception e) {
      }
    }//GEN-LAST:event_helpActionPerformed
  
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
      /*
       * Create and display the form
       */
      java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
          new CalculatorApp().setVisible(true);
        }
      });
    }
      // Variables declaration - do not modify//GEN-BEGIN:variables
      private javax.swing.JMenuItem about;
      private javax.swing.JMenuItem basicMode;
      private javax.swing.JMenuItem copy;
      private javax.swing.JMenuItem cut;
      private javax.swing.JMenuItem devMode;
      private javax.swing.JMenuItem help;
      private javax.swing.JMenu jMenu1;
      private javax.swing.JMenu jMenu2;
      private javax.swing.JMenu jMenu3;
      private javax.swing.JPopupMenu.Separator jSeparator1;
      private javax.swing.JPopupMenu.Separator jSeparator2;
      private javax.swing.JMenuBar menuBar;
      private javax.swing.JMenuItem paste;
      private javax.swing.JMenuItem quit;
      private javax.swing.JMenuItem sciMode;
      private javax.swing.JMenuItem viewFormula;
      // End of variables declaration//GEN-END:variables
  
    private Backend backend;
  
    private void setFrameSize(Dimension size) {
      Insets insets = getInsets();
      size.width += insets.left + insets.right;
      size.height += insets.top + insets.bottom;
      size.height += menuBar.getHeight();
      setSize(size);
    }
  
    private void loadPanel(int type) {
      backend.mode = type;
      JPanel panel = null;
      switch (type) {
        case 0:  //basic
  