java - how to pass value to rotate method on menu item click? -
i developing application of rotating image. user click menu item per image should rotate. right have implemented keyboard listener, in user press right left button moves want change method , want per menu item click.
right passes degrees variable method rotate, want custom , user click menu item pass value. don't know how do.
my code:
public class rotateimgn extends jpanel { private static final long serialversionuid = 1l; imageicon image = new imageicon("d://workspace//scaleimage//src//images//img.png"); jlabel label = new jlabel(image); jpanel rotationpanel; final int width = 350; final int height = 500; double degrees; public rotateimgn() { setpreferredsize(new dimension(446, 500)); setfocusable(true); addkeylistener(new keyboardlistener()); rotationpanel = new jpanel(); rotationpanel = new turningcanvas(); rotationpanel.setpreferredsize(new dimension(image.geticonwidth(), image.geticonheight())); add(rotationpanel); jmenubar menubar = new jmenubar(); add(menubar); jmenu mnfile = new jmenu("rotate"); menubar.add(mnfile); imageicon icon90 = createimageicon("/images/images_right.png"); jmenuitem mntmtr90 = new jmenuitem("rotate 90+", icon90); mntmtr90.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent arg0) { try { } catch (exception e) { e.printstacktrace(); } } }); mnfile.add(mntmtr90); imageicon icon180 = createimageicon("/images/images_vertical.png"); jmenuitem mntmrt180 = new jmenuitem("rotate 180+", icon180); mnfile.add(mntmrt180); jseparator separator = new jseparator(); mnfile.add(separator); imageicon micon90 = createimageicon("/images/images_left.png"); jmenuitem mntmtrm90 = new jmenuitem("rotate 90-", micon90); mnfile.add(mntmtrm90); imageicon micon180 = createimageicon("/images/images_horizontal.png"); jmenuitem mntmrtm180 = new jmenuitem("rotate 180-", micon180); mnfile.add(mntmrtm180); rotationpanel.setbounds(width / 2, height / 2, rotationpanel.getpreferredsize().width, rotationpanel.getpreferredsize().height); degrees = 0; } public void paintcomponent(graphics g) { super.paintcomponent(g); } public class turningcanvas extends jpanel { private static final long serialversionuid = 1l; public void paintcomponent(graphics g) { super.paintcomponent(g); graphics2d g2d = (graphics2d) g; g2d.rotate(math.toradians(degrees), image.geticonwidth() / 2, image.geticonheight() / 2); image.painticon(this, g2d, 0, 0); } } public class keyboardlistener implements keylistener { public void keypressed(keyevent event) { if (event.getkeycode() == keyevent.vk_left) { degrees--; repaint(); } if (event.getkeycode() == keyevent.vk_right) { degrees++; repaint(); } } public void keytyped(keyevent event) { } public void keyreleased(keyevent event) { } } public static void main(string[] args) { rotateimgn test = new rotateimgn(); jframe frame = new jframe(); frame.setcontentpane(test); frame.pack(); frame.setvisible(true); } protected static imageicon createimageicon(string path) { java.net.url imgurl = rotateimgn.class.getresource(path); if (imgurl != null) { return new imageicon(imgurl); } else { system.err.println("couldn't find file: " + path); return null; } } } anyone's idea me lot so...
use swing actions menu items instead of strings. then, in actionperformed method, update degreesvariable, keylistener.
something like:
imageicon icon90 = createimageicon("/images/images_right.png"); jmenuitem mntmtr90 = new jmenuitem(new abstractaction("rotate 90+", icon90) { public void actionperformed(actionevent e) { degrees += 90; repaint(); } });
Comments
Post a Comment