我正在研究一个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',则字段中的文本在你释放'Ctrl'键之前一直保持't'。
这是JTextField的代码:
txtTrigger = new JTextField();
txtTrigger.setColumns(10);
txtTrigger.addKeyListener(this);
txtTrigger.setBounds(80, 5, 64, 20);
contentPane.add(txtTrigger);
我想要的是在释放密钥之前该字段为空。如何以这种方式运行应用程序?
答案 0 :(得分:1)
我不认为可编辑的文本字段是您最好的选择。我过去所做的基本上都是伪造的。
我已经生成了一个“看起来”像JTextField
的自定义组件,并且使用我自己的KeyListener
,我在视图中添加了元素(我使用了自己的“关键”渲染器,但你可以简单地得到一个可以渲染的String
元素列表。
基本上,当触发keyPressed
时,我会将密钥代码添加到列表中(考虑到其修饰符状态等内容)。如果使用相同的密钥代码触发了另一个键事件,则可以忽略它。
触发keyReleased
时,您可以从活动列表中删除该密钥代码。
答案 1 :(得分:0)
您可以将keylistener添加到jframe或许多组件中...... 只需确保该组件具有焦点。