java - Request focus for keylistener, not sure if i have focus or not? -



java - Request focus for keylistener, not sure if i have focus or not? -

i'm not sure why when press w rectangle doesn't adjust accordingly. have focus set right, or need request separate class? should doing in drawingcomponent class or in "core" class?

package scratch; import java.awt.graphics; import java.awt.graphics2d; import javax.swing.jcomponent; import java.awt.*; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.geom.ellipse2d; import java.awt.geom.line2d; import java.awt.geom.point2d; import java.util.*; public class drawingcomponent extends jcomponent implements keylistener { rectangle hello = new rectangle(300, 100, 50, 50); public void paintcomponent(graphics g){ graphics2d g2 = (graphics2d) g; g2.setcolor(new color(255,25,0)); g2.setfont(new font("monospace", font.bold+font.italic, 30)); g2.drawstring("nothing yet",300,320); g2.fill(hello); } @override public void keypressed(keyevent e) { if(e.getkeycode() == keyevent.vk_w){ hello.setlocation(hello.x-50, hello.y); repaint(); } } @override public void keyreleased(keyevent e) { } @override public void keytyped(keyevent e) { // todo auto-generated method stub } }

i have solved problem adding next drawingcomponent class.

setfocusable(true); requestfocus(); addkeylistener(this);

you want utilize key bindings, not keylistener several reasons, 1 beingness don't have worry much focus key bindings. also, you'll want in future post minimal illustration program can test, run , modify, this:

import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.graphics2d; import java.awt.rectangle; import java.awt.event.actionevent; import java.awt.event.keyevent; import javax.swing.*; public class drawingcomponent extends jpanel { private static final int pref_w = 800; private static final int pref_h = 600; private static final color rect_color = new color(255,25,0); private rectangle rect = new rectangle(300, 100, 50, 50); public drawingcomponent() { setupkeybindings(); } private void setupkeybindings() { int status = when_in_focused_window; inputmap inputmap = getinputmap(condition); actionmap actionmap = getactionmap(); keystroke wstroke = keystroke.getkeystroke(keyevent.vk_w, 0); inputmap.put(wstroke, wstroke.tostring()); actionmap.put(wstroke.tostring(), new waction()); } @override protected void paintcomponent(graphics g) { super.paintcomponent(g); graphics2d g2 = (graphics2d) g; g2.setcolor(rect_color); g2.fill(rect); } @override public dimension getpreferredsize() { if (ispreferredsizeset()) { homecoming super.getpreferredsize(); } homecoming new dimension(pref_w, pref_h); } private class waction extends abstractaction { @override public void actionperformed(actionevent e) { rect.setlocation(rect.x-50, rect.y); repaint(); } } private static void createandshowgui() { drawingcomponent mainpanel = new drawingcomponent(); jframe frame = new jframe("drawingcomponent"); frame.setdefaultcloseoperation(jframe.dispose_on_close); frame.getcontentpane().add(mainpanel); frame.pack(); frame.setlocationbyplatform(true); frame.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { createandshowgui(); } }); } }

also, phone call super's paintcomponent method in override, else jpanel won't erase old images.

java swing

Comments

Popular posts from this blog

assembly - What is the addressing mode for ld, add, and rjmp instructions? -

vowpalwabbit - Interpreting Vowpal Wabbit results: Why are some lines appended by "h"? -

Is there a way to convert an HTML page styled with Bootstrap CSS into email-compatible html? -