swing - Java Key Bindings Not Working -


i trying make key bindings in java on jpanel. want action execute when press 'w' button. follow java tutorial on making bindings, actionperformed method not execute (i.e. no text prints out). following entirety of code test gui, relevant part highlighted:

import java.awt.borderlayout; import java.awt.event.actionevent;  import javax.swing.abstractaction; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.keystroke;  @suppresswarnings("serial") public class test extends jframe{  private jpanel panel;  public test(){     super();     setdefaultcloseoperation(jframe.exit_on_close);     setsize(500,500);     setlayout(new borderlayout());     setvisible(true);             panel = new jpanel();      // here key bindings     panel.getinputmap().put(keystroke.getkeystroke('w'),"forward");     panel.getactionmap().put("forward", new abstractaction(){         @override         public void actionperformed(actionevent e){             system.out.println("test");         }     });     // end of key bindings      add(panel, borderlayout.center); }  public static void main(string[] args){     new test();      }  } 

the text "test" never printed. have tried many times many different variants, different keys, , make sure panel in focus, no luck. doing wrong?

the problem way in looking keystroke. keystroke.getkeystroke('w') return typed w, reason, doesn't trigger key event. why tend avoid method. instead use

panel.getinputmap().put(keystroke.getkeystroke("w"),"forward"); 

or

panel.getinputmap().put(keystroke.getkeystroke(keyevent.vk_w, 0),"forward"); 

also, may want define focus constraint inputmap, like

panel.getinputmap(jcomponent.when_in_focused_window)... 

would safer...but need decided @ level want key strokes triggered from

see jcomponent , how use key bindings more details

updated example

import java.awt.borderlayout; import java.awt.eventqueue; import java.awt.event.actionevent; import java.awt.event.keyevent; import javax.swing.abstractaction; import javax.swing.jcomponent; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.keystroke; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception;  public class test extends jframe {      private jpanel panel;      public test() {         super();         setdefaultcloseoperation(jframe.exit_on_close);         setsize(500, 500);         setlayout(new borderlayout());         setvisible(true);         panel = new jpanel();          // here key bindings         panel.getinputmap(jcomponent.when_in_focused_window).put(keystroke.getkeystroke(keyevent.vk_w, 0), "forward");         panel.getactionmap().put("forward", new abstractaction() {             @override             public void actionperformed(actionevent e) {                 system.out.println("test");             }         });         // end of key bindings          add(panel, borderlayout.center);     }      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 try {                     uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());                 } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) {                 }                  new test();             }         });     } } 

Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -