in java file below, create frame containing panel, nests second panel. i'm trying listen key strokes in nested panel. approach use input map , action map. i've found if have input map nested panel, things work expected. however, if parent panel has input map, key stroke events not passed nested panel. can observe behavior commenting , uncommenting first call getinputmap().put. have solution this?
import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.keyevent; import javax.swing.abstractaction; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.keystroke; import javax.swing.swingutilities; public class inputmaptest extends jpanel { public inputmaptest() { super(new borderlayout()); jpanel panel = new jpanel(); keystroke ks = keystroke.getkeystroke(keyevent.vk_enter, 0); getinputmap().put(ks, "someaction"); getactionmap().put("someaction", new abstractaction() { @override public void actionperformed(actionevent e) { system.out.println("here1"); } }); ks = keystroke.getkeystroke(keyevent.vk_space, 0); panel.getinputmap().put(ks, "someotheraction"); panel.getactionmap().put("someotheraction", new abstractaction() { @override public void actionperformed(actionevent e) { system.out.println("here2"); } }); add(panel); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { jframe frame = new jframe(); frame.getcontentpane().add(new inputmaptest()); frame.setsize(800, 600); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlocationrelativeto(null); frame.setvisible(true); } }); } }
see oracle tutorial how use keybindings
you miss there set focus jpanel panel.getinputmap(jcomponent.when_in_focused_window).put(...)
Comments
Post a Comment