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.
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
Post a Comment