public static void main(String args[]) {
    // UIManager.put("PopupMenu.border", new BorderUIResource.EmptyBorderUIResource(4,0,4,0));

    try {
      UIManager.setLookAndFeel(QuaquaManager.getLookAndFeelClassName());
      //   UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    } catch (Exception e) {
      e.printStackTrace();
    }
    JFrame f = new JFrame("PopupMenuTest: " + UIManager.getLookAndFeel().getName());
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new PopupMenuTest());
    f.pack();
    f.setVisible(true);
  }
  /** Creates a new instance. */
  public Crayons() {
    initComponents();

    setForeground(new Color(0x808080));
    setPreferredSize(new Dimension(195, 208));
    setFont(UIManager.getFont("ColorChooser.crayonsFont"));

    crayonsImage = createCrayonsImage();
    crayons = createCrayons();

    mouseHandler = new MouseHandler();
    addMouseListener(mouseHandler);
  }
  public void addColorChooserPanel(final AbstractColorChooserPanel ccp) {
    final String displayName = ccp.getDisplayName();
    if (displayName == null) {
      // Return if we haven't initialized yet
      return;
    }

    if (ccp.getClass()
        .getName()
        .equals("ch.randelshofer.quaqua.colorchooser.Quaqua15ColorPicker")) {
      northPanel.add(ccp, BorderLayout.WEST);
    } else {
      Icon displayIcon = ccp.getLargeDisplayIcon();
      JToggleButton tb = new JToggleButton(null, displayIcon);
      tb.setToolTipText(displayName);
      tb.setFocusable(false);
      tb.setHorizontalTextPosition(SwingConstants.CENTER);
      tb.setVerticalTextPosition(SwingConstants.BOTTOM);
      tb.setFont(UIManager.getFont("ColorChooser.font"));
      tb.putClientProperty("Quaqua.Button.style", "toolBarTab");
      JPanel centerView = new JPanel(new BorderLayout());
      centerView.add(ccp);
      chooserPanelHolder.add(centerView, displayName);
      toolBarButtonGroup.add(tb);
      toolBar.add(tb);

      if (toolBar.getComponentCount() == 1
          || lastSelectedChooserName != null && lastSelectedChooserName.equals(displayName)) {
        tb.setSelected(true);
        CardLayout cl = (CardLayout) chooserPanelHolder.getLayout();
        cl.show(chooserPanelHolder, displayName);
      }

      tb.addItemListener(
          new ItemListener() {
            public void itemStateChanged(ItemEvent evt) {
              if (evt.getStateChange() == ItemEvent.SELECTED) {
                CardLayout cl = (CardLayout) chooserPanelHolder.getLayout();
                cl.show(chooserPanelHolder, displayName);
                lastSelectedChooserName = displayName;
              }
            }
          });
    }
  }
  /**
   * Creates the crayons.
   *
   * @return Array of crayons in z-order from bottom to top.
   */
  protected Crayon[] createCrayons() {
    Color[] colors = DefaultPalettes.CRAYONS;
    crayons = new Crayon[colors.length];
    for (int i = 0; i < colors.length; i++) {
      crayons[i] =
          new Crayon(
              colors[i],
              UIManager.getString(
                  "ColorChooser.crayon."
                      + Integer.toHexString(0xff000000 | colors[i].getRGB()).substring(2)),
              new Polygon(
                  (int[]) crayonXPoints.clone(),
                  (int[]) crayonYPoints.clone(),
                  crayonXPoints.length));
      crayons[i].shape.translate((i % 8) * 22 + 4 + ((i / 8) % 2) * 11, (i / 8) * 20 + 23);
    }

    return crayons;
  }
  // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
  private void initComponents() {
    java.awt.GridBagConstraints gridBagConstraints;

    fc = new javax.swing.JPanel();
    fromPanel = new javax.swing.JPanel();
    fileNameLabel = new javax.swing.JLabel();
    fileNameTextField = new javax.swing.JTextField();
    strutPanel1 = new javax.swing.JPanel();
    lookInLabel = new javax.swing.JLabel();
    directoryComboBox = new javax.swing.JComboBox();
    strutPanel2 = new javax.swing.JPanel();
    separatorPanel1 = new javax.swing.JPanel();
    separatorPanel2 = new javax.swing.JPanel();
    browserScrollPane = new javax.swing.JScrollPane();
    browser = new ch.randelshofer.quaqua.JBrowser();
    newFolderButton = new javax.swing.JButton();
    separatorPanel = new javax.swing.JPanel();
    formatPanel = new javax.swing.JPanel();
    formatPanel2 = new javax.swing.JPanel();
    filesOfTypeLabel = new javax.swing.JLabel();
    filterComboBox = new javax.swing.JComboBox();
    accessoryPanel = new javax.swing.JPanel();
    buttonPanel = new javax.swing.JPanel();
    cancelButton = new javax.swing.JButton();
    approveButton = new javax.swing.JButton();

    setLayout(new java.awt.BorderLayout());

    fc.setLayout(new java.awt.GridBagLayout());

    fromPanel.setLayout(new java.awt.GridBagLayout());

    fileNameLabel.setText(UIManager.getString("FileChooser.fileNameLabelText"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 14, 0);
    fromPanel.add(fileNameLabel, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.insets = new java.awt.Insets(0, 2, 14, 0);
    fromPanel.add(fileNameTextField, gridBagConstraints);

    strutPanel1.setLayout(null);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.ipadx = 40;
    gridBagConstraints.ipady = 5;
    fromPanel.add(strutPanel1, gridBagConstraints);

    lookInLabel.setText(UIManager.getString("FileChooser.fromLabelText"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridheight = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 1, 0, 0);
    fromPanel.add(lookInLabel, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridheight = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 0);
    fromPanel.add(directoryComboBox, gridBagConstraints);

    strutPanel2.setLayout(new java.awt.BorderLayout());

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.ipadx = 40;
    gridBagConstraints.ipady = 5;
    fromPanel.add(strutPanel2, gridBagConstraints);

    separatorPanel1.setLayout(new java.awt.BorderLayout());

    separatorPanel1.setBackground(
        javax.swing.UIManager.getDefaults().getColor("Separator.foreground"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.ipadx = 40;
    gridBagConstraints.ipady = 1;
    gridBagConstraints.weightx = 1.0E-4;
    fromPanel.add(separatorPanel1, gridBagConstraints);

    separatorPanel2.setLayout(new java.awt.BorderLayout());

    separatorPanel2.setBackground(
        javax.swing.UIManager.getDefaults().getColor("Separator.foreground"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.ipadx = 40;
    gridBagConstraints.ipady = 1;
    fromPanel.add(separatorPanel2, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.insets = new java.awt.Insets(14, 0, 0, 0);
    fc.add(fromPanel, gridBagConstraints);

    browserScrollPane.setHorizontalScrollBarPolicy(
        javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
    browserScrollPane.setVerticalScrollBarPolicy(
        javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
    browserScrollPane.setViewportView(browser);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.weighty = 1.0;
    gridBagConstraints.insets = new java.awt.Insets(8, 23, 0, 23);
    fc.add(browserScrollPane, gridBagConstraints);

    newFolderButton.setText(UIManager.getString("FileChooser.newFolderButtonText"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
    fc.add(newFolderButton, gridBagConstraints);

    separatorPanel.setLayout(new java.awt.BorderLayout());

    separatorPanel.setBackground(
        javax.swing.UIManager.getDefaults().getColor("Separator.foreground"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.ipady = 1;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.insets = new java.awt.Insets(14, 0, 0, 0);
    fc.add(separatorPanel, gridBagConstraints);

    formatPanel.setLayout(new java.awt.GridBagLayout());

    formatPanel2.setLayout(new java.awt.BorderLayout(2, 0));

    filesOfTypeLabel.setText(UIManager.getString("FileChooser.filesOfTypeLabelText"));
    formatPanel2.add(filesOfTypeLabel, java.awt.BorderLayout.WEST);

    formatPanel2.add(filterComboBox, java.awt.BorderLayout.CENTER);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.insets = new java.awt.Insets(0, 40, 0, 40);
    formatPanel.add(formatPanel2, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
    gridBagConstraints.insets = new java.awt.Insets(14, 0, 0, 0);
    fc.add(formatPanel, gridBagConstraints);

    accessoryPanel.setLayout(new java.awt.BorderLayout());

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 5;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.insets = new java.awt.Insets(14, 20, 0, 20);
    fc.add(accessoryPanel, gridBagConstraints);

    buttonPanel.setLayout(new java.awt.GridBagLayout());

    cancelButton.setText(UIManager.getString("FileChooser.cancelButtonText"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.insets = new java.awt.Insets(0, 18, 16, 0);
    buttonPanel.add(cancelButton, gridBagConstraints);

    approveButton.setText(UIManager.getString("FileChooser.openButtonText"));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.insets = new java.awt.Insets(0, 6, 16, 22);
    buttonPanel.add(approveButton, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridy = 6;
    gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.insets = new java.awt.Insets(14, 0, 0, 0);
    fc.add(buttonPanel, gridBagConstraints);

    add(fc, java.awt.BorderLayout.CENTER);
  } // </editor-fold>//GEN-END:initComponents
 protected Image createCrayonsImage() {
   return (Image) UIManager.get("ColorChooser.crayonsImage");
 }