[英]KeyListener not firing events in JTextField
我有一个带有Keylistener
的JTextfield
,如下所示:
field.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
log.debug("KEY PRESSED");
}
@Override
public void keyTyped(KeyEvent e) {
log.debug("KEY TYPED");
}
@Override
public void keyReleased(KeyEvent e) {
log.debug("KEY RELEASED");
}
});
但是当我键入一些键时,我可以看到keyReleased
并不总是触发。 如果它没有触发,我之后无法直接键入任何键,我必须再次单击文本字段或键入另一个键才能触发已释放的事件(键入的键未显示在文本字段中)。 我没有用 Keys 做任何其他事情,没有事件被消耗。 感觉这个事件确实是随机触发的。 KeyListener
而不是KeyAdapter
发生同样的情况:
field.addKeyListener(new KeyListener() {
我使用的是 Linux 64 位,但这也发生在 Win8 和 Win10 64 位上。 还尝试了不同的键盘和不同的电脑。
如何正确触发事件?
当我按下箭头键时必须发生的特殊事件。
Swing 组件使用 Key Bindings 将 Actions 与 KeyStrokes 相关联。
JTextField 已经具有与“箭头键”关联的默认操作。 如果要更改此行为,则需要为这些键创建自定义操作以替换默认操作。
查看 Key Bindings 以获取每个 Swing 组件的默认绑定列表。
您应该通过扩展TextAction
来创建您的 Action
static class SelectAll extends TextAction
{
public SelectAll()
{
super("Select All");
}
public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
component.selectAll();
component.requestFocusInWindow();
}
}
然后,您可以使用以下命令将其绑定到文本字段的左箭头键:
Action action = new SelectAll();
KeyStroke keyStroke = KeyStroke.getKeyStroke("LEFT");
InputMap im = textField.getInputMap();
textField.getActionMap().put(im.get(keyStroke), action);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.