swing - Java: Adding a Key Listener to a JFrame -
swing - Java: Adding a Key Listener to a JFrame -
i trying graphics programming in java , trying little exercise want create auto go , forth in frame. want create go faster or slower if press or downwards arrow keys. however, not seeming able add together key listener correctly. test code, trying print message command prompt. help appreciated!
the code compiles , runs is. auto going , forth in frame. thing not working key listener.
import java.awt.*; import javax.swing.*; import java.awt.event.*; public class racing extends jframe { public static class auto extends jcomponent implements actionlistener { int x=0; int y=0; int delta = 10; timer timer; int z = 300; public car() { timer = new timer(20,this); timer.start(); addkeylistener(new keyadapter() { @override public void keypressed(keyevent e) { if(e.getkeycode() == keyevent.vk_up) system.out.println("the key pressed!"); } }); } public void paint(graphics g) { super.paintcomponent(g); y = getheight(); z = getwidth(); g.setcolor(color.blue); g.fillrect(0, 0, z, y); polygon polygon = new polygon(); polygon.addpoint(x + 10, y - 20); polygon.addpoint(x + 20, y - 30); polygon.addpoint(x + 30, y - 30); polygon.addpoint(x + 40, y - 20); g.setcolor(color.black); g.filloval(x + 10, y - 11, 10, 10); g.filloval(x + 30, y - 11, 10, 10); g.setcolor(color.green); g.fillrect(x, y - 21, 50, 10); g.setcolor(color.red); g.fillpolygon(polygon); g.setcolor(color.blue); } public void actionperformed(actionevent e) { x += delta; if (x > z-40) { delta *= -1; x = (z-40); } else if (x < 0) { delta *= -1; x = 0; } repaint(); } } public static void main(string[] args) { jframe frame = new jframe("racing"); frame.setpreferredsize(new dimension(600,300)); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.add(new car()); frame.setvisible(true); frame.setfocusable(true); } }
the short reply don't, there many issues involved.
instead, utilize key bindings api. see how utilize key bindings more details
import java.awt.color; import java.awt.dimension; import java.awt.eventqueue; import java.awt.graphics; import java.awt.polygon; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.keyevent; import javax.swing.abstractaction; import javax.swing.actionmap; import javax.swing.inputmap; import javax.swing.jcomponent; import javax.swing.jframe; import javax.swing.keystroke; import javax.swing.timer; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; public class racing extends jframe { public static class auto extends jcomponent implements actionlistener { int x = 0; int y = 0; int delta = 10; timer timer; int z = 300; public car() { timer = new timer(20, this); timer.start(); inputmap im = getinputmap(when_in_focused_window); im.put(keystroke.getkeystroke(keyevent.vk_up, 0), "goingup"); actionmap = getactionmap(); am.put("goingup", new abstractaction() { @override public void actionperformed(actionevent e) { system.out.println("the key pressed!"); } }); } @override protected void paintcomponent(graphics g) { super.paintcomponent(g); y = getheight(); z = getwidth(); g.setcolor(color.blue); g.fillrect(0, 0, z, y); polygon polygon = new polygon(); polygon.addpoint(x + 10, y - 20); polygon.addpoint(x + 20, y - 30); polygon.addpoint(x + 30, y - 30); polygon.addpoint(x + 40, y - 20); g.setcolor(color.black); g.filloval(x + 10, y - 11, 10, 10); g.filloval(x + 30, y - 11, 10, 10); g.setcolor(color.green); g.fillrect(x, y - 21, 50, 10); g.setcolor(color.red); g.fillpolygon(polygon); g.setcolor(color.blue); } public void actionperformed(actionevent e) { x += delta; if (x > z - 40) { delta *= -1; x = (z - 40); } else if (x < 0) { delta *= -1; x = 0; } repaint(); } } public static void main(string[] args) { eventqueue.invokelater(new runnable() { @override public void run() { seek { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } grab (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) { ex.printstacktrace(); } jframe frame = new jframe("racing"); frame.setpreferredsize(new dimension(600, 300)); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.pack(); frame.add(new car()); frame.setvisible(true); frame.setfocusable(true); } }); } } also, don't phone call super.paintcomponent paint, you've broken entire paint chain. instead, override paintcomponent method itself...
java swing jframe keylistener
Comments
Post a Comment