swing - How to create a Right Click Menu for a Text Field in Java? -
i novice java programmer. trying edit java application, application download manager. has text field in have paste url download particular file. problem trying add mouse event can right click , "paste" url text field. add "cut" , "copy" options right click. have tried many things , failed achieve wanted.
it of great if me done giving me example of code. i know simplest way "cut", "copy" & "paste" menu right clicking text field.
thank you.
partial source code of download manager application modifying.
public class ftpdownloader extends jframe implements observer { private jtextfield addtextfield = new jtextfield(40); private downloadstablemodel tablemodel = new downloadstablemodel(); private jtable table; private jbutton pausebutton = new jbutton("pause"); private jbutton resumebutton = new jbutton("resume"); private jbutton cancelbutton, clearbutton; private jlabel savefilelabel = new jlabel(); private download selecteddownload; private boolean clearing; public ftpdownloader() { settitle("ftp download manager"); setsize(740, 480); setlocationrelativeto(null); addwindowlistener(new windowadapter() { @override public void windowclosing(windowevent e) { system.exit(0); } }); jmenubar menubar = new jmenubar(); jmenu filemenu = new jmenu("file"); filemenu.setmnemonic(keyevent.vk_f); jmenuitem fileexitmenuitem = new jmenuitem("exit", keyevent.vk_x); jmenuitem fileopenmenuitem = new jmenuitem("open", keyevent.vk_o); fileexitmenuitem.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { system.exit(0); } }); fileopenmenuitem.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionsaveto(); } }); filemenu.add(fileopenmenuitem); filemenu.add(fileexitmenuitem); menubar.add(filemenu); setjmenubar(menubar); // set add panel. jpanel addpanel = new jpanel(new borderlayout()); jpanel targetpanel = new jpanel(new borderlayout()); targetpanel.add(addtextfield, borderlayout.west); jbutton addbutton = new jbutton("add download"); addbutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionadd(); } }); targetpanel.add(addbutton, borderlayout.east); jpanel destinationpanel = new jpanel(new borderlayout()); savefilelabel.settext("file:"); destinationpanel.add(savefilelabel, borderlayout.west); jbutton savefilebutton = new jbutton("download to"); savefilebutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionsaveto(); } }); destinationpanel.add(savefilebutton, borderlayout.east); addpanel.add(destinationpanel, borderlayout.north); addpanel.add(targetpanel, borderlayout.south); // set downloads table. table = new jtable(tablemodel); table.getselectionmodel().addlistselectionlistener(new listselectionlistener() { @override public void valuechanged(listselectionevent e) { tableselectionchanged(); } }); table.setselectionmode(listselectionmodel.single_selection); progressrenderer renderer = new progressrenderer(0, 100); renderer.setstringpainted(true); // show progress text table.setdefaultrenderer(jprogressbar.class, renderer); table.setrowheight((int) renderer.getpreferredsize().getheight()); jpanel downloadspanel = new jpanel(); downloadspanel.setborder(borderfactory.createtitledborder("downloads")); downloadspanel.setlayout(new borderlayout()); downloadspanel.add(new jscrollpane(table), borderlayout.center); jpanel buttonspanel = new jpanel(); pausebutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionpause(); } }); pausebutton.setenabled(false); buttonspanel.add(pausebutton); resumebutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionresume(); } }); resumebutton.setenabled(false); buttonspanel.add(resumebutton); cancelbutton = new jbutton("cancel"); cancelbutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actioncancel(); } }); cancelbutton.setenabled(false); buttonspanel.add(cancelbutton); clearbutton = new jbutton("clear"); clearbutton.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { actionclear(); } }); clearbutton.setenabled(false); buttonspanel.add(clearbutton); getcontentpane().setlayout(new borderlayout()); getcontentpane().add(addpanel, borderlayout.north); getcontentpane().add(downloadspanel, borderlayout.center); getcontentpane().add(buttonspanel, borderlayout.south); } private void actionsaveto() { jfilechooser jfchooser = new jfilechooser(); jfchooser.setapprovebuttontext("ok"); jfchooser.setdialogtitle("save to"); jfchooser.setfileselectionmode(jfilechooser.directories_only); int result = jfchooser.showopendialog(this); file newzipfile = jfchooser.getselectedfile(); system.out.println("importprofile:" + newzipfile); this.savefilelabel.settext(newzipfile.getpath()); } private void actionadd() { url verifiedurl = verifyurl(addtextfield.gettext()); if (verifiedurl != null) { tablemodel.adddownload(new download(verifiedurl, savefilelabel.gettext())); addtextfield.settext(""); // reset add text field } else { joptionpane.showmessagedialog(this, "invalid download url", "error", joptionpane.error_message); } } private url verifyurl(string url) { if (!url.tolowercase().startswith("http://")) return null; url verifiedurl = null; try { verifiedurl = new url(url); } catch (exception e) { return null; } if (verifiedurl.getfile().length() < 2) return null; return verifiedurl; } private void tableselectionchanged() { if (selecteddownload != null) selecteddownload.deleteobserver(ftpdownloader.this); if (!clearing && table.getselectedrow() > -1) { selecteddownload = tablemodel.getdownload(table.getselectedrow()); selecteddownload.addobserver(ftpdownloader.this); updatebuttons(); } } private void actionpause() { selecteddownload.pause(); updatebuttons(); } private void actionresume() { selecteddownload.resume(); updatebuttons(); } private void actioncancel() { selecteddownload.cancel(); updatebuttons(); } private void actionclear() { clearing = true; tablemodel.cleardownload(table.getselectedrow()); clearing = false; selecteddownload = null; updatebuttons(); } private void updatebuttons() { if (selecteddownload != null) { int status = selecteddownload.getstatus(); switch (status) { case download.downloading: pausebutton.setenabled(true); resumebutton.setenabled(false); cancelbutton.setenabled(true); clearbutton.setenabled(false); break; case download.paused: pausebutton.setenabled(false); resumebutton.setenabled(true); cancelbutton.setenabled(true); clearbutton.setenabled(false); break; case download.error: pausebutton.setenabled(false); resumebutton.setenabled(true); cancelbutton.setenabled(false); clearbutton.setenabled(true); break; default: // complete or cancelled pausebutton.setenabled(false); resumebutton.setenabled(false); cancelbutton.setenabled(false); clearbutton.setenabled(true); } } else { pausebutton.setenabled(false); resumebutton.setenabled(false); cancelbutton.setenabled(false); clearbutton.setenabled(false); } } public void update(observable o, object arg) { // update buttons if selected download has changed. if (selecteddownload != null && selecteddownload.equals(o)) updatebuttons(); }
Comments
Post a Comment