我正在从事gui。
GUI的构造如下:jframe包含(自定义)左pan和右潘纳尔。RightPanel是TabBedpane的扩展,并包含作为一个选项卡,类Maintab。
。MAINTABAB具有以下代码:
private void createKeyBindings(){
actionMap = this.getActionMap();
inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke("UP),
"pressedUpArrow");
inputMap.put(KeyStroke.getKeyStroke("released UP"),
"releasedUpArrow");
actionMap.put("pressedUpArrow",
new PressedUpArrowAction());
actionMap.put("releasedUpArrow",
new ReleasedUpArrowAction());
inputMap.put(KeyStroke.getKeyStroke("RIGHT"),
"pressedRightArrow");
inputMap.put(KeyStroke.getKeyStroke("released RIGHT"),
"releasedRightArrow");
actionMap.put("pressedRightArrow",
new PressedRightArrowAction());
actionMap.put("releasedRightArrow",
new ReleasedRightArrowAction());
inputMap.put(KeyStroke.getKeyStroke("LEFT"),
"pressedLeftArrow");
inputMap.put(KeyStroke.getKeyStroke("released LEFT"),
"releasedLeftArrow");
actionMap.put("pressedLeftArrow",
new PressedLeftArrowAction());
actionMap.put("releasedLeftArrow",
new ReleasedLeftArrowAction());
inputMap.put(KeyStroke.getKeyStroke("RIGHT"),
"pressedRightArrow");
inputMap.put(KeyStroke.getKeyStroke("released RIGHT"),
"releasedRightArrow");
actionMap.put("pressedRightArrow",
new PressedRightArrowAction());
actionMap.put("releasedRightArrow",
new ReleasedRightArrowAction());
inputMap.put(KeyStroke.getKeyStroke("DOWN"),
"pressedDownArrow");
inputMap.put(KeyStroke.getKeyStroke("released DOWN"),
"releasedDownArrow");
actionMap.put("pressedDownArrow",
new PressedDownArrowAction());
actionMap.put("releasedDownArrow",
new ReleasedDownArrowAction());
}
所以,当我按下一个箭头键时,它必须采取行动,当我释放它时。
,但是只有当我释放其中一个箭头键时才做某事。原因可能是左派或右帕纳尔的其他组件之一或面板本身已经使用了该钥匙来用于其他事物。
我只是尝试清除类本身中的InputMaps和ActionMaps(this.getInputmap()。clear()),但问题仍然存在。有什么解决方案?
当您注册箭头键的笔触,但未执行相应的操作(而与其他密钥中的操作相关联,例如字母,工作正常),原因可能是JButton
或aJTextField
您的组件上的某个地方正在拦截这些箭头钥匙笔触。
要解决此问题,请致电yourJButton.setFocusable(false)
和yourJTextfield.setFocusable(false)
。这将阻止JButton
和JTextField
消耗箭头键。