tags:

views:

282

answers:

2

Hi,

I'm binding keys to events in my Java app, however, I have encountered a really strange bug that I hope you guys can help me solve.

        KeyStroke up = KeyStroke.getKeyStroke("W");
     KeyStroke down = KeyStroke.getKeyStroke("S");
     KeyStroke right = KeyStroke.getKeyStroke("D");
     KeyStroke left = KeyStroke.getKeyStroke("A");
     KeyStroke p2_up = KeyStroke.getKeyStroke("UP");
     KeyStroke p2_down = KeyStroke.getKeyStroke("DOWN");
     KeyStroke p2_left = KeyStroke.getKeyStroke("LEFT");
     KeyStroke p2_right = KeyStroke.getKeyStroke("RIGHT");
     /*KeyStroke key_1 = KeyStroke.getKeyStroke("1");
     KeyStroke key_2 = KeyStroke.getKeyStroke("2");
     KeyStroke key_3 = KeyStroke.getKeyStroke("3");
     KeyStroke key_4 = KeyStroke.getKeyStroke("4");
     KeyStroke key_5 = KeyStroke.getKeyStroke("5");
     KeyStroke key_6 = KeyStroke.getKeyStroke("6");
     KeyStroke key_7 = KeyStroke.getKeyStroke("7");
     KeyStroke key_8 = KeyStroke.getKeyStroke("8");
     KeyStroke key_9 = KeyStroke.getKeyStroke("9");
     KeyStroke key2_1 = KeyStroke.getKeyStroke("F1");
     KeyStroke key2_2 = KeyStroke.getKeyStroke("F2");
     KeyStroke key2_3 = KeyStroke.getKeyStroke("F3");
     KeyStroke key2_4 = KeyStroke.getKeyStroke("F4");
     KeyStroke key2_5 = KeyStroke.getKeyStroke("F5");
     KeyStroke key2_6 = KeyStroke.getKeyStroke("F6");
     KeyStroke key2_7 = KeyStroke.getKeyStroke("F7");
     KeyStroke key2_8 = KeyStroke.getKeyStroke("F8");
     KeyStroke key2_9 = KeyStroke.getKeyStroke("F9");*/

     InputMap inputMap = content
       .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

     inputMap.put(up, "up");
     inputMap.put(down, "down");
     inputMap.put(right, "right");
     inputMap.put(left, "left");

     inputMap.put(p2_up, "up2");
     inputMap.put(p2_down, "down2");
     inputMap.put(p2_right, "right2");
     inputMap.put(p2_left, "left2");

     Bindings KbBinds = new Bindings(this.currentBigBox);

     content.getActionMap().put("up", KbBinds.moveUp);
     content.getActionMap().put("down", KbBinds.moveDown);
     content.getActionMap().put("right", KbBinds.moveRight);
     content.getActionMap().put("left", KbBinds.moveLeft);

        content.getActionMap().put("up2", KbBinds.p2MoveUp);
     content.getActionMap().put("down2", KbBinds.p2MoveDown);
     content.getActionMap().put("right2", KbBinds.p2MoveRight);
     content.getActionMap().put("left2", KbBinds.p2MoveLeft);

Basically all keys except LEFT/RIGHT are caught and binded. If I replace this

     KeyStroke p2_left = KeyStroke.getKeyStroke("LEFT");

with KeyStroke p2_left = KeyStroke.getKeyStroke("UP");

while commenting out p2_up, p2_left works as expected.

Any clue?

+1  A: 

I didn't down vote it but I would have. The reason is 90% of the code you posted is useless in providing information about your problem. We don't know the context of how you are using the code or what component you are adding the binding to...

I've used "up, down, left, right" with no problem when doing key bindings.

If you need more help post your SSCCE.

camickr
A: 

The most likely explanation is that something is capturing those key strokes. The most likely candidates are a scroll pane or an input text box of some kind.

Yishai