0

我正在研究一个 JTexfield,它将自己的文本设置为当焦点放在窗口上时按下的键的名称。我设法让它与代码只有一句话:

@Override
public void keyReleased(KeyEvent ev) {
    if (ev.getKeyCode() != 0) {
    keyTrigger = ev.getKeyCode();
    txtTrigger.setText(ev.getKeyText(keyTrigger));
}
}

@Override
public void keyTyped(KeyEvent ev) {
    txtTrigger.setText("");
}

但是,当您按 F1--12 或 Ctrl 之类的特殊键时,它看起来很糟糕,因为它保留了最后键入的非特殊键(例如,如果您按“T”然后按“Ctrl”,则该字段中的文本一直是“ t' 直到您释放 'Ctrl' 键)。

这是迄今为止 JTextField 的代码:

txtTrigger = new JTextField();
txtTrigger.setColumns(10);
txtTrigger.addKeyListener(this);
txtTrigger.setBounds(80, 5, 64, 20);
contentPane.add(txtTrigger);

我想要的是在您释放密钥之前该字段为空。我怎样才能让应用程序以这种方式工作?

4

2 回答 2

1

我不认为可编辑的文本字段是您的最佳选择。我过去所做的基本上是伪造的。

我已经生成了一个“看起来”像 a 的自定义组件,JTextField并且使用我自己的KeyListener向视图添加了元素(我做了我自己的“关键”渲染器,但您可以简单地拥有一个String可以渲染的元素列表)。

基本上,当keyPressed被触发时,我会将键代码添加到列表中(考虑到其修饰符状态等因素)。如果使用相同的键码触发了另一个键事件,则可以忽略它。

触发时keyReleased,您可以从活动列表中删除该键码。

于 2013-03-24T23:53:44.273 回答
0

您可以将 keylistener 添加到 jframe 或许多组件......只需确保该组件具有焦点。

于 2013-03-25T00:04:33.380 回答