XJPopupMenu.java
01 /*
02  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
03  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
04  *
05  *  This file is part of GATE (see http://gate.ac.uk/), and is free
06  *  software, licenced under the GNU Library General Public License,
07  *  Version 2, June 1991 (in the distribution as file licence.html,
08  *  and also available at http://gate.ac.uk/gate/licence.html).
09  *
10  *  Valentin Tablan 20 Feb 2003
11  *
12  *  $Id: XJPopupMenu.java 17612 2014-03-10 08:51:17Z markagreenwood $
13  */
14 
15 package gate.swing;
16 
17 
18 import java.awt.Component;
19 import java.awt.Dimension;
20 
21 import javax.swing.JPopupMenu;
22 import javax.swing.JSeparator;
23 
24 /**
25  * A modified version of JPopupMenu that uses {@link MenuLayout} as its layout.
26  */
27 @SuppressWarnings("serial")
28 public class XJPopupMenu extends JPopupMenu {
29   public XJPopupMenu() {
30     super();
31     setLayout(new MenuLayout());
32   }
33 
34   public XJPopupMenu(String label){
35     super(label);
36     setLayout(new MenuLayout());
37   }
38 
39   /**
40    * Force separators to be the same width as the JPopupMenu.
41    * This is because the MenuLayout make separators invisible contrary
42    * to the default JPopupMenu layout manager.
43    @param aFlag true if the popupmenu is visible
44    */
45   @Override
46   public void setVisible(boolean aFlag) {
47     super.setVisible(aFlag);
48     if (!aFlag) { return}
49     MenuLayout layout = (MenuLayoutgetLayout();
50     for (int i = 0; i < getComponents().length; i++) {
51       Component component = getComponents()[i];
52       if (component instanceof JSeparator) {
53         JSeparator separator = (JSeparatorcomponent;
54         int column = layout.getColumnForComponentIndex(i);
55         int preferredWidth = layout.getPreferredWidthForColumn(column);
56         // use the popupmenu width to set the separators width
57         separator.setPreferredSize(new Dimension(
58           preferredWidth, separator.getHeight()));
59       }
60     }
61     revalidate();
62   }
63 }