source: josm/trunk/src/org/openstreetmap/josm/gui/util/StayOpenMenuItem.java@ 5088

Last change on this file since 5088 was 5088, checked in by simon04, 12 years ago

fix #6895 - improve MapPaintMenu (add "Preference", keep menu open after clicking checkbox) - thanks: http://tips4java.wordpress.com/2010/09/12/keeping-menus-open/

File size: 1.8 KB
Line 
1package org.openstreetmap.josm.gui.util;
2
3import javax.swing.Action;
4import javax.swing.Icon;
5import javax.swing.JMenuItem;
6import javax.swing.MenuElement;
7import javax.swing.MenuSelectionManager;
8import javax.swing.event.ChangeEvent;
9import javax.swing.event.ChangeListener;
10
11/**
12 * An extension of JMenuItem that doesn't close the menu when selected.
13 *
14 * @author Darryl http://tips4java.wordpress.com/2010/09/12/keeping-menus-open/
15 */
16public class StayOpenMenuItem extends JMenuItem {
17
18 private static MenuElement[] path;
19
20 {
21 getModel().addChangeListener(new ChangeListener() {
22
23 @Override
24 public void stateChanged(ChangeEvent e) {
25 if (getModel().isArmed() && isShowing()) {
26 path = MenuSelectionManager.defaultManager().getSelectedPath();
27 }
28 }
29 });
30 }
31
32 /**
33 * @see JMenuItem#JMenuItem()
34 */
35 public StayOpenMenuItem() {
36 super();
37 }
38
39 /**
40 * @see JMenuItem#JMenuItem(javax.swing.Action)
41 */
42 public StayOpenMenuItem(Action a) {
43 super(a);
44 }
45
46 /**
47 * @see JMenuItem#JMenuItem(javax.swing.Icon)
48 */
49 public StayOpenMenuItem(Icon icon) {
50 super(icon);
51 }
52
53 /**
54 * @see JMenuItem#JMenuItem(java.lang.String)
55 */
56 public StayOpenMenuItem(String text) {
57 super(text);
58 }
59
60 /**
61 * @see JMenuItem#JMenuItem(java.lang.String, javax.swing.Icon)
62 */
63 public StayOpenMenuItem(String text, Icon icon) {
64 super(text, icon);
65 }
66
67 /**
68 * @see JMenuItem#JMenuItem(java.lang.String, int)
69 */
70 public StayOpenMenuItem(String text, int mnemonic) {
71 super(text, mnemonic);
72 }
73
74 /**
75 * Overridden to reopen the menu.
76 *
77 * @param pressTime the time to "hold down" the button, in milliseconds
78 */
79 @Override
80 public void doClick(int pressTime) {
81 super.doClick(pressTime);
82 MenuSelectionManager.defaultManager().setSelectedPath(path);
83 }
84}
Note: See TracBrowser for help on using the repository browser.