i trying scale image using mouse motion listener not working. right doing in manually using 2 jtextfields
. taking value jtextfields
, pass values getscaledinstance()
method. not working.
my code :
final jtextfield jj = new jtextfield(); jj.setcolumns(5); buttonpane.add(jj); jbutton btn = new jbutton("resize"); final jtextfield jj1 = new jtextfield(); jj1.setcolumns(5); buttonpane.add(jj1); buttonpane.add(btn); btn.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent arg0) { int x= integer.parseint(jj.gettext()); int y=integer.parseint(jj1.gettext()); bufferedimage b = a; b.getscaledinstance(x, y,bufferedimage.type_int_argb); label.seticon(new imageicon(b)); } });
here a
bufferedimage instance popped stack. , label
jlabel
.
you need assign return reference something...
image scaled = b.getscaledinstance(x, y,bufferedimage.type_int_argb); label.seticon(new imageicon(scaled));
you may want have read through the perils of image.getscaledinstance()
update mouse wheel scaling
import java.awt.borderlayout; import java.awt.dimension; import java.awt.eventqueue; import java.awt.graphics; import java.awt.graphics2d; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.event.mousewheelevent; import java.awt.event.mousewheellistener; import java.awt.geom.affinetransform; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import java.text.numberformat; import java.util.logging.level; import java.util.logging.logger; import javax.imageio.imageio; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.timer; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; public class mousescaletest { public static void main(string[] args) { new mousescaletest(); } public mousescaletest() { eventqueue.invokelater(new runnable() { @override public void run() { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) { } jframe frame = new jframe("testing"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlayout(new borderlayout()); frame.add(new testpane()); frame.pack(); frame.setlocationrelativeto(null); frame.setvisible(true); } }); } public class testpane extends jpanel { private bufferedimage img; private float scale = 1f; private float scaledelta = 0.05f; public testpane() { try { img = imageio.read(new file("/path/to/your/image")); } catch (ioexception ex) { ex.printstacktrace(); } addmousewheellistener(new mousewheellistener() { @override public void mousewheelmoved(mousewheelevent e) { int rotation = e.getwheelrotation(); if (rotation < 0) { scale -= scaledelta; } else { scale += scaledelta; } if (scale < 0) { scale = 0; } else if (scale > 1) { scale = 1; } repaint(); } }); } @override public dimension getpreferredsize() { return img == null ? new dimension(200, 200) : new dimension(img.getwidth(), img.getheight()); } @override protected void paintcomponent(graphics g) { super.paintcomponent(g); if (img != null) { graphics2d g2d = (graphics2d) g.create(); int x = (int)((getwidth() - (img.getwidth() * scale)) / 2); int y = (int)(getheight() - (img.getheight() * scale)) / 2; affinetransform @ = new affinetransform(); at.translate(x, y); at.scale(scale, scale); g2d.settransform(at); g2d.drawimage(img, 0, 0, this); g2d.dispose(); } } } }
take time read through how write mouse listener , how write mouse-wheel listener