Swing JFC Java

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Hashtable;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.MenuSelectionManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
public class ColorChooserMenu extends JFrame {
  public ColorChooserMenu() {
    super("Color Chooser Menu");
    setSize(450, 350);
    JMenuBar menuBar = createMenuBar();
    setJMenuBar(menuBar);
    WindowListener wndCloser = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };
    addWindowListener(wndCloser);
    setVisible(true);
  }
  protected JMenuBar createMenuBar() {
    final JMenuBar menuBar = new JMenuBar();
    ColorMenu cm = new ColorMenu("Foreground");
    cm.setMnemonic('f');
    ActionListener lst = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ColorMenu m = (ColorMenu) e.getSource();
        System.out.println(m.getColor());
      }
    };
    cm.addActionListener(lst);
    menuBar.add(cm);
    return menuBar;
  }
  public static void main(String argv[]) {
    new ColorChooserMenu();
  }
}
class ColorMenu extends JMenu {
  protected Border unselectedBorder;
  protected Border selectedBorder;
  protected Border activeBorder;
  protected Hashtable paneTable;
  protected ColorPane colorPane;
  public ColorMenu(String name) {
    super(name);
    unselectedBorder = new CompoundBorder(new MatteBorder(1, 1, 1, 1,
        getBackground()), new BevelBorder(BevelBorder.LOWERED,
        Color.white, Color.gray));
    selectedBorder = new CompoundBorder(new MatteBorder(1, 1, 1, 1,
        Color.red), new MatteBorder(1, 1, 1, 1, getBackground()));
    activeBorder = new CompoundBorder(new MatteBorder(1, 1, 1, 1,
        Color.blue), new MatteBorder(1, 1, 1, 1, getBackground()));
    JPanel p = new JPanel();
    p.setBorder(new EmptyBorder(5, 5, 5, 5));
    p.setLayout(new GridLayout(8, 8));
    paneTable = new Hashtable();
    int[] values = new int[] { 0 ,128, 192, 255 };
    
    for (int r = 0; r < values.length; r++) {
      for (int g = 0; g < values.length; g++) {
        for (int b = 0; b < values.length; b++) {
          Color c = new Color(values[r], values[g], values[b]);
          ColorPane pn = new ColorPane(c);
          p.add(pn);
          paneTable.put(c, pn);
        }
      }
    }
    add(p);
  }
  public void setColor(Color c) {
    Object obj = paneTable.get(c);
    if (obj == null)
      return;
    if (colorPane != null)
      colorPane.setSelected(false);
    colorPane = (ColorPane) obj;
    colorPane.setSelected(true);
  }
  public Color getColor() {
    if (colorPane == null)
      return null;
    return colorPane.getColor();
  }
  public void doSelection() {
    fireActionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED,
        getActionCommand()));
  }
  class ColorPane extends JPanel implements MouseListener {
    protected Color color;
    protected boolean isSelected;
    public ColorPane(Color c) {
      color = c;
      setBackground(c);
      setBorder(unselectedBorder);
      String msg = "R " + c.getRed() + ", G " + c.getGreen() + ", B "
          + c.getBlue();
      setToolTipText(msg);
      addMouseListener(this);
    }
    public Color getColor() {
      return color;
    }
    public Dimension getPreferredSize() {
      return new Dimension(15, 15);
    }
    public Dimension getMaximumSize() {
      return getPreferredSize();
    }
    public Dimension getMinimumSize() {
      return getPreferredSize();
    }
    public void setSelected(boolean selected) {
      isSelected = selected;
      if (isSelected)
        setBorder(selectedBorder);
      else
        setBorder(unselectedBorder);
    }
    public boolean isSelected() {
      return isSelected;
    }
    public void mousePressed(MouseEvent e) {
    }
    public void mouseClicked(MouseEvent e) {
    }
    public void mouseReleased(MouseEvent e) {
      setColor(color);
      MenuSelectionManager.defaultManager().clearSelectedPath();
      doSelection();
    }
    public void mouseEntered(MouseEvent e) {
      setBorder(activeBorder);
    }
    public void mouseExited(MouseEvent e) {
      setBorder(isSelected ? selectedBorder : unselectedBorder);
    }
  }
}