001package arcommon.ui.other; 002 003import java.awt.Component; 004import java.awt.event.MouseAdapter; 005import java.awt.event.MouseEvent; 006import java.awt.event.MouseListener; 007 008import javax.swing.JPopupMenu; 009 010/** 011 * A {@link javax.swing.JPopupMenu} with the two convenience methods {@link #addToComponent(Component)} and {@link #removeFromComponent(Component)}. 012 */ 013public class MyJPopupMenu extends JPopupMenu { 014 015 private PopupListener popupListener; 016 017 public void addToComponent(Component component) { 018 if (popupListener == null) { 019 popupListener = new PopupListener(); 020 } 021 022 MouseListener[] mouseListeners = component.getMouseListeners(); 023 for (int i = 0; i < mouseListeners.length; i++) { 024 MouseListener mouseListener = mouseListeners[i]; 025 if (mouseListener == popupListener) { 026 return ; 027 } 028 } 029 030 component.addMouseListener(popupListener); 031 } 032 033 public void removeFromComponent(Component component) { 034 component.removeMouseListener(popupListener); 035 } 036 037 private class PopupListener extends MouseAdapter { 038 public void mousePressed(MouseEvent e) { 039 maybeShowPopup(e); 040 } 041 042 public void mouseReleased(MouseEvent e) { 043 maybeShowPopup(e); 044 } 045 046 private void maybeShowPopup(MouseEvent e) { 047 if (e.isPopupTrigger()) { 048 show(e.getComponent(), e.getX(), e.getY()); 049 } 050 } 051 } 052 053 private static final long serialVersionUID = -6633832906300600048L; 054}