@@ -30,8 +30,6 @@ public class MenuButton extends JButton {
3030 private HorizontalAlignment popupHorizontalAlignment = HorizontalAlignment .LEADING ;
3131 private VerticalAlignment popupVerticalAlignment = VerticalAlignment .BOTTOM ;
3232
33- private JPopupMenu popupMenu = new JPopupMenu ();
34-
3533 private boolean ignorePress = false ;
3634
3735 /**
@@ -73,15 +71,32 @@ public MenuButton(Icon icon) {
7371 public MenuButton (String text , Icon icon ) {
7472 super (text , icon );
7573
74+ var popupMenu = new JPopupMenu ();
75+
76+ popupMenu .addPopupMenuListener (new PopupMenuListener () {
77+ @ Override
78+ public void popupMenuWillBecomeVisible (PopupMenuEvent event ) {
79+ // No-op
80+ }
81+
82+ @ Override
83+ public void popupMenuWillBecomeInvisible (PopupMenuEvent event ) {
84+ // No-op
85+ }
86+
87+ @ Override
88+ public void popupMenuCanceled (PopupMenuEvent event ) {
89+ ignorePress = true ;
90+ }
91+ });
92+
93+ setComponentPopupMenu (popupMenu );
94+
7695 setModel (new DefaultButtonModel () {
7796 @ Override
7897 public void setPressed (boolean pressed ) {
7998 super .setPressed (pressed );
8099
81- if (popupMenu == null ) {
82- return ;
83- }
84-
85100 if (pressed && !ignorePress ) {
86101 var size = getSize ();
87102 var popupMenuSize = popupMenu .getPreferredSize ();
@@ -112,23 +127,6 @@ public void setRollover(boolean rollover) {
112127 ignorePress = false ;
113128 }
114129 });
115-
116- popupMenu .addPopupMenuListener (new PopupMenuListener () {
117- @ Override
118- public void popupMenuWillBecomeVisible (PopupMenuEvent event ) {
119- // No-op
120- }
121-
122- @ Override
123- public void popupMenuWillBecomeInvisible (PopupMenuEvent event ) {
124- // No-op
125- }
126-
127- @ Override
128- public void popupMenuCanceled (PopupMenuEvent event ) {
129- ignorePress = true ;
130- }
131- });
132130 }
133131
134132 /**
@@ -194,7 +192,7 @@ public Component add(Component component) {
194192 throw new IllegalArgumentException ();
195193 }
196194
197- return popupMenu .add (component );
195+ return getComponentPopupMenu () .add (component );
198196 }
199197
200198 /**
@@ -209,7 +207,7 @@ public void remove(Component component) {
209207 throw new IllegalArgumentException ();
210208 }
211209
212- popupMenu .remove (component );
210+ getComponentPopupMenu () .remove (component );
213211 }
214212
215213 /**
0 commit comments