content: package com.japisoft.xmlpad.helper.model;
  
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Font;
  
  import javax.swing.JMenuItem;
  import javax.swing.JPopupMenu;
  import javax.swing.event.ChangeEvent;
  import javax.swing.event.ChangeListener;
  
  /**
  This program is available under two licenses : 
  
  1. For non commercial usage : 
  
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  2. For commercial usage :
  
  You need to get a commercial license for source usage at : 
  
  http://www.editix.com/buy.html
  
  Copyright (c) 2018 Alexandre Brillant - JAPISOFT SARL - http://www.japisoft.com
  
  @author Alexandre Brillant - abrillant@japisoft.com
  @author JAPISOFT SARL - http://www.japisoft.com
  
  */
  public class CommonPopup extends JPopupMenu implements ChangeListener {
  
  	public CommonPopup( String title ) {
  		super( title );	
  		setBackground( Color.WHITE );
  		setForeground( Color.BLACK );
  		setBorderPainted( true );
  	}
  	
  	protected JMenuItem getMenuItem() {
  		JMenuItem item = new JMenuItem();
  		item.setBackground( Color.WHITE );
  		item.setFont( new Font( "arial", Font.PLAIN, 12 ) );
  		item.addChangeListener( this );
  		return item;
  	}
  
  	protected void firePopupMenuWillBecomeInvisible() {
  		super.firePopupMenuWillBecomeInvisible();
  		if ( lastSelection > -1 )
  			notifySelection( lastSelection );	
  		removeListeners();
  	}
  		
  	private void removeListeners() {
  		for ( int i = 0; i < getComponentCount(); i++ ) {
  			if ( getComponent( i ) instanceof JMenuItem ) {
  				( ( JMenuItem )getComponent( i ) ).removeChangeListener( this );
  			}
  		}
  	}
  
  	private int lastSelection = 0;
  
  	/* (non-Javadoc)
  	 * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
  	 */
  	public void stateChanged(ChangeEvent e) {
  		lastSelection = getComponentIndex( ( Component )e.getSource() );
  	}
  
  	protected void notifySelection( int selection ) {
  	}
  
  }
  