Mega Code Archive

 
Categories / Java / Swing JFC
 

How to create customized menu

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);     }   } }