public HelpPanel(final Module module) {
    this.module = module;

    miniHelpBtn = new JButton(showHelpStr);
    megaHelpBtn = new JButton(megaHelpStr);

    SwingUtils.fixButtonOpacity(miniHelpBtn);
    SwingUtils.fixButtonOpacity(megaHelpBtn);

    // Hook up listeners to the buttons that will tell the
    // module what help to show, if any
    miniHelpBtn.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            miniHelpShowing = !miniHelpShowing;

            // If there is no megahelp, don't show the megahelp button
            if (miniHelpShowing) {
              setTwoButtonMode();
            } else {
              setOneButtonMode();
            }
            module.setHelpEnabled(miniHelpShowing);
            // Synchronize the Help menu item.
            PhetApplication.getInstance()
                .getPhetFrame()
                .getHelpMenu()
                .setHelpSelected(miniHelpShowing);
          }
        });
    megaHelpBtn.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            module.showMegaHelp();
          }
        });

    add(miniHelpBtn);
    add(megaHelpBtn);
    layoutPanel();
    setOneButtonMode();
  }
  /**
   * @param min
   * @param max
   * @param textFieldFormat
   * @param units
   * @param initialValue
   * @param title
   */
  private void init(
      final double min,
      final double max,
      NumberFormat textFieldFormat,
      NumberFormat sliderLabelFormat,
      String units,
      double initialValue,
      String title) {

    // In case this has been called in response to a change in some characteristic, remove all the
    // items in the
    // control
    while (getComponentCount() > 0) {
      this.remove(getComponent(0));
    }

    this.title = title;
    this.min = min;
    this.max = max;
    this.textFieldFormat = textFieldFormat;
    this.sliderLabelFormat = sliderLabelFormat;
    this.units = units;
    this.modelViewTransform = new ModelViewTransform1D(min, max, SLIDER_MIN, SLIDER_MAX);
    this.initialValue = initialValue;
    numMajorTicks = 5;
    int numMinorsPerMajor = 2;
    numMinorTicks = (numMajorTicks - 1) * numMinorsPerMajor + 1;

    setLayout(new GridBagLayout());
    setBorder(BorderFactory.createEtchedBorder());
    createTextField();
    textField.setHorizontalAlignment(JTextField.RIGHT);

    createSlider();

    titleLabel =
        new JLabel(title) {
          protected void paintComponent(Graphics g) {
            // added antialias for the ModelSlider title
            ((Graphics2D) g)
                .setRenderingHint(
                    RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            super.paintComponent(g);
          }
        };
    titleLabel.setFont(titleFont);

    unitsReadout = new JTextField(" " + this.units);
    unitsReadout.setFocusable(false);
    unitsReadout.setEditable(false);
    unitsReadout.setBorder(null);

    textPanel = new JPanel();
    textPanel.setLayout(new BorderLayout());
    textPanel.add(textField, BorderLayout.WEST);
    textPanel.add(unitsReadout, BorderLayout.EAST);
    try {
      SwingUtils.addGridBagComponent(
          this, titleLabel, 0, 0, 1, 1, GridBagConstraints.NONE, GridBagConstraints.CENTER);
      SwingUtils.addGridBagComponent(
          this, slider, 0, 1, 1, 1, GridBagConstraints.NONE, GridBagConstraints.CENTER);
      SwingUtils.addGridBagComponent(
          this, textPanel, 0, 2, 2, 1, GridBagConstraints.NONE, GridBagConstraints.CENTER);
    } catch (AWTException e) {
      throw new RuntimeException(e);
    }
    setValue(initialValue);
  }