java - Stop multiple ListCell Context Menus from Showing -


i made custom listview cell can add context menu keeps opening multiple context menus when click more once , old ones raise exceptions when used.

screenshot

here songcell class

public songcell(listview<song> list, playlist playlist) {      setalignment(pos.center_left);      contextmenu listcontextmenu = new contextmenu();     menuitem removeitem = new menuitem("remove");     menuitem editid3item = new menuitem("edit id3");     menuitem playnextitem = new menuitem("play next");     removeitem.setonaction((actionevent event) -> {          list.getitems().remove(getindex());      });      editid3item.setonaction((actionevent event) -> {         optional<pair<string, string>> show = new fxid3edit(getitem()).show();     });     playnextitem.setonaction((actionevent event) -> {         song song = getitem();         list.getitems().remove(song);         playlist.addsongrequest(new songrequest(song, songrequest.type.next));     });      listcontextmenu.getitems().add(removeitem);     listcontextmenu.getitems().add(playnextitem);     listcontextmenu.getitems().add(editid3item);      setonmousepressed(event -> {         if (event.getbutton().equals(mousebutton.secondary)) {              if (getitem() != null) {                  if (getitem().equals(playlist.getsong())) {                     playnextitem.setdisable(true);                     removeitem.setdisable(true);                 } else {                     playnextitem.setdisable(false);                     removeitem.setdisable(false);                 }                 listcontextmenu.show(list, event.getscreenx(), event.getscreeny());             }          }          if (event.getbutton().equals(mousebutton.primary) && event.getclickcount() == 2) {             playlist.setindex(this.getindex());             playlist.play();          }          event.consume();     });  } @override protected void updateitem(song item, boolean empty) {     super.updateitem(item, empty);      if (!empty && item != null) {         this.settext(item.tostring());     } else {         this.settext("");     } } 

i appreciate on coding style

instead of registering mouse listener show context menu, use built-in setcontextmenu(...) property. i.e.:

public songcell(listview<song> list, playlist playlist) {      // ...      setonmousepressed(event -> {          if (event.getbutton().equals(mousebutton.primary) && event.getclickcount() == 2) {             playlist.setindex(this.getindex());             playlist.play();          }          event.consume();     });  }  @override public void updateitem(song item, boolean empty) {     super.updateitem(item, empty);      if (!empty && item != null) {         this.settext(item.tostring());         this.setcontextmenu(listcontextmenu);     } else {         this.settext("");         this.setcontextmenu(null);     } }      

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -