java - Listener running before action -


i have made custom jcombobox. using jpopupmenu containing jcheckboxmenuitem. apparently popupmenulistener popupmenuwillbecomeinvisible running before jcheckboxmenuitem changed. ideas how fix? not add listeners jcheckboxmenuitem.

public class listenertest  extends jframe implements actionlistener, popupmenulistener {      private jpopupmenu menu;     private list<jcheckboxmenuitem> menuitems;      private jcheckboxmenuitem i1;     private jcheckboxmenuitem i2;     private jcheckboxmenuitem i3;      public listenertest(){          // create button         jbutton b = new jbutton("click me!");         b.addactionlistener(this);          // create popupmenu         menu = new jpopupmenu();         menu.addpopupmenulistener(this);          // add checkboxes popupmenu          menuitems = new linkedlist<jcheckboxmenuitem>();         i1 = new jcheckboxmenuitem("1");         i2 = new jcheckboxmenuitem("2");         i3 = new jcheckboxmenuitem("3");         menu.add(i1);         menu.add(i2);         menu.add(i3);          this.add(b);         this.setdefaultcloseoperation(exit_on_close);         this.pack();         this.setvisible(true);     }      public static void main(string[] args){         new listenertest();     }      @override     public void actionperformed(actionevent e) {         // show popupmenu when button clicked         menu.show(this, 0, this.getheight());     }      @override     public void popupmenuwillbecomevisible(popupmenuevent e) {}      @override     public void popupmenuwillbecomeinvisible(popupmenuevent e) {         // check checkboxes checked when popup menu closed(currently 1 step behind)         system.out.println(i1.isselected());         system.out.println(i2.isselected());         system.out.println(i3.isselected());     }      @override     public void popupmenucanceled(popupmenuevent e) {} } 

one "possible" solution vs. kludge, use popupmenuwillbecomeinvisible(...) queue checking of state onto swing event queue performs action later, after items on event queue have finished. not guaranteed work however.

@override public void popupmenuwillbecomeinvisible(popupmenuevent e) {    swingutilities.invokelater(new runnable() {      public void run() {         system.out.println(i1.isselected());         system.out.println(i2.isselected());         system.out.println(i3.isselected());      }   }); } 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -