package com.opendoorlogistics.codefromweb; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPopupMenu; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; /** * Based on the example at * http://www.jroller.com/santhosh/entry/dropdownbutton_for_swing by santhosh * kumar - santhosh@in.fiorano.com */ public abstract class DropDownMenuButton extends JButton { public DropDownMenuButton(Icon icon) { this(icon, true); } public DropDownMenuButton(Icon icon, boolean addListener) { super(icon); setMargin(new Insets(3, 0, 3, 0)); if(addListener){ addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { processPopup(); } }); } } protected abstract JPopupMenu getPopupMenu(); public void processPopup() { JPopupMenu popup = getPopupMenu(); if (popup != null) { popup.addPopupMenuListener(new PopupMenuListener() { @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { setSelected(true); } @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { setSelected(false); // don't leave the listener hanging around... ((JPopupMenu) e.getSource()).removePopupMenuListener(this); } @Override public void popupMenuCanceled(PopupMenuEvent e) { } }); popup.show(DropDownMenuButton.this, 0, getHeight()); } } }