private JPanel getMixerOptionsPanel() {
    if (mixerOptionsPanel == null) {
      mixerOptionsPanel = new JPanel();
      mixerOptionsPanel.setBorder(
          BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Mixer"));

      mixerOptionsPanel.setLayout(new GridBagLayout());
      GridBagConstraints c = new GridBagConstraints();

      c.anchor = GridBagConstraints.NORTHWEST;
      c.fill = GridBagConstraints.NONE;
      c.weightx = 1;

      c.insets = new Insets(8, 4, 0, 0);
      mixerOptionsPanel.add(new JLabel("Select mixer:"), c);

      c.gridy = 1;
      mixerOptionsPanel.add(getMixerComboBox(), c);

      c.gridy = 2;
      mixerOptionsPanel.add(getMixerDefaultButton(), c);

      c.insets = new Insets(16, 4, 0, 0);
      c.gridy = 3;
      mixerOptionsPanel.add(new JLabel("Enable mixer features:"), c);

      c.insets = new Insets(6, 0, 0, 0);
      c.gridy = 4;
      mixerOptionsPanel.add(getEnableMixerVolumeCheckBox(), c);

      c.insets = new Insets(0, 0, 0, 0);
      c.gridy = 5;
      mixerOptionsPanel.add(getEnableMixerPanCheckBox(), c);

      if (AudioSystem.getMixerInfo().length == 0) {
        for (Component child : mixerOptionsPanel.getComponents()) {
          child.setEnabled(false);
        }
      }
    }
    return mixerOptionsPanel;
  }
  private JPanel getSoundOptionsPanel() {
    if (soundOptionsPanel == null) {
      soundOptionsPanel = new JPanel();
      soundOptionsPanel.setBorder(
          BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Sound Effects"));

      soundOptionsPanel.setLayout(new GridBagLayout());
      GridBagConstraints c = new GridBagConstraints();

      c.fill = 1;
      c.weightx = 1;
      c.anchor = GridBagConstraints.NORTHWEST;

      c.gridwidth = GridBagConstraints.REMAINDER;
      soundOptionsPanel.add(getEnableSoundCheckBox(), c);
      soundOptionsPanel.add(getEnableGunshotCheckBox(), c);
      soundOptionsPanel.add(getEnableBulletHitCheckBox(), c);
      soundOptionsPanel.add(getEnableRobotDeathCheckBox(), c);
      soundOptionsPanel.add(getEnableWallCollisionCheckBox(), c);
      soundOptionsPanel.add(getEnableRobotCollisionCheckBox(), c);

      c.insets = new Insets(10, 0, 0, 10);
      c.gridwidth = 1;
      c.fill = 0;
      c.weighty = 1;
      c.weightx = 0;
      soundOptionsPanel.add(getEnableAllSoundsButton(), c);
      c.weightx = 1;
      c.gridwidth = GridBagConstraints.REMAINDER;
      soundOptionsPanel.add(getDisableAllSoundsButton(), c);

      if (AudioSystem.getMixerInfo().length == 0) {
        for (Component child : soundOptionsPanel.getComponents()) {
          child.setEnabled(false);
        }
      }
    }
    return soundOptionsPanel;
  }
  // Public constructor
  public ElectronicOrganFrame(String title) {
    // Call parent constructor to give title to frame
    super(title);

    // Make this frame its own window listener
    addWindowListener(windowListener);

    // Panel components: waveformPanel
    waveformPanel.setBorder(
        new TitledBorder(new BevelBorder(BevelBorder.RAISED), "Waveform Options"));
    GridBagLayout waveformPanelGridBag = new GridBagLayout();
    GridBagConstraints waveformPanelConstr = new GridBagConstraints();
    waveformPanel.setLayout(waveformPanelGridBag);
    waveformPanelConstr.anchor = GridBagConstraints.CENTER;
    waveformPanelConstr.weightx = 1.0;
    waveformPanelConstr.weighty = 1.0;
    waveformPanelConstr.fill = GridBagConstraints.BOTH;
    waveformPanelConstr.gridx = 0;
    waveformPanelConstr.gridy = 0;
    waveformPanelConstr.gridwidth = 1;
    waveformPanelConstr.gridheight = 1;
    waveformPanelGridBag.setConstraints(sineButton, waveformPanelConstr);
    waveformPanel.add(sineButton);
    waveformPanelRadio.add(sineButton);
    sineButton.addActionListener(actionListener);
    waveformPanelConstr.gridx = 1;
    waveformPanelConstr.gridy = 0;
    waveformPanelConstr.gridwidth = 1;
    waveformPanelConstr.gridheight = 1;
    waveformPanelGridBag.setConstraints(squareButton, waveformPanelConstr);
    waveformPanel.add(squareButton);
    waveformPanelRadio.add(squareButton);
    squareButton.addActionListener(actionListener);
    waveformPanelConstr.gridx = 2;
    waveformPanelConstr.gridy = 0;
    waveformPanelConstr.gridwidth = 1;
    waveformPanelConstr.gridheight = 1;
    waveformPanelGridBag.setConstraints(sawtoothButton, waveformPanelConstr);
    waveformPanel.add(sawtoothButton);
    waveformPanelRadio.add(sawtoothButton);
    sawtoothButton.addActionListener(actionListener);
    waveformPanelConstr.gridx = 3;
    waveformPanelConstr.gridy = 0;
    waveformPanelConstr.gridwidth = 1;
    waveformPanelConstr.gridheight = 1;
    waveformPanelGridBag.setConstraints(triangleButton, waveformPanelConstr);
    waveformPanel.add(triangleButton);
    waveformPanelRadio.add(triangleButton);
    triangleButton.addActionListener(actionListener);

    // Panel components: exitPanel
    exitPanel.setLayout(new GridLayout(1, 5));
    exitPanel.add(label1);
    exitPanel.add(label2);
    exitPanel.add(exitButton);
    exitButton.addActionListener(actionListener);
    exitPanel.add(label3);
    exitPanel.add(label4);
    GridBagLayout thisGridBag = new GridBagLayout();
    GridBagConstraints thisConstr = new GridBagConstraints();
    this.getContentPane().setLayout(thisGridBag);
    thisConstr.anchor = GridBagConstraints.CENTER;
    thisConstr.weightx = 1.0;
    thisConstr.weighty = 1.0;
    thisConstr.fill = GridBagConstraints.BOTH;
    thisConstr.gridx = 0;
    thisConstr.gridy = 0;
    thisConstr.gridwidth = 3;
    thisConstr.gridheight = 1;
    thisGridBag.setConstraints(label5, thisConstr);
    this.getContentPane().add(label5);
    thisConstr.gridx = 0;
    thisConstr.gridy = 1;
    thisConstr.gridwidth = 1;
    thisConstr.gridheight = 1;
    thisGridBag.setConstraints(label6, thisConstr);
    this.getContentPane().add(label6);
    thisConstr.gridx = 1;
    thisConstr.gridy = 1;
    thisConstr.gridwidth = 1;
    thisConstr.gridheight = 1;
    thisGridBag.setConstraints(waveformPanel, thisConstr);
    this.getContentPane().add(waveformPanel);
    thisConstr.gridx = 2;
    thisConstr.gridy = 1;
    thisConstr.gridwidth = 1;
    thisConstr.gridheight = 1;
    thisGridBag.setConstraints(label7, thisConstr);
    this.getContentPane().add(label7);
    thisConstr.gridx = 1;
    thisConstr.gridy = 2;
    thisConstr.gridwidth = 1;
    thisConstr.gridheight = 1;
    thisGridBag.setConstraints(exitPanel, thisConstr);
    this.getContentPane().add(exitPanel);

    // Set frame size and show it
    setSize(500, 200);
    setVisible(true);
  } // Frame constructor ElectronicOrganFrame ()